lib9: add mode parameter to opentemp
This commit is contained in:
parent
c224dda84e
commit
a58a827f2a
9 changed files with 23 additions and 34 deletions
|
|
@ -391,7 +391,7 @@ extern int iounit(int);
|
|||
/* extern double ldexp(double, int); <math.h> */
|
||||
extern void p9longjmp(p9jmp_buf, int);
|
||||
extern char* mktemp(char*);
|
||||
extern int opentemp(char*);
|
||||
extern int opentemp(char*, int);
|
||||
/* extern double modf(double, double*); <math.h> */
|
||||
extern void p9notejmp(void*, p9jmp_buf, int);
|
||||
extern void perror(const char*);
|
||||
|
|
|
|||
|
|
@ -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 <u.h>
|
||||
.br
|
||||
.B #include <libc.h>
|
||||
.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
|
||||
|
|
|
|||
|
|
@ -7,14 +7,11 @@
|
|||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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] == '/') {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -2,14 +2,19 @@
|
|||
#include <libc.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue