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 *