Mercurial > hg
changeset 280:68ce34b4243b
Add parse_assigment() function
Add parse_assigment() to parse options/aliases/bindings lines.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Wed, 06 Jul 2005 21:28:37 +0100 |
parents | f5dd437c057b |
children | f562b9af2de7 |
files | mcabber/src/settings.c mcabber/src/settings.h |
diffstat | 2 files changed, 57 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/src/settings.c Tue Jul 05 23:50:50 2005 +0100 +++ b/mcabber/src/settings.c Wed Jul 06 21:28:37 2005 +0100 @@ -21,6 +21,7 @@ #include <strings.h> #include <stdlib.h> +#include <ctype.h> #include "settings.h" @@ -58,6 +59,61 @@ /* -- */ +// parse_assigment(assignment, pkey, pval) +// Read assignment and split it to key, value +// +// If this is an assignment, the function will return TRUE and +// set *pkey and *pval (*pval is set to NULL if value field is empty). +// +// If this isn't a assignment (no = char), the function will set *pval +// to NULL and return FALSE. +// +// The called should g_free() *pkey and *pval (if not NULL) after use. +guint parse_assigment(gchar *assignment, gchar **pkey, gchar **pval) +{ + char *key, *val, *t; + + *pkey = *pval = NULL; + + key = assignment; + // Remove leading spaces in option name + while ((!isalnum(*key)) && (*key != '=') && *key) { + //if (!isblank(*key)) + // scr_LogPrint("Error in setting parsing!\n"); + key++; + } + if (!*key) return FALSE; // Empty assignment + + if (*key == '=') { + //scr_LogPrint("Cannot parse setting!\n"); + return FALSE; + } + // Ok, key points to the option name + + for (val = key+1 ; *val && (*val != '=') ; val++) + if (!isalnum(*val) && !isblank(*val) && (*val != '_') && (*val != '-')) { + // Key should only have alnum chars... + //scr_LogPrint("Error in setting parsing!\n"); + return FALSE; + } + // Remove trailing spaces in option name: + for (t = val-1 ; t > key && isblank(*t) ; t--) + ; + *pkey = g_strndup(key, t+1-key); + + if (!*val) return FALSE; // Not an assignment + + // Remove leading and trailing spaces in option value: + for (val++; *val && isblank(*val) ; val++) ; + for (t = val ; *t ; t++) ; + for (t-- ; t >= val && isblank(*t) ; t--) ; + + if (t < val) return FALSE; // no value (variable reset for example) + + *pval = g_strndup(val, t+1-val); + return TRUE; +} + void settings_set(guint type, gchar *key, gchar *value) { GSList **plist;
--- a/mcabber/src/settings.h Tue Jul 05 23:50:50 2005 +0100 +++ b/mcabber/src/settings.h Wed Jul 06 21:28:37 2005 +0100 @@ -10,6 +10,7 @@ #define settings_opt_get(k) settings_get(SETTINGS_TYPE_OPTION, k) #define settings_opt_get_int(k) settings_get_int(SETTINGS_TYPE_OPTION, k) +guint parse_assigment(gchar *assignment, gchar **pkey, gchar **pval); void settings_set(guint type, gchar *key, gchar *value); void settings_del(guint type, gchar *key); gchar *settings_get(guint type, gchar *key);