xstrndup: Use strndup instead of implementing it.
authorMartin Lewis <martin.lewis.x84@gmail.com>
Sun, 8 Mar 2020 18:35:20 +0000 (13:35 -0500)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 8 Jun 2020 23:55:59 +0000 (01:55 +0200)
Signed-off-by: Martin Lewis <martin.lewis.x84@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/xfuncs_printf.c

index 93f325c6236a4f703a34b736f453f503320fc5f1..f1cf7aeed2f6f587cb41bc3061ca049cdcc8b614 100644 (file)
@@ -93,26 +93,17 @@ char* FAST_FUNC xstrdup(const char *s)
 // the (possibly truncated to length n) string into it.
 char* FAST_FUNC xstrndup(const char *s, int n)
 {
-       int m;
        char *t;
 
        if (ENABLE_DEBUG && s == NULL)
                bb_simple_error_msg_and_die("xstrndup bug");
 
-       /* We can just xmalloc(n+1) and strncpy into it, */
-       /* but think about xstrndup("abc", 10000) wastage! */
-       m = n;
-       t = (char*) s;
-       while (m) {
-               if (!*t) break;
-               m--;
-               t++;
-       }
-       n -= m;
-       t = xmalloc(n + 1);
-       t[n] = '\0';
+       t = strndup(s, n);
 
-       return memcpy(t, s, n);
+       if (t == NULL)
+               bb_die_memory_exhausted();
+
+       return t;
 }
 
 void* FAST_FUNC xmemdup(const void *s, int n)