--- ray/src/rt/rpict.c 1993/07/30 10:31:09 2.26 +++ ray/src/rt/rpict.c 1993/08/06 17:12:19 2.28 @@ -94,7 +94,22 @@ extern char *mktemp(); double pixvalue(); +#ifdef NIX +#define file_exists(f) (access(f,F_OK)==0) +#else +#include +#include +int +file_exists(fname) /* ordinary file exists? */ +char *fname; +{ + struct stat sbuf; + if (stat(fname, &sbuf) < 0) return(0); + return((sbuf.st_mode & S_IFREG) != 0); +} +#endif + quit(code) /* quit program */ int code; { @@ -190,12 +205,19 @@ char *pout, *zout, *prvr; cp--; strcpy(cp, RFTEMPLATE); prvr = mktemp(fbuf2); - if (rename(fbuf, prvr) < 0 && errno != ENOENT) { - sprintf(errmsg, + if (rename(fbuf, prvr) < 0) + if (errno == ENOENT) { /* ghost file */ + sprintf(errmsg, + "new output file \"%s\"", + fbuf); + error(WARNING, errmsg); + prvr = NULL; + } else { /* serious error */ + sprintf(errmsg, "cannot rename \"%s\" to \"%s\"", fbuf, prvr); - error(SYSTEM, errmsg); - } + error(SYSTEM, errmsg); + } } } npicts = 0; /* render sequence */ @@ -205,8 +227,15 @@ char *pout, *zout, *prvr; pctdone = 0.0; if (pout != NULL) { sprintf(fbuf, pout, seq); - if (prvr == NULL && access(fbuf, F_OK) == 0) + if (file_exists(fbuf)) { + if (prvr != NULL || !strcmp(fbuf, pout)) { + sprintf(errmsg, + "output file \"%s\" exists", + fbuf); + error(USER, errmsg); + } continue; /* don't clobber */ + } if (freopen(fbuf, "w", stdout) == NULL) { sprintf(errmsg, "cannot open output file \"%s\"", fbuf);