Compilation error in io.c, in scsh-0.6.6

[email protected] (Niels Möller) Wed, 23 Nov 2005 11:05:41 +0100 (MET)
Newsgroups gmane.lisp.scheme.scsh
Message-ID <[email protected]>
I just build scsh-0.6.6 on SunOS-5.10, sparc, using gcc-4.0.1. I had
to apply the below patch to c/unix/io.c; apperantly gcc doesn't like
function local static declarations of functions. (I'm not sure what
the C specification says about this code, but I'd consider function
declarations anywhere but on top level as bad style even if it is
allowed).

Error message:

  gcc -c -DHAVE_CONFIG_H -I./c -I./cig  -O2 -mcpu=v9 -o c/unix/io.o
  c/unix/io.c
  c/unix/io.c: In function 'ps_write_integer':
  c/unix/io.c:154: error: invalid storage class for function 'write_integer'
  c/unix/io.c: At top level:
  c/unix/io.c:171: error: conflicting types for 'write_integer'
  c/unix/io.c:160: error: previous implicit declaration of 'write_integer' was here
  make: *** [c/unix/io.o] Error 1

Moving the declaration to top-level solves the problem.

Best regards,
/Niels Möller

--- io.c-original	1999-09-14 14:44:54.000000000 +0200
+++ io.c	2005-11-23 10:12:24.424359000 +0100
@@ -146,13 +146,13 @@ ps_write_char(char ch, FILE *port)
       return 0; }
 }
 
+static long write_integer(unsigned long n, FILE *port);
+
 long
 ps_write_integer(long n, FILE *port)
 {
   int status;
 
-  static long write_integer(unsigned long n, FILE *port);
-
   if (n == 0) {
     WRITE_CHAR('0', port, status);
     return status; }