POSIX 2024: add mkostemp
Change-Id: I254b3e5c64f5036e99a94513f05d8c491cbd6273 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8590 Reviewed-by: waddlesplash <[email protected]> Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
@@ -68,6 +68,7 @@ extern int system(const char *command);
|
||||
extern char *mktemp(char *name);
|
||||
extern char *mkdtemp(char *templat);
|
||||
extern int mkstemp(char *templat);
|
||||
extern int mkostemp(char *templat, int oflags);
|
||||
|
||||
extern char *ecvt(double value, int digits, int *_decimalPoint, int *_sign);
|
||||
extern char *fcvt(double value, int precision, int *_decimalPoint,
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include <errno_private.h>
|
||||
|
||||
|
||||
static int _gettemp(char *, int *, int, int);
|
||||
static int _gettemp(char *, int *, int, int, int);
|
||||
|
||||
static const char padchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
@@ -55,7 +55,7 @@ int
|
||||
mkstemps(char *path, int slen)
|
||||
{
|
||||
int fd;
|
||||
return _gettemp(path, &fd, 0, slen) ? fd : -1;
|
||||
return _gettemp(path, &fd, 0, slen, 0) ? fd : -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,18 @@ int
|
||||
mkstemp(char *path)
|
||||
{
|
||||
int fd;
|
||||
if (_gettemp(path, &fd, 0, 0))
|
||||
if (_gettemp(path, &fd, 0, 0, 0))
|
||||
return fd;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
mkostemp(char *path, int oflags)
|
||||
{
|
||||
int fd;
|
||||
if (_gettemp(path, &fd, 0, 0, oflags))
|
||||
return fd;
|
||||
|
||||
return -1;
|
||||
@@ -74,14 +85,14 @@ char *
|
||||
mkdtemp(path)
|
||||
char *path;
|
||||
{
|
||||
return (_gettemp(path, (int *)NULL, 1, 0) ? path : (char *)NULL);
|
||||
return (_gettemp(path, (int *)NULL, 1, 0, 0) ? path : (char *)NULL);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
mktemp(char *path)
|
||||
{
|
||||
if (_gettemp(path, (int *)NULL, 0, 0))
|
||||
if (_gettemp(path, (int *)NULL, 0, 0, 0))
|
||||
return path;
|
||||
|
||||
return NULL;
|
||||
@@ -89,7 +100,7 @@ mktemp(char *path)
|
||||
|
||||
|
||||
static int
|
||||
_gettemp(char *path, int *doopen, int domkdir, int slen)
|
||||
_gettemp(char *path, int *doopen, int domkdir, int slen, int oflags)
|
||||
{
|
||||
char *start, *trv, *suffp;
|
||||
char *pad;
|
||||
@@ -149,7 +160,7 @@ _gettemp(char *path, int *doopen, int domkdir, int slen)
|
||||
|
||||
for (;;) {
|
||||
if (doopen) {
|
||||
if ((*doopen = open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
|
||||
if ((*doopen = open(path, O_CREAT | O_EXCL | O_RDWR | oflags, 0600)) >= 0)
|
||||
return 1;
|
||||
if (errno != EEXIST)
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user