--- ray/src/util/rpiece.c 1993/08/06 17:19:52 2.25 +++ ray/src/util/rpiece.c 1994/04/11 14:44:10 2.30 @@ -39,7 +39,7 @@ char *argv[]; #endif #endif /* protection from SYSV signals(!) */ -#if defined(sgi) || defined(hpux) +#if defined(sgi) #define guard_io() sighold(SIGALRM) #define unguard() sigrelse(SIGALRM) #endif @@ -148,7 +148,8 @@ char *argv[]; case 'F': /* syncronization file */ if (argv[i][2]) break; - if ((syncfp = fopen(argv[++i],"r+")) == NULL) { + if ((syncfp = + fdopen(open(argv[++i],O_RDWR|O_CREAT,0666),"r+")) == NULL) { fprintf(stderr, "%s: cannot open\n", argv[i]); exit(1); @@ -186,10 +187,12 @@ int fd; int ltyp; { static struct flock fls; /* static so initialized to zeroes */ + extern char *sys_errlist[]; fls.l_type = ltyp; if (fcntl(fd, F_SETLKW, &fls) < 0) { - fprintf(stderr, "%s: cannot lock/unlock file\n", progname); + fprintf(stderr, "%s: cannot lock/unlock file: %s\n", + progname, sys_errlist[errno]); exit(1); } } @@ -230,7 +233,8 @@ char **av; dolock(outfd, F_WRLCK); if ((fp = fdopen(dup(outfd), "w")) == NULL) goto filerr; - printargs(ac, av, fp); /* write header */ + newheader("RADIANCE", fp); /* create header */ + printargs(ac, av, fp); fprintf(fp, "SOFTWARE= %s\n", VersionID); fputs(VIEWSTR, fp); fprintview(&ourview, fp); @@ -321,10 +325,7 @@ int *xp, *yp; sflock(F_UNLCK); /* release sync file */ return(1); } - if (scanf("%d %d", xp, yp) == 2) /* use stdin */ - return(1); - fprintf(stderr, "%s: input format error\n", progname); - exit(cleanup(1)); + return(scanf("%d %d", xp, yp) == 2); /* use stdin */ } @@ -344,6 +345,10 @@ register int *xp, *yp; return(0); /* only check if asked */ if (pdone == NULL) /* first call */ pdone = calloc(hmult*vmult, sizeof(char)); + if (pdone == NULL) { + fprintf(stderr, "%s: out of memory\n", progname); + exit(1); + } if (readpos != -1) /* mark what's been done */ fseek(syncfp, readpos, 0); while (fscanf(syncfp, "%d %d", xp, yp) == 2) @@ -484,28 +489,30 @@ int xpos, ypos; /* lock file section so NFS doesn't mess up */ fls.l_whence = 0; fls.l_type = F_WRLCK; - fcntl(outfd, F_SETLKW, &fls); + if (fcntl(outfd, F_SETLKW, &fls) < 0) + filerr("lock"); #endif /* write new piece to file */ if (lseek(outfd, fls.l_start, 0) == -1) - goto seekerr; + filerr("seek"); if (hmult == 1) { if (writebuf(outfd, (char *)pbuf, vr*hr*sizeof(COLR)) != vr*hr*sizeof(COLR)) - goto writerr; + filerr("write"); } else for (y = 0; y < vr; y++) { if (writebuf(outfd, (char *)(pbuf+y*hr), hr*sizeof(COLR)) != hr*sizeof(COLR)) - goto writerr; + filerr("write"); if (y < vr-1 && lseek(outfd, (long)(hmult-1)*hr*sizeof(COLR), 1) == -1) - goto seekerr; + filerr("seek"); } #if NFS fls.l_type = F_UNLCK; /* release lock */ - fcntl(outfd, F_SETLKW, &fls); + if (fcntl(outfd, F_SETLKW, &fls) < 0) + filerr("lock"); #endif if (syncfp != NULL) { /* record what's been done */ sflock(F_WRLCK); @@ -522,11 +529,16 @@ int xpos, ypos; if (pid == -1) /* didn't fork or fork failed */ return(0); _exit(0); /* else exit child process (releasing locks) */ -seekerr: - fprintf(stderr, "%s: seek error on file \"%s\"\n", progname, outfile); - _exit(1); -writerr: - fprintf(stderr, "%s: write error on file \"%s\"\n", progname, outfile); +} + + +filerr(t) /* report file error and exit */ +char *t; +{ + extern char *sys_errlist[]; + + fprintf(stderr, "%s: %s error on file \"%s\": %s\n", + progname, t, outfile, sys_errlist[errno]); _exit(1); }