bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] savedir: simplify by using stpcpy


From: Paul Eggert
Subject: [PATCH] savedir: simplify by using stpcpy
Date: Sun, 23 Feb 2014 14:20:18 -0800

* lib/savedir.c (direntry_t): Remove size member.  All uses removed.
(streamsavedir): Use stpcpy instead.
* modules/savedir (Depends-on): Add stpcpy.
---
 ChangeLog       |  7 +++++++
 lib/savedir.c   | 34 ++++++++++++++++------------------
 modules/savedir |  1 +
 3 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5b42661..a46689f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-02-23  Paul Eggert  <address@hidden>
+
+       savedir: simplify by using stpcpy
+       * lib/savedir.c (direntry_t): Remove size member.  All uses removed.
+       (streamsavedir): Use stpcpy instead.
+       * modules/savedir (Depends-on): Add stpcpy.
+
 2014-02-21  Pádraig Brady <address@hidden>
 
        spawn: fix link error on uclibc
diff --git a/lib/savedir.c b/lib/savedir.c
index badf602..111d84b 100644
--- a/lib/savedir.c
+++ b/lib/savedir.c
@@ -40,7 +40,6 @@
 typedef struct
 {
   char *name;
-  size_t size;
 #if D_INO_IN_DIRENT
   ino_t ino;
 #endif
@@ -128,25 +127,24 @@ streamsavedir (DIR *dirp, enum savedir_option option)
                   entries_allocated = n;
                 }
               entries[entries_used].name = xstrdup (entry);
-             entries[entries_used].size = entry_size;
 #if D_INO_IN_DIRENT
               entries[entries_used].ino = dp->d_ino;
 #endif
               entries_used++;
             }
-         else
-           {
-             if (allocated - used <= entry_size)
-               {
-                 size_t n = used + entry_size;
-                 if (n < used)
-                   xalloc_die ();
-                 name_space = x2nrealloc (name_space, &n, 1);
-                 allocated = n;
-               }
-             memcpy (name_space + used, entry, entry_size);
-           }
-         used += entry_size;
+          else
+            {
+              if (allocated - used <= entry_size)
+                {
+                  size_t n = used + entry_size;
+                  if (n < used)
+                    xalloc_die ();
+                  name_space = x2nrealloc (name_space, &n, 1);
+                  allocated = n;
+                }
+              memcpy (name_space + used, entry, entry_size);
+            }
+          used += entry_size;
         }
     }
 
@@ -168,9 +166,9 @@ streamsavedir (DIR *dirp, enum savedir_option option)
       used = 0;
       for (i = 0; i < entries_used; i++)
         {
-          memcpy (name_space + used, entries[i].name, entries[i].size);
-          used += entries[i].size;
-         free (entries[i].name);
+          char *dest = name_space + used;
+          used += stpcpy (dest, entries[i].name) - dest + 1;
+          free (entries[i].name);
         }
       free (entries);
     }
diff --git a/modules/savedir b/modules/savedir
index f17ab0a..4210981 100644
--- a/modules/savedir
+++ b/modules/savedir
@@ -12,6 +12,7 @@ dirent-safer
 fdopendir
 opendir
 readdir
+stpcpy
 xalloc
 
 configure.ac:
-- 
1.8.5.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]