Browse Source

xstrndup: Use strndup instead of implementing it.

Signed-off-by: Martin Lewis <martin.lewis.x84@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Martin Lewis 4 years ago
parent
commit
9b4a9d96b8
1 changed files with 5 additions and 14 deletions
  1. 5 14
      libbb/xfuncs_printf.c

+ 5 - 14
libbb/xfuncs_printf.c

@@ -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)