--- MITgcm/tools/mpack-1.6/unixos.c 2008/02/23 03:30:03 1.4 +++ MITgcm/tools/mpack-1.6/unixos.c 2008/02/26 17:05:00 1.5 @@ -23,24 +23,30 @@ * SOFTWARE. */ #include +#include #include #include #include #include +#include #include +#include #include #include +#include #include "xmalloc.h" #include "common.h" #include "part.h" +extern void warn(char *s); + #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 64 #endif +#ifndef errno extern int errno; -/* extern char *malloc(); */ -extern char *getenv(); +#endif int overwrite_files = 0; int didchat; @@ -75,8 +81,8 @@ } } - result = (char *)malloc(25+strlen(hostname)); - sprintf(result, "%d.%d@%s", pid, curtime++, hostname); + result = malloc(25+strlen(hostname)); + sprintf(result, "%d.%lu@%s", pid, (unsigned long) curtime++, hostname); return result; } @@ -90,7 +96,7 @@ strcpy(buf, getenv("TMPDIR")); } else { - strcpy(buf, "/usr/tmp"); + strcpy(buf, "/var/tmp"); } strcat(buf, "/m-prts-"); p = getenv("USER"); @@ -137,7 +143,14 @@ FILE *ret; #ifdef O_EXCL - fd=open(fname, O_RDWR|O_CREAT|O_EXCL, 0644); + struct stat statbuf; + + if ((stat(fname, &statbuf) == 0) && (S_ISCHR(statbuf.st_mode))) { + fd=open(fname, O_RDWR); + } + else { + fd=open(fname, O_RDWR|O_CREAT|O_EXCL, 0644); + } #else fd=open(fname, O_RDWR|O_CREAT|O_TRUNC, 0644); #endif @@ -194,7 +207,7 @@ do { if (outfile) fclose(outfile); sprintf(buf, "part%d", ++filesuffix); - } while (outfile = fopen(buf, "r")); + } while ((outfile = fopen(buf, "r"))); fname = buf; } else if (!overwrite_files && (outfile = fopen(fname, "r"))) { @@ -202,7 +215,7 @@ fclose(outfile); sprintf(buf, "%s.%d", fname, ++filesuffix); - } while (outfile = fopen(buf, "r")); + } while ((outfile = fopen(buf, "r"))); fname = buf; } @@ -228,7 +241,7 @@ p = strchr(descfname, '/'); if (!p) p = descfname; - if (p = strrchr(p, '.')) *p = '\0'; + if ((p = strrchr(p, '.'))) *p = '\0'; strcat(descfname, ".desc"); (void) rename(TEMPFILENAME, descfname);