From: Herman B. <her...@us...> - 2003-01-03 20:50:59
|
Update of /cvsroot/gaim/gaim/src/win32 In directory sc8-pr-cvs1:/tmp/cvs-serv15715 Modified Files: libc_interface.c Log Message: strsep Index: libc_interface.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/win32/libc_interface.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- libc_interface.c 21 Oct 2002 18:32:24 -0000 1.2 +++ libc_interface.c 3 Jan 2003 20:50:56 -0000 1.3 @@ -168,6 +168,47 @@ return strerror( errornum ); } +/* From glibc 2.2.5 */ +char* wgaim_strsep(char **stringp, const char *delim) { + char *begin, *end; + + begin = *stringp; + if (begin == NULL) + return NULL; + + /* A frequent case is when the delimiter string contains only one + character. Here we don't need to call the expensive `strpbrk' + function and instead work using `strchr'. */ + if (delim[0] == '\0' || delim[1] == '\0') { + char ch = delim[0]; + + if (ch == '\0') + end = NULL; + else { + if (*begin == ch) + end = begin; + else if (*begin == '\0') + end = NULL; + else + end = strchr (begin + 1, ch); + } + } + else + /* Find the end of the token. */ + end = strpbrk (begin, delim); + + if (end) { + /* Terminate the token and set *STRINGP past NUL character. */ + *end++ = '\0'; + *stringp = end; + } + else + /* No more delimiters; this is the last token. */ + *stringp = NULL; + + return begin; +} + /* unistd.h */ /* |