Fixes from Sebastian Pipping/gentoo. Index: unixos.c --- unixos.c.orig +++ unixos.c @@ -26,10 +26,13 @@ #include #include #include +#include #include #include +#include #include #include +#include #include "xmalloc.h" #include "common.h" #include "part.h" @@ -38,10 +41,6 @@ #define MAXHOSTNAMELEN 64 #endif -extern int errno; -extern char *malloc(); -extern char *getenv(); - int overwrite_files = 0; int didchat; @@ -76,7 +75,7 @@ char *os_genid(void) } result = malloc(25+strlen(hostname)); - sprintf(result, "%d.%d@%s", pid, curtime++, hostname); + sprintf(result, "%d.%lld@%s", pid, (long long)curtime++, hostname); return result; } @@ -90,7 +89,7 @@ char *os_idtodir(char *id) strcpy(buf, getenv("TMPDIR")); } else { - strcpy(buf, "/usr/tmp"); + strcpy(buf, "/var/tmp"); } strcat(buf, "/m-prts-"); p = getenv("USER"); @@ -136,11 +135,7 @@ FILE *os_createnewfile(char *fname) int fd; FILE *ret; -#ifdef O_EXCL - fd=open(fname, O_RDWR|O_CREAT|O_EXCL, 0644); -#else - fd=open(fname, O_RDWR|O_CREAT|O_TRUNC, 0644); -#endif + fd=open(fname, O_RDWR|O_CREAT|O_EXCL, 0600); if (fd == -1) return NULL; @@ -149,7 +144,19 @@ FILE *os_createnewfile(char *fname) return ret; } - +FILE *os_resetfile(char *fname) +{ + int fd; + FILE *ret; + + fd=open(fname, O_RDWR|O_CREAT|O_TRUNC, 0600); + if (fd == -1) + return NULL; + + ret=fdopen(fd, "w"); + return ret; +} + /* * Create a new file, with suggested filename "fname". * "fname" may have come from an insecure source, so clean it up first.