From aa6665a3224214889c4ce2687f471ca4c5916e55 Mon Sep 17 00:00:00 2001 From: Clement Chesnin Date: Sat, 21 Nov 2009 12:44:37 +0200 Subject: [PATCH] Add strtok_r() replacement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Denis-Courmont --- compat/strtok_r.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- include/vlc_fixups.h | 4 ++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100755 compat/strtok_r.c diff --git a/compat/strtok_r.c b/compat/strtok_r.c new file mode 100755 index 0000000000..b1968c7e35 --- /dev/null +++ b/compat/strtok_r.c @@ -0,0 +1,52 @@ +/***************************************************************************** + * strtok_r.c: POSIX strtok_r() replacement + ***************************************************************************** + * Copyright © 1998-2009 the VideoLAN project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +char *strtok_r(char *s, const char *delim, char **save_ptr) +{ + char *token; + + if (s == NULL) + s = *save_ptr; + + /* Scan leading delimiters. */ + s += strspn (s, delim); + if (*s == '\0') + return NULL; + + /* Find the end of the token. */ + token = s; + s = strpbrk (token, delim); + if (s == NULL) + /* This token finishes the string. */ + *save_ptr = strchr (token, '\0'); + else + { + /* Terminate the token and make *SAVE_PTR point past it. */ + *s = '\0'; + *save_ptr = s + 1; + } + return token; +} diff --git a/configure.ac b/configure.ac index 89b4b66ae9..ae392fbfbe 100644 --- a/configure.ac +++ b/configure.ac @@ -576,7 +576,7 @@ need_libc=false dnl Check for usual libc functions AC_CHECK_FUNCS([gettimeofday isatty sigrelse getpwuid_r memalign posix_memalign if_nametoindex getenv putenv setenv ctime_r daemon fork lstat posix_fadvise posix_madvise uselocale]) AC_CHECK_FUNCS(fcntl) -AC_REPLACE_FUNCS([asprintf atof atoll getcwd getpid gmtime_r lldiv localtime_r rewind strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtoll vasprintf swab]) +AC_REPLACE_FUNCS([asprintf atof atoll getcwd getpid gmtime_r lldiv localtime_r rewind strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtok_r strtoll vasprintf swab]) AC_CHECK_FUNCS([stricmp strnicmp]) AC_CHECK_FUNCS(fdatasync,, [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.]) diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h index 512b78557e..e0ebdb0174 100644 --- a/include/vlc_fixups.h +++ b/include/vlc_fixups.h @@ -146,6 +146,10 @@ char *getcwd (char *buf, size_t size); pid_t getpid (void); #endif +#ifndef HAVE_STRTOK_R +char *strtok_r(char *, const char *, char **); +#endif + #ifdef __cplusplus } /* extern "C" */ #endif