X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fpnd_conf.c;h=88d0c46331edfef5cf46d6aedd54c44821d6cb49;hb=e7fba6b31c06ad5432bed398b02b704ed0e92131;hp=5f1901f10f162dfa75b0da480a795744b6255c76;hpb=7bae3e09224bf37856e9fd13a0e0dc4865b9a6c1;p=pandora-libraries.git diff --git a/lib/pnd_conf.c b/lib/pnd_conf.c index 5f1901f..88d0c46 100644 --- a/lib/pnd_conf.c +++ b/lib/pnd_conf.c @@ -269,3 +269,86 @@ int pnd_conf_get_as_int_d ( pnd_conf_handle c, char *key, int def ) { return ( i ); } + +int *pnd_conf_set_int ( pnd_conf_handle c, char *key, int v ) { + + // key is already present? if so, delete it + void *kv = pnd_box_find_by_key ( c, key ); + + if ( kv ) { + pnd_box_delete_node ( c, kv ); + } + + // add the new node + int *nv = pnd_box_allocinsert ( c, key, sizeof(int) ); + + if ( nv ) { + *nv = v; + return ( nv ); + } + + return ( NULL ); +} + +char *pnd_conf_set_char ( pnd_conf_handle c, char *key, char *v ) { + + // key is already present? if so, delete it + char *kv = pnd_box_find_by_key ( c, key ); + + if ( kv ) { + pnd_box_delete_node ( c, kv ); + } + + // add the new node + char *nv = pnd_box_allocinsert ( c, key, strlen ( v ) + 1 ); + + if ( nv ) { + strcpy ( nv, v ); + return ( nv ); + } + + return ( NULL ); +} + +unsigned char pnd_conf_write ( pnd_conf_handle c, char *fullpath ) { + char *p = pnd_box_get_head ( c ); + FILE *f; + char lastcategory [ 100 ] = ""; + + if ( ! p ) { + return ( 1 ); // nothing to save, so.. success? + } + + f = fopen ( fullpath, "w" ); + + if ( ! f ) { + return ( 0 ); + } + + while ( p ) { + char *k = pnd_box_get_key ( p ); + char *c = strchr ( k, '.' ); + + if ( c ) { + if ( strncmp ( k, lastcategory, c - k ) == 0 ) { + // same category + } else { + strncpy ( lastcategory, k, c - k ); + fprintf ( f, "[%s]\n", lastcategory ); + } + fprintf ( f, "%s\t%s\n", c + 1, p ); + } else { + if ( lastcategory [ 0 ] ) { + fprintf ( f, "[]\n" ); + } + lastcategory [ 0 ] = '\0'; + fprintf ( f, "%s\t%s\n", k, p ); + } + + p = pnd_box_get_next ( p ); + } + + fclose ( f ); + + return ( 1 ); +}