use new token structs. free token lists.
This commit is contained in:
parent
5da148530e
commit
e2c3582a5c
1 changed files with 16 additions and 9 deletions
|
@ -5,7 +5,7 @@ static GHashTable *reg = NULL;
|
||||||
static ParseFunc func = NULL;
|
static ParseFunc func = NULL;
|
||||||
|
|
||||||
/* parse tokens from the [openbox] section of the rc file */
|
/* parse tokens from the [openbox] section of the rc file */
|
||||||
static void parse_rc_token(ParseTokenType type, union ParseToken token);
|
static void parse_rc_token(ParseToken *token);
|
||||||
|
|
||||||
void destkey(gpointer key) { g_free(key); }
|
void destkey(gpointer key) { g_free(key); }
|
||||||
|
|
||||||
|
@ -31,20 +31,27 @@ void parse_reg_section(char *section, ParseFunc func)
|
||||||
g_hash_table_insert(reg, g_ascii_strdown(section, -1), (void*)func);
|
g_hash_table_insert(reg, g_ascii_strdown(section, -1), (void*)func);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_free_token(ParseTokenType type, union ParseToken token)
|
void parse_free_token(ParseToken *token)
|
||||||
{
|
{
|
||||||
switch (type) {
|
GSList *it;
|
||||||
|
|
||||||
|
switch (token->type) {
|
||||||
case TOKEN_STRING:
|
case TOKEN_STRING:
|
||||||
g_free(token.string);
|
g_free(token-data.string);
|
||||||
break;
|
break;
|
||||||
case TOKEN_IDENTIFIER:
|
case TOKEN_IDENTIFIER:
|
||||||
g_free(token.identifier);
|
g_free(token->data.identifier);
|
||||||
|
break;
|
||||||
|
case TOKEN_LIST:
|
||||||
|
for (it = token->data.list; it; it = it->next) {
|
||||||
|
parse_free_token(it->data);
|
||||||
|
g_free(it->data);
|
||||||
|
}
|
||||||
|
g_slist_free(token->data.list);
|
||||||
break;
|
break;
|
||||||
case TOKEN_REAL:
|
case TOKEN_REAL:
|
||||||
case TOKEN_INTEGER:
|
case TOKEN_INTEGER:
|
||||||
case TOKEN_BOOL:
|
case TOKEN_BOOL:
|
||||||
case TOKEN_LBRACKET:
|
|
||||||
case TOKEN_RBRACKET:
|
|
||||||
case TOKEN_LBRACE:
|
case TOKEN_LBRACE:
|
||||||
case TOKEN_RBRACE:
|
case TOKEN_RBRACE:
|
||||||
case TOKEN_EQUALS:
|
case TOKEN_EQUALS:
|
||||||
|
@ -59,10 +66,10 @@ void parse_set_section(char *section)
|
||||||
func = (ParseFunc)g_hash_table_lookup(reg, section);
|
func = (ParseFunc)g_hash_table_lookup(reg, section);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_token(ParseTokenType type, union ParseToken token)
|
void parse_token(ParseToken *token)
|
||||||
{
|
{
|
||||||
if (func != NULL)
|
if (func != NULL)
|
||||||
func(type, token);
|
func(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_rc_token(ParseToken *token)
|
static void parse_rc_token(ParseToken *token)
|
||||||
|
|
Loading…
Reference in a new issue