From e3741a27343730afcb46db8889d785e2ff3af9ea Mon Sep 17 00:00:00 2001 From: marco_g Date: Sat, 22 Jan 2005 15:58:18 +0000 Subject: [PATCH] 2005-01-22 Marco Gerards * kern/misc.c (grub_strndup): Function rewritten. --- ChangeLog | 4 ++++ kern/misc.c | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce04f59ae..bcca1f81d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-01-22 Marco Gerards + + * kern/misc.c (grub_strndup): Function rewritten. + 2005-01-22 Vincent Pelletier * normal/menu.c (TERM_WIDTH): Macro redefined. diff --git a/kern/misc.c b/kern/misc.c index 2015fb704..1352a6fe5 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -354,18 +354,19 @@ grub_strdup (const char *s) char * grub_strndup (const char *s, grub_size_t n) { - grub_size_t len = 0; - char *p = (char *) s; + grub_size_t len; + char *p; - while (*(p++) && len < n) - len++; - - len = grub_strlen (s) + 1; - p = (char *) grub_malloc (len); + len = grub_strlen (s); + if (len > n) + len = n; + p = (char *) grub_malloc (len + 1); if (! p) return 0; - - return grub_memcpy (p, s, len); + + grub_memcpy (p, s, len); + p[len] = '\0'; + return p; } void *