From a58a827f2ae0d989102dc4d8c113b9282ef177b3 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 10 Jul 2008 11:10:10 -0400 Subject: lib9: add mode parameter to opentemp --- include/libc.h | 2 +- man/man3/opentemp.3 | 10 +++++++--- src/cmd/idiff.c | 23 ++--------------------- src/cmd/page/filter.c | 2 +- src/cmd/page/page.h | 1 - src/cmd/page/util.c | 2 +- src/cmd/page/view.c | 2 +- src/cmd/vbackup/vbackup.c | 2 +- src/lib9/opentemp.c | 13 +++++++++---- 9 files changed, 23 insertions(+), 34 deletions(-) diff --git a/include/libc.h b/include/libc.h index aa23d306..0427dadf 100644 --- a/include/libc.h +++ b/include/libc.h @@ -391,7 +391,7 @@ extern int iounit(int); /* extern double ldexp(double, int); */ extern void p9longjmp(p9jmp_buf, int); extern char* mktemp(char*); -extern int opentemp(char*); +extern int opentemp(char*, int); /* extern double modf(double, double*); */ extern void p9notejmp(void*, p9jmp_buf, int); extern void perror(const char*); diff --git a/man/man3/opentemp.3 b/man/man3/opentemp.3 index 6177b44a..63af2da7 100644 --- a/man/man3/opentemp.3 +++ b/man/man3/opentemp.3 @@ -1,13 +1,13 @@ .TH OPENTEMP 3 .SH NAME -opentemp \- create a uniquely-named file +opentemp \- create and open a uniquely-named file .SH SYNOPSIS .B #include .br .B #include .PP .B -int opentemp(char *template) +int opentemp(char *template, int mode) .SH DESCRIPTION .I Opentemp replaces @@ -28,8 +28,12 @@ are tried until the name of a file that does not yet exist .IR access (2)) is generated. .I Opentemp -then creates the file for reading and writing +then opens the file for the given +.I mode and returns the file descriptor. +Most calls should use a mode +of +.BR ORDWR|ORCLOSE . .PP If no such name can be generated, .I opentemp diff --git a/src/cmd/idiff.c b/src/cmd/idiff.c index 234333fa..aaf78be3 100644 --- a/src/cmd/idiff.c +++ b/src/cmd/idiff.c @@ -7,14 +7,11 @@ #include #include -#define opentemp idiffopentemp - int diffbflag; int diffwflag; void copy(Biobuf*, char*, Biobuf*, char*); void idiff(Biobuf*, char*, Biobuf*, char*, Biobuf*, char*, Biobuf*, char*); -int opentemp(char*, int, long); void rundiff(char*, char*, int); void @@ -63,9 +60,9 @@ main(int argc, char **argv) sysfatal("open %s: %r", argv[1]); strcpy(diffout, "/tmp/idiff.XXXXXX"); - fd = opentemp(diffout, ORDWR|ORCLOSE, 0); + fd = opentemp(diffout, ORDWR|ORCLOSE); strcpy(idiffout, "/tmp/idiff.XXXXXX"); - ofd = opentemp(idiffout, ORDWR|ORCLOSE, 0); + ofd = opentemp(idiffout, ORDWR|ORCLOSE); rundiff(argv[0], argv[1], fd); seek(fd, 0, 0); Binit(&bdiff, fd, OREAD); @@ -80,22 +77,6 @@ main(int argc, char **argv) exits(nil); } -int -opentemp(char *template, int mode, long perm) -{ - int fd; - Dir d; - - fd = mkstemp(template); - if(fd < 0) - sysfatal("could not create temporary file"); - nulldir(&d); - d.mode = perm; - dirfwstat(fd, &d); - - return fd; -} - void rundiff(char *arg1, char *arg2, int outfd) { diff --git a/src/cmd/page/filter.c b/src/cmd/page/filter.c index 2e0482fc..f9b2a8a2 100644 --- a/src/cmd/page/filter.c +++ b/src/cmd/page/filter.c @@ -32,7 +32,7 @@ initfilt(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf, char *type, cha p[1] = open("/dev/null", ORDWR); } - ofd = opentemp(template); + ofd = opentemp(template, ORDWR|ORCLOSE); switch(fork()){ case -1: fprint(2, "fork fails: %r\n"); diff --git a/src/cmd/page/page.h b/src/cmd/page/page.h index 7e6c526e..c31c1b92 100644 --- a/src/cmd/page/page.h +++ b/src/cmd/page/page.h @@ -96,7 +96,6 @@ int min(int, int); void wexits(char*); Image* xallocimage(Display*, Rectangle, ulong, int, ulong); int bell(void*, char*); -int opentemp(char *template); Image* convert(Graphic *g); extern int stdinfd; diff --git a/src/cmd/page/util.c b/src/cmd/page/util.c index 1f6fdeff..74dd9bfe 100644 --- a/src/cmd/page/util.c +++ b/src/cmd/page/util.c @@ -53,7 +53,7 @@ spooltodisk(uchar *ibuf, int in, char **name) char temp[40]; strcpy(temp, "/tmp/pagespoolXXXXXXXXX"); - fd = opentemp(temp); + fd = opentemp(temp, ORDWR|ORCLOSE); if(name) *name = estrdup(temp); diff --git a/src/cmd/page/view.c b/src/cmd/page/view.c index ab409cc7..8fc6fa79 100644 --- a/src/cmd/page/view.c +++ b/src/cmd/page/view.c @@ -732,7 +732,7 @@ viewer(Document *dd) } if(showdata(pm)) { s = estrdup("/tmp/pageplumbXXXXXXX"); - fd = opentemp(s); + fd = opentemp(s, ORDWR|ORCLOSE); write(fd, pm->data, pm->ndata); /* lose fd reference on purpose; the file is open ORCLOSE */ } else if(pm->data[0] == '/') { diff --git a/src/cmd/vbackup/vbackup.c b/src/cmd/vbackup/vbackup.c index 07000b1f..db26bc32 100644 --- a/src/cmd/vbackup/vbackup.c +++ b/src/cmd/vbackup/vbackup.c @@ -260,7 +260,7 @@ threadmain(int argc, char **argv) if(tmpnam == nil) sysfatal("smprint: %r"); - if((fd = opentemp(tmpnam)) < 0) + if((fd = opentemp(tmpnam, ORDWR|ORCLOSE)) < 0) sysfatal("opentemp %s: %r", tmpnam); if(statustime) print("# %T reading scores into %s\n", tmpnam); diff --git a/src/lib9/opentemp.c b/src/lib9/opentemp.c index f90bf771..9d4e2d07 100644 --- a/src/lib9/opentemp.c +++ b/src/lib9/opentemp.c @@ -2,14 +2,19 @@ #include int -opentemp(char *template) +opentemp(char *template, int mode) { - int fd; + int fd, fd1; fd = mkstemp(template); if(fd < 0) return -1; - remove(template); - return fd; + if((fd1 = open(template, mode)) < 0){ + remove(template); + close(fd); + return -1; + } + close(fd); + return fd1; } -- cgit v1.2.3