The following code exits cleanly (exit status 0) on i386, but on macppc exits 4:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>

int main() {
  int n;
  int fd;
  char *s;
  struct stat st;

  fd = open("./blah",O_RDONLY | O_NDELAY);
  if (fd == -1) {
    exit(1);
  }
  if (fstat(fd,&st) == -1) { close(fd); exit(2); }
  s = (char *) malloc(st.st_size);
  if (!s) { close(fd); exit(3); }
  n = read(fd, (char *) s, st.st_size);
  if (n == -1) {
    fprintf(stderr,"errno: %d\n", errno);
  } else {
    fprintf(stdout,"bytes: %d\n", n);
  }
  close(fd);
  if (n != st.st_size) { free(s); exit(4); }
  free(s);
  exit(0);
}

$ gcc -o blah blah.c

i386:
$ ./blah; echo $?
bytes: 6843
0

macppc:
$ ./blah; echo $?
errno: 14
4

According to intro(2) errno 14 is:

     14 EFAULT Bad address.  The system detected an invalid address in at-
             tempting to use an argument of a call.

Is there something wrong with the .c program?

Reply via email to