diff options
author | Max Kellermann <max@duempel.org> | 2009-01-03 13:20:12 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-03 13:20:12 +0100 |
commit | 59067e6a925eab5690f455b65d9f2b4d45301115 (patch) | |
tree | 35c34efa204aedc49859aa2d44cae9e1febfd945 | |
parent | 5b543e8fa6de8c599affddbe6804d0b3f1db5aa6 (diff) | |
download | mpd-59067e6a925eab5690f455b65d9f2b4d45301115.tar.gz mpd-59067e6a925eab5690f455b65d9f2b4d45301115.tar.xz mpd-59067e6a925eab5690f455b65d9f2b4d45301115.zip |
ao: use g_strsplit() instead of strtok_r()
g_strsplit() is more portable than strtok_r().
-rw-r--r-- | src/output/ao_plugin.c | 52 |
1 files changed, 15 insertions, 37 deletions
diff --git a/src/output/ao_plugin.c b/src/output/ao_plugin.c index 798a188e8..fcbc52dc4 100644 --- a/src/output/ao_plugin.c +++ b/src/output/ao_plugin.c @@ -79,12 +79,6 @@ static void *audioOutputAo_initDriver(struct audio_output *ao, ConfigParam * param) { ao_info *ai; - char *duplicated; - char *stk1; - char *stk2; - char *n1; - char *key; - char *value; char *test; AoData *ad = newAoData(); BlockParam *blockParam; @@ -121,40 +115,24 @@ static void *audioOutputAo_initDriver(struct audio_output *ao, audio_output_get_name(ao)); blockParam = getBlockParam(param, "options"); - if (blockParam) { - duplicated = g_strdup(blockParam->value); - } else - duplicated = g_strdup(""); - - if (strlen(duplicated)) { - stk1 = NULL; - n1 = strtok_r(duplicated, ";", &stk1); - while (n1) { - stk2 = NULL; - key = strtok_r(n1, "=", &stk2); - if (!key) - g_error("problems parsing options \"%s\"\n", n1); - /*found = 0; - for(i=0;i<ai->option_count;i++) { - if(strcmp(ai->options[i],key)==0) { - found = 1; - break; - } - } - if(!found) { - FATAL("\"%s\" is not an option for " - "\"%s\" ao driver\n",key, - ai->short_name); - } */ - value = strtok_r(NULL, "", &stk2); - if (!value) - g_error("problems parsing options \"%s\"\n", n1); - ao_append_option(&ad->options, key, value); - n1 = strtok_r(NULL, ";", &stk1); + gchar **options = g_strsplit(blockParam->value, ";", 0); + + for (unsigned i = 0; options[i] != NULL; ++i) { + gchar **key_value = g_strsplit(options[i], "=", 2); + + if (key_value[0] == NULL || key_value[1] == NULL) + g_error("problems parsing options \"%s\"\n", + options[i]); + + ao_append_option(&ad->options, key_value[0], + key_value[1]); + + g_strfreev(key_value); } + + g_strfreev(options); } - free(duplicated); return ad; } |