xstrndup: Use strndup instead of implementing it.
[oweals/busybox.git] / 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)