diff options
author | Romain Naour <romain.naour@openwide.fr> | 2015-08-01 18:31:06 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2015-08-14 23:29:22 +0200 |
commit | 6cf35f84045f38f067365623886fecff16ca92f9 (patch) | |
tree | 5c7788b303ed40482562d4e00d12363999500614 /libc/misc | |
parent | 8cde3a9bf2856dcb9a759dec7ecb04a68e712254 (diff) |
add mkstemps, mkstemps64 and mkostemps, mkostemps64 functions
Change __gen_tempname() prototype in order to pass the additional
suffix lenght. In __gen_tempname() add a new check for suffixlen.
Update some comments in the code.
Signed-off-by: Romain Naour <romain.naour@openwide.fr>
Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
Diffstat (limited to 'libc/misc')
-rw-r--r-- | libc/misc/internals/tempname.c | 16 | ||||
-rw-r--r-- | libc/misc/internals/tempname.h | 3 |
2 files changed, 11 insertions, 8 deletions
diff --git a/libc/misc/internals/tempname.c b/libc/misc/internals/tempname.c index edcc31c1a..7654eb433 100644 --- a/libc/misc/internals/tempname.c +++ b/libc/misc/internals/tempname.c @@ -163,10 +163,10 @@ static void brain_damaged_fillrand(unsigned char *buf, unsigned int len) } } -/* Generate a temporary file name based on TMPL. TMPL must match the - rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed - does not exist at the time of the call to __gen_tempname. TMPL is - overwritten with the result. +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp[s] (i.e. end in "prefixXXXXXXsuffix"). The name + constructed does not exist at the time of the call to __gen_tempname. + TMPL is overwritten with the result. KIND may be one of: __GT_NOCREATE: simply verify that the name does not exist @@ -177,7 +177,8 @@ static void brain_damaged_fillrand(unsigned char *buf, unsigned int len) __GT_DIR: create a directory with given mode. */ -int attribute_hidden __gen_tempname (char *tmpl, int kind, int flags, mode_t mode) +int attribute_hidden __gen_tempname (char *tmpl, int kind, int flags, + int suffixlen, mode_t mode) { char *XXXXXX; unsigned int i; @@ -187,8 +188,9 @@ int attribute_hidden __gen_tempname (char *tmpl, int kind, int flags, mode_t mod len = strlen (tmpl); /* This is where the Xs start. */ - XXXXXX = tmpl + len - 6; - if (len < 6 || strcmp (XXXXXX, "XXXXXX")) + XXXXXX = tmpl + len - 6 - suffixlen; + if (len < 6 || suffixlen < 0 || suffixlen > len - 6 + || strncmp (XXXXXX, "XXXXXX", 6)) { __set_errno (EINVAL); return -1; diff --git a/libc/misc/internals/tempname.h b/libc/misc/internals/tempname.h index edfe26d8c..cc20f756c 100644 --- a/libc/misc/internals/tempname.h +++ b/libc/misc/internals/tempname.h @@ -10,7 +10,8 @@ extern int ___path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx /*, int try_tmpdir */) attribute_hidden; #define __path_search(tmpl, tmpl_len, dir, pfx, try_tmpdir) ___path_search(tmpl, tmpl_len, dir, pfx) -extern int __gen_tempname (char *__tmpl, int __kind, int flags, mode_t mode) attribute_hidden; +extern int __gen_tempname (char *__tmpl, int __kind, int flags, + int suffixlen, mode_t mode) attribute_hidden; /* The __kind argument to __gen_tempname may be one of: */ #define __GT_FILE 0 /* create a file */ |