mirror of
https://github.com/opnsense/src.git
synced 2026-06-10 17:22:46 -04:00
libc: try to skip memcpy in _gettemp
(cherry picked from commit b22fdf45ff)
This commit is contained in:
parent
410994f463
commit
3eae6412b5
1 changed files with 8 additions and 3 deletions
|
|
@ -123,6 +123,7 @@ _gettemp(int dfd, char *path, int *doopen, int domkdir, int slen, int oflags)
|
|||
struct stat sbuf;
|
||||
uint32_t rand;
|
||||
char carrybuf[MAXPATHLEN];
|
||||
int saved;
|
||||
|
||||
if ((doopen != NULL && domkdir) || slen < 0 ||
|
||||
(oflags & ~(O_APPEND | O_DIRECT | O_SHLOCK | O_EXLOCK | O_SYNC |
|
||||
|
|
@ -151,9 +152,7 @@ _gettemp(int dfd, char *path, int *doopen, int domkdir, int slen, int oflags)
|
|||
}
|
||||
start = trv + 1;
|
||||
|
||||
/* save first combination of random characters */
|
||||
memcpy(carrybuf, start, suffp - start);
|
||||
|
||||
saved = 0;
|
||||
oflags |= O_CREAT | O_EXCL | O_RDWR;
|
||||
for (;;) {
|
||||
if (doopen) {
|
||||
|
|
@ -170,6 +169,12 @@ _gettemp(int dfd, char *path, int *doopen, int domkdir, int slen, int oflags)
|
|||
} else if (lstat(path, &sbuf))
|
||||
return (errno == ENOENT);
|
||||
|
||||
/* save first combination of random characters */
|
||||
if (!saved) {
|
||||
memcpy(carrybuf, start, suffp - start);
|
||||
saved = 1;
|
||||
}
|
||||
|
||||
/* If we have a collision, cycle through the space of filenames */
|
||||
for (trv = start, carryp = carrybuf;;) {
|
||||
/* have we tried all possible permutations? */
|
||||
|
|
|
|||
Loading…
Reference in a new issue