~ chicken-core (chicken-5) f97cfc9008e4cb9bbd13f4082f1407fa37bd60ff
commit f97cfc9008e4cb9bbd13f4082f1407fa37bd60ff Author: Peter Bex <peter.bex@xs4all.nl> AuthorDate: Sun Nov 10 21:53:32 2013 +0100 Commit: Christian Kellermann <ckeen@pestilenz.org> CommitDate: Tue Nov 12 20:54:25 2013 +0100 Fix various Haiku issues - It was unable to load shared libraries (module files) outside LIBRARY_PATH because it wasn't marked as an ELF platform - The unsetenv() test failed. It was using putenv() but Haiku is a (mostly) GNU system so unsetenv() is available - repository path support was broken as it used strcat() on uninitialized memory - fast_read_string_from_file defined variables after other statements; this is not accepted by GCC 2, which Haiku still uses as main compiler Signed-off-by: Christian Kellermann <ckeen@pestilenz.org> diff --git a/chicken.h b/chicken.h index 15e2ad6e..6265940d 100644 --- a/chicken.h +++ b/chicken.h @@ -73,7 +73,7 @@ # define C_XXXBSD #endif -#if /*defined(__GNUC__) &&*/ (defined(__linux__) || defined(C_XXXBSD)) +#if /*defined(__GNUC__) &&*/ (defined(__linux__) || defined(C_XXXBSD) || defined(__HAIKU__)) # define C_GNU_ENV #endif @@ -3047,7 +3047,7 @@ C_path_to_executable(C_char *fname) while (get_next_image_info(0, &cookie, &info) == B_OK) { if (info.type == B_APP_IMAGE) { - C_strcat(buffer, info.name); + C_strcpy(buffer, info.name); for(i = C_strlen(buffer); i >= 0 && buffer[ i ] != '/'; --i); diff --git a/csc.scm b/csc.scm index bf76b60d..0248e0a3 100644 --- a/csc.scm +++ b/csc.scm @@ -73,7 +73,7 @@ (define aix (eq? (build-platform) 'aix)) (define elf - (memq (software-version) '(linux netbsd freebsd solaris openbsd hurd))) + (memq (software-version) '(linux netbsd freebsd solaris openbsd hurd haiku))) (define (stop msg . args) (fprintf (current-error-port) "~a: ~?~%" CSC_PROGRAM msg args) diff --git a/eval.scm b/eval.scm index bf447d85..7940066e 100644 --- a/eval.scm +++ b/eval.scm @@ -1066,7 +1066,7 @@ (define dynamic-load-libraries (let ((ext - (if (and (memq (software-version) '(linux netbsd openbsd freebsd)) + (if (and (memq (software-version) '(linux netbsd openbsd freebsd haiku)) (not (zero? binary-version))) ; allow "configless" build (string-append ##sys#load-library-extension diff --git a/library.scm b/library.scm index db9fe319..6756b323 100644 --- a/library.scm +++ b/library.scm @@ -109,13 +109,14 @@ fast_read_line_from_file(C_word str, C_word port, C_word size) { static C_word fast_read_string_from_file(C_word dest, C_word port, C_word len, C_word pos) { + size_t m; int n = C_unfix (len); char * buf = ((char *)C_data_pointer (dest) + C_unfix (pos)); C_FILEPTR fp = C_port_file (port); if(feof(fp)) return C_SCHEME_END_OF_FILE; - size_t m = fread (buf, sizeof (char), n, fp); + m = fread (buf, sizeof (char), n, fp); if (m < n) { if (ferror(fp)) /* Report to Scheme, which may retry, so clear errors */Trap