OSDN Git Service

Bugfix I forgot to checkin, plus a wrapper function.
authorRob Landley <rob@landley.net>
Thu, 28 Jan 2016 19:36:12 +0000 (13:36 -0600)
committerRob Landley <rob@landley.net>
Thu, 28 Jan 2016 19:36:12 +0000 (13:36 -0600)
lib/lib.h
lib/xwrap.c
toys/posix/sed.c

index e3dbc46..5733103 100644 (file)
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -101,6 +101,7 @@ void *xzalloc(size_t size);
 void *xrealloc(void *ptr, size_t size);
 char *xstrndup(char *s, size_t n);
 char *xstrdup(char *s);
+void *xmemdup(void *s, long len);
 char *xmprintf(char *format, ...) printf_format;
 void xprintf(char *format, ...) printf_format;
 void xputs(char *s);
index a20d4b6..65e3018 100644 (file)
@@ -21,9 +21,9 @@ void xstrncpy(char *dest, char *src, size_t size)
 
 void xstrncat(char *dest, char *src, size_t size)
 {
-  long len = strlen(src);
+  long len = strlen(dest);
 
-  if (len+strlen(dest)+1 > size)
+  if (len+strlen(src)+1 > size)
     error_exit("'%s%s' > %ld bytes", dest, src, (long)size);
   strcpy(dest+len, src);
 }
@@ -80,6 +80,14 @@ char *xstrdup(char *s)
   return xstrndup(s, strlen(s));
 }
 
+void *xmemdup(void *s, long len)
+{
+  void *ret = xmalloc(len);
+  memcpy(ret, s, len);
+
+  return ret;
+}
+
 // Die unless we can allocate enough space to sprintf() into.
 char *xmprintf(char *format, ...)
 {
index a57891e..30d8a15 100644 (file)
@@ -827,8 +827,7 @@ static void jewel_of_judgement(char **pline, long len)
     if (strchr("aiqr=", c) && i>1) break;
 
     // Add step to pattern
-    corwin = xmalloc(reg-toybuf);
-    memcpy(corwin, toybuf, reg-toybuf);
+    corwin = xmemdup(toybuf, reg-toybuf);
     reg = (reg-toybuf) + (char *)corwin;
 
     // Parse arguments by command type