~ 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