X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fstrsep.c;h=9f2fdd2b57a040c8510babaa50a168dfea3118d8;hb=ba4000b09804294e46373afb2003744612096a20;hp=1a86852b8d907341ce8c246db850d8887c8cf7b9;hpb=1e4ece4ab9850fbfa88c9ec43ea518c7bc266792;p=gnulib.git diff --git a/lib/strsep.c b/lib/strsep.c index 1a86852b8..9f2fdd2b5 100644 --- a/lib/strsep.c +++ b/lib/strsep.c @@ -29,19 +29,26 @@ strsep (char **stringp, const char *delim) char *start = *stringp; char *ptr; - if (!start) + if (start == NULL) return NULL; - if (!*delim) - ptr = start + strlen (start); + /* Optimize the case of no delimiters. */ + if (delim[0] == '\0') + { + *stringp = NULL; + return start; + } + + /* Optimize the case of one delimiter. */ + if (delim[1] == '\0') + ptr = strchr (start, delim[0]); else + /* The general case. */ + ptr = strpbrk (start, delim); + if (ptr == NULL) { - ptr = strpbrk (start, delim); - if (!ptr) - { - *stringp = NULL; - return start; - } + *stringp = NULL; + return start; } *ptr = '\0';