[2823] in BarnOwl Developers
[PATCH] Replace atokenize with glib's g_strsplit_set
daemon@ATHENA.MIT.EDU (David Benjamin)
Wed Dec 15 14:02:07 2010
From: David Benjamin <davidben@MIT.EDU>
To: barnowl-dev@mit.edu
Date: Wed, 15 Dec 2010 14:02:02 -0500
Glib's had g_strsplit_set since forever, and it does exactly the same
thing as atokenize, modulo needing a pesky NULL check. We may as well
use it.
---
commands.c | 8 ++++----
keybinding.c | 14 +++++++-------
util.c | 40 ----------------------------------------
variable.c | 22 +++++++++++-----------
4 files changed, 22 insertions(+), 62 deletions(-)
diff --git a/commands.c b/commands.c
index 4629474..42bb538 100644
--- a/commands.c
+++ b/commands.c
@@ -1669,7 +1669,7 @@ char *owl_command_multi(int argc, const char *const *argv, const char *buff)
{
char *lastrv = NULL, *newbuff;
char **commands;
- int ncommands, i;
+ int i;
if (argc < 2) {
owl_function_makemsg("Invalid arguments to 'multi' command.");
return NULL;
@@ -1687,15 +1687,15 @@ char *owl_command_multi(int argc, const char *const *argv, const char *buff)
}
}
}
- commands = atokenize(newbuff, ";", &ncommands);
- for (i=0; i<ncommands; i++) {
+ commands = g_strsplit_set(newbuff, ";", 0);
+ for (i = 0; commands[i] != NULL; i++) {
if (lastrv) {
owl_free(lastrv);
}
lastrv = owl_function_command(commands[i]);
}
owl_free(newbuff);
- atokenize_delete(commands, ncommands);
+ g_strfreev(commands);
return lastrv;
}
diff --git a/keybinding.c b/keybinding.c
index fc762b5..4a05252 100644
--- a/keybinding.c
+++ b/keybinding.c
@@ -38,23 +38,23 @@ int owl_keybinding_make_keys(owl_keybinding *kb, const char *keyseq)
char **ktokens;
int nktokens, i;
- ktokens = atokenize(keyseq, " ", &nktokens);
- if (!ktokens) return(-1);
- if (nktokens > OWL_KEYMAP_MAXSTACK) {
- atokenize_delete(ktokens, nktokens);
+ ktokens = g_strsplit_set(keyseq, " ", 0);
+ nktokens = g_strv_length(ktokens);
+ if (nktokens < 1 || nktokens > OWL_KEYMAP_MAXSTACK) {
+ g_strfreev(ktokens);
return(-1);
}
kb->keys = owl_malloc(nktokens*sizeof(int));
for (i=0; i<nktokens; i++) {
kb->keys[i] = owl_keypress_fromstring(ktokens[i]);
- if (kb->keys[i] == ERR) {
- atokenize_delete(ktokens, nktokens);
+ if (kb->keys[i] == ERR) {
+ g_strfreev(ktokens);
owl_free(kb->keys);
return(-1);
}
}
kb->len = nktokens;
- atokenize_delete(ktokens, nktokens);
+ g_strfreev(ktokens);
return(0);
}
diff --git a/util.c b/util.c
index bd842df..4e0f352 100644
--- a/util.c
+++ b/util.c
@@ -11,36 +11,6 @@
#include <glib/gstdio.h>
#include <glib-object.h>
-char **atokenize(const char *buffer, const char *sep, int *i)
-{
- /* each element of return must be freed by user */
- char **args;
- char *workbuff, *foo;
- int done=0, first=1, count=0;
-
- workbuff = owl_strdup(buffer);
-
- args=NULL;
- while (!done) {
- if (first) {
- first=0;
- foo=strtok(workbuff, sep);
- } else {
- foo=strtok(NULL, sep);
- }
- if (foo==NULL) {
- done=1;
- } else {
- args=owl_realloc(args, sizeof(char *) * (count+1));
- args[count] = owl_strdup(foo);
- count++;
- }
- }
- *i=count;
- owl_free(workbuff);
- return(args);
-}
-
const char *skiptokens(const char *buff, int n) {
/* skips n tokens and returns where that would be. */
char quote = 0;
@@ -126,16 +96,6 @@ char *owl_util_makepath(const char *in)
return(out);
}
-void atokenize_delete(char **tok, int nels)
-{
- int i;
- for (i=0; i<nels; i++) {
- owl_free(tok[i]);
- }
- owl_free(tok);
-}
-
-
void owl_parse_delete(char **argv, int argc)
{
int i;
diff --git a/variable.c b/variable.c
index 10a3c9e..b549851 100644
--- a/variable.c
+++ b/variable.c
@@ -951,9 +951,9 @@ int owl_variable_enum_validate(const owl_variable *v, const void *newval) {
char **enums;
int nenums, val;
if (newval == NULL) return(0);
- enums = atokenize(v->validsettings, ",", &nenums);
- if (enums == NULL) return(0);
- atokenize_delete(enums, nenums);
+ enums = g_strsplit_set(v->validsettings, ",", 0);
+ nenums = g_strv_length(enums);
+ g_strfreev(enums);
val = *(const int*)newval;
if (val < 0 || val >= nenums) {
return(0);
@@ -963,16 +963,15 @@ int owl_variable_enum_validate(const owl_variable *v, const void *newval) {
int owl_variable_enum_set_fromstring(owl_variable *v, const char *newval) {
char **enums;
- int nenums, i, val=-1;
+ int i, val=-1;
if (newval == NULL) return(-1);
- enums = atokenize(v->validsettings, ",", &nenums);
- if (enums == NULL) return(-1);
- for (i=0; i<nenums; i++) {
+ enums = g_strsplit_set(v->validsettings, ",", 0);
+ for (i = 0; enums[i] != NULL; i++) {
if (0==strcmp(newval, enums[i])) {
val = i;
}
}
- atokenize_delete(enums, nenums);
+ g_strfreev(enums);
if (val == -1) return(-1);
return (v->set_fn(v, &val));
}
@@ -985,15 +984,16 @@ int owl_variable_enum_get_tostring(const owl_variable *v, char* buf, int bufsize
snprintf(buf, bufsize, "<null>");
return -1;
}
- enums = atokenize(v->validsettings, ",", &nenums);
+ enums = g_strsplit_set(v->validsettings, ",", 0);
+ nenums = g_strv_length(enums);
i = *(const int*)val;
if (i<0 || i>=nenums) {
snprintf(buf, bufsize, "<invalid:%d>",i);
- atokenize_delete(enums, nenums);
+ g_strfreev(enums);
return(-1);
}
snprintf(buf, bufsize, "%s", enums[i]);
- atokenize_delete(enums, nenums);
+ g_strfreev(enums);
return 0;
}
--
1.7.3.3.399.g06ddf