diff --git a/ChangeLog b/ChangeLog index 1a4b09afb..71400698d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-04-13 Robert Millan + + * kern/misc.c (grub_strncat): Fix off-by-one error. + Reported by Zhang Huan + + * kern/env.c (grub_env_context_close): Clear current context, not + previous one. + Patch from Zhang Huan + + * kern/misc.c (grub_strcat): Minor speed optimization (same code size). + 2008-04-13 Robert Millan Improve robustness when handling LVM. diff --git a/kern/env.c b/kern/env.c index 2b777826e..a13989837 100644 --- a/kern/env.c +++ b/kern/env.c @@ -124,7 +124,7 @@ grub_env_context_close (void) { struct grub_env_var *p, *q; - for (p = current_context->prev->vars[i]; p; p = q) + for (p = current_context->vars[i]; p; p = q) { q = p->next; grub_free (p); diff --git a/kern/misc.c b/kern/misc.c index e6d5c057f..1374e3b5f 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -94,8 +94,11 @@ grub_strcat (char *dest, const char *src) while (*p) p++; - while ((*p++ = *src++) != '\0') - ; + while ((*p = *src) != '\0') + { + p++; + src++; + } return dest; } @@ -108,10 +111,14 @@ grub_strncat (char *dest, const char *src, int c) while (*p) p++; - while ((*p++ = *src++) != '\0' && --c) - ; - *(--p) = '\0'; - + while ((*p = *src) != '\0' && c--) + { + p++; + src++; + } + + *p = '\0'; + return dest; }