>From 469cd10e9a11f146b1056ebb65b99dfc39d06a74 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sun, 10 Nov 2013 21:53:32 +0100 Subject: [PATCH] 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 --- chicken.h | 4 ++-- csc.scm | 2 +- eval.scm | 2 +- library.scm | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/chicken.h b/chicken.h index 15e2ad6..6265940 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 bf76b60..0248e0a 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 bf447d8..7940066 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 db9fe31..6756b32 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 */ -- 1.7.10.4