From e9c805ffdec34c66fdc751ea222fa40678c71351 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Fri, 24 Feb 2017 22:10:56 +0100 Subject: common: Add strsep() implementation for platforms lacking it --- configure.ac | 7 +++++++ src/common.c | 17 +++++++++++++++++ src/common.h | 8 ++++++++ 3 files changed, 32 insertions(+) diff --git a/configure.ac b/configure.ac index d36cc67..2b31499 100644 --- a/configure.ac +++ b/configure.ac @@ -59,6 +59,13 @@ case "$host_os" in ;; esac +AC_CHECK_FUNCS([strsep strcspn]) +if test x$ac_cv_func_strsep != xyes; then + if test x$ac_cv_func_strcspn != xyes; then + AC_MSG_ERROR([You need either strsep or strcspn to build $PACKAGE]) + fi +fi + AC_SUBST(GLOBAL_CFLAGS) AC_SUBST(AC_LDFLAGS) AC_SUBST(AC_LDADD) diff --git a/src/common.c b/src/common.c index 691137d..7bbe33a 100644 --- a/src/common.c +++ b/src/common.c @@ -21,6 +21,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -282,3 +286,16 @@ void idevicerestore_progress(struct idevicerestore_client_t* client, int step, d } } } + +#ifndef HAVE_STRSEP +char* strsep(char** strp, const char* delim) +{ + char *p, *s; + if (strp == NULL || *strp == NULL || **strp == '\0') return NULL; + s = *strp; + p = s + strcspn(s, delim); + if (*p != '\0') *p++ = '\0'; + *strp = p; + return s; +} +#endif diff --git a/src/common.h b/src/common.h index 8340d03..5f1d763 100644 --- a/src/common.h +++ b/src/common.h @@ -28,6 +28,10 @@ extern "C" { #endif +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include @@ -131,6 +135,10 @@ int mkdir_with_parents(const char *dir, int mode); void idevicerestore_progress(struct idevicerestore_client_t* client, int step, double progress); +#ifndef HAVE_STRSEP +char* strsep(char** strp, const char* delim); +#endif + #ifdef __cplusplus } #endif -- cgit v1.1-32-gdbae