~ 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