utils: drop strtok_r from envlist_parse

The problem is that mingw 4.9.1 fails to compile the code with the
following warning:

/mingw/include/string.h:88:9: note: previous declaration of 'strtok_r'
was here
   char *strtok_r(char * __restrict__ _Str,
                  const char * __restrict__ _Delim,
                  char ** __restrict__ __last);
/include/sysemu/os-win32.h:83:7: warning: redundant redeclaration of
   'strtok_r' [-Wredundant-decls]
   char *strtok_r(char *str, const char *delim, char **saveptr);

The problem is that compiles just fine on previous versions of mingw.
Compiler version check here is not a good idea. Though fortunately
strtok_r is used only once in the code and we could simply rewrite
the code without it.

Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Eric Blake <eblake@redhat.com>
CC: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
Olga Krishtal 2015-02-06 20:59:53 +03:00 committed by Michael Roth
parent 215a2771a7
commit 459db780be
2 changed files with 15 additions and 16 deletions

View File

@ -81,7 +81,6 @@ struct tm *gmtime_r(const time_t *timep, struct tm *result);
#undef localtime_r
struct tm *localtime_r(const time_t *timep, struct tm *result);
char *strtok_r(char *str, const char *delim, char **saveptr);
static inline void os_setup_signal_handling(void) {}
static inline void os_daemonize(void) {}

View File

@ -94,30 +94,30 @@ envlist_parse(envlist_t *envlist, const char *env,
{
char *tmpenv, *envvar;
char *envsave = NULL;
assert(callback != NULL);
int ret = 0;
assert(callback != NULL);
if ((envlist == NULL) || (env == NULL))
return (EINVAL);
/*
* We need to make temporary copy of the env string
* as strtok_r(3) modifies it while it tokenizes.
*/
if ((tmpenv = strdup(env)) == NULL)
return (errno);
envsave = tmpenv;
envvar = strtok_r(tmpenv, ",", &envsave);
while (envvar != NULL) {
if ((*callback)(envlist, envvar) != 0) {
free(tmpenv);
return (errno);
do {
envvar = strchr(tmpenv, ',');
if (envvar != NULL) {
*envvar = '\0';
}
if ((*callback)(envlist, tmpenv) != 0) {
ret = errno;
break;
}
envvar = strtok_r(NULL, ",", &envsave);
}
tmpenv = envvar + 1;
} while (envvar != NULL);
free(tmpenv);
return (0);
free(envsave);
return ret;
}
/*