diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
commit | 09e967c2d732783b2579e4e120cd9b608404cb00 (patch) | |
tree | 8d2783a6a7e33608c6012efd6a88b8f5694df81d /mdk-stage1/dietlibc/libcruft/mkstemp.c | |
parent | 18fcff49d3c836697d3b75a3d01d31c700e69974 (diff) | |
download | drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.gz drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.bz2 drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.xz drakx-09e967c2d732783b2579e4e120cd9b608404cb00.zip |
Merge from R9_0-AMD64, most notably:
- AMD64 support to insmod-busybox, minilibc, et al.
- Sync with insmod-modutils 2.4.19 something but everyone should use
dietlibc nowadays
- Factor out compilation and prefix with $(DIET) for dietlibc builds
- 64-bit & varargs fixes
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/mkstemp.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/mkstemp.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/mkstemp.c b/mdk-stage1/dietlibc/libcruft/mkstemp.c index 3b24ecb54..7dc19d4ed 100644 --- a/mdk-stage1/dietlibc/libcruft/mkstemp.c +++ b/mdk-stage1/dietlibc/libcruft/mkstemp.c @@ -1,14 +1,21 @@ #include <unistd.h> #include <fcntl.h> #include <string.h> +#include <stdlib.h> #include <errno.h> +#include "dietfeatures.h" + +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif int mkstemp(char* template) { char *tmp=template+strlen(template)-6; int randfd; int i,res; unsigned int random; - for (i=0; i<6; ++i) if (tmp[i]!='X') { __set_errno(EINVAL); return -1; } + if (tmp<template) goto error; + for (i=0; i<6; ++i) if (tmp[i]!='X') { error: errno=EINVAL; return -1; } randfd=open("/dev/urandom",O_RDONLY); for (;;) { read(randfd,&random,sizeof(random)); @@ -16,8 +23,9 @@ int mkstemp(char* template) { int hexdigit=(random>>(i*5))&0x1f; tmp[i]=hexdigit>9?hexdigit+'a'-10:hexdigit+'0'; } - res=open(template,O_CREAT|O_RDWR|O_EXCL,0600); - if (res>=0) return res; + res=open(template,O_CREAT|O_RDWR|O_EXCL|O_NOFOLLOW,0600); + if (res>=0 || errno!=EEXIST) break; } close(randfd); + return res; } |