diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2001-05-14 13:46:55 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2001-05-14 13:46:55 +0000 |
commit | 3e3a822d182adc09a3969f4f37489c07755c52f8 (patch) | |
tree | b1b085cdcbbd6e9cabb8ed0ea5009cf550a53308 /mdk-stage1/dietlibc/libcruft/mkstemp.c | |
download | drakx-backup-do-not-use-3e3a822d182adc09a3969f4f37489c07755c52f8.tar drakx-backup-do-not-use-3e3a822d182adc09a3969f4f37489c07755c52f8.tar.gz drakx-backup-do-not-use-3e3a822d182adc09a3969f4f37489c07755c52f8.tar.bz2 drakx-backup-do-not-use-3e3a822d182adc09a3969f4f37489c07755c52f8.tar.xz drakx-backup-do-not-use-3e3a822d182adc09a3969f4f37489c07755c52f8.zip |
v0_8
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/mkstemp.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/mkstemp.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/mkstemp.c b/mdk-stage1/dietlibc/libcruft/mkstemp.c new file mode 100644 index 000000000..3b24ecb54 --- /dev/null +++ b/mdk-stage1/dietlibc/libcruft/mkstemp.c @@ -0,0 +1,23 @@ +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> + +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; } + randfd=open("/dev/urandom",O_RDONLY); + for (;;) { + read(randfd,&random,sizeof(random)); + for (i=0; i<6; ++i) { + 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; + } + close(randfd); +} |