The branch main has been updated by mjg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=b22fdf45ff8ef1d1f9a6c28f1d7f59ca4b012da6

commit b22fdf45ff8ef1d1f9a6c28f1d7f59ca4b012da6
Author:     Mateusz Guzik <m...@freebsd.org>
AuthorDate: 2021-01-24 04:34:22 +0000
Commit:     Mateusz Guzik <m...@freebsd.org>
CommitDate: 2021-01-24 11:06:36 +0000

    libc: try to skip memcpy in _gettemp
---
 lib/libc/stdio/mktemp.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/libc/stdio/mktemp.c b/lib/libc/stdio/mktemp.c
index c47e0221e5cd..0ede3058a3d5 100644
--- a/lib/libc/stdio/mktemp.c
+++ b/lib/libc/stdio/mktemp.c
@@ -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? */
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to