int pnd_conf_get_as_int ( pnd_conf_handle c, char *key );
int pnd_conf_get_as_int_d ( pnd_conf_handle c, char *key, int def ); // same as _as_int, but returns default instead of BADNUM
+/* writes and saves
+ */
+int *pnd_conf_set_int ( pnd_conf_handle c, char *key, int v );
+char *pnd_conf_set_char ( pnd_conf_handle c, char *key, char *v );
+unsigned char pnd_conf_write ( pnd_conf_handle c, char *fullpath );
+
#ifdef __cplusplus
} /* "C" */
#endif
*/
void *pnd_box_allocinsert ( pnd_box_handle box, char *key, unsigned int size );
+/* use find_by_key() to find a value or iteration, and unlink it */
+void pnd_box_delete_node ( pnd_box_handle box, void *value );
+
/* find_by_key() will attempt to locate a payload based on the specified key.
* Returns the payload pointer or NULL if not found.
* CASE INSENSITIVE.
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 ) );
+
+ 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 );
+}
return ( 1 );
}
+
+void pnd_box_delete_node ( pnd_box_handle box, void *value ) {
+ pnd_box_t *pbox = (pnd_box_t*) box;
+ pnd_box_node_t *p = PAYLOAD2NODE(value);
+
+ if ( pbox -> head == p ) {
+ pbox -> head = p -> next;
+ free ( p );
+ } else {
+ pnd_box_node_t *i = pbox -> head;
+ while ( i && i -> next != p ) {
+ i = i -> next;
+ }
+ if ( i -> next == p ) {
+ i -> next = p -> next;
+ free ( p );
+ }
+ }
+
+ return;
+}