From 3ab8ce52f9c1ab921175aa930f6b8fe91b78e62b Mon Sep 17 00:00:00 2001 From: Jeremy Compostella Date: Wed, 7 Sep 2016 14:09:34 +0200 Subject: libpayload: Fix strtok_r This patch makes strtok_r: - handle the end of the string - handle string that contains only delimiters - do not set ptr outside of str Change-Id: I49925040d951dffb9c11425334674d8d498821f1 Signed-off-by: Jeremy Compostella Reviewed-on: https://review.coreboot.org/16524 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer Reviewed-by: Nico Huber --- payloads/libpayload/libc/string.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/payloads/libpayload/libc/string.c b/payloads/libpayload/libc/string.c index 99857493c0..a58efde135 100644 --- a/payloads/libpayload/libc/string.c +++ b/payloads/libpayload/libc/string.c @@ -609,11 +609,15 @@ char* strtok_r(char *str, const char *delim, char **ptr) /* skip over prefix delimiters */ char *start = str + strspn(str, delim); + if (start[0] == '\0') + return NULL; + /* find first delimiter character */ char *end = start + strcspn(start, delim); - end[0] = '\0'; + *ptr = end; + if (end[0] != '\0') + *(*ptr)++ = '\0'; - *ptr = end+1; return start; } -- cgit v1.2.3