New upstream release 0.2.0 of liblcfg, updated
authorNeutron Soutmun <neo.neutron@gmail.com>
Thu, 29 Jan 2009 15:30:31 +0000 (22:30 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Thu, 29 Jan 2009 15:30:31 +0000 (22:30 +0700)
2009-01-29  Neutron Soutmun <neo.neutron@gmail.com>

* lcfg/lcfg_static.{h,c}: New upstream release 0.2.0 of liblcfg.

ChangeLog
lcfg/lcfg_static.c
lcfg/lcfg_static.h

index 797df54..94ef9d9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
-2008-01-27  Neutron Soutmun <neo.neutron@gmail.com>
+2009-01-29  Neutron Soutmun <neo.neutron@gmail.com>
+
+       * lcfg/lcfg_static.{h,c}: New upstream release 0.2.0 of liblcfg.  
+
+2009-01-27  Neutron Soutmun <neo.neutron@gmail.com>
 
        * src/rh-task-memset.c, src/rh-xmlrpc-server.c: Add the XMLRPC interface for
          admin to reset user and other termination cuase support by parsing cause id.
index 11c8813..d6b84c4 100755 (executable)
@@ -1,5 +1,5 @@
 /* This file is an autogenerated single-file version of liblcfg.
- * The revision used to create this file is 997. It is recommended
+ * The revision used to create this file is 1446. It is recommended
  * that you update this file on a regulary basis from the original
  * liblcfg distribution package.
  *
@@ -21,7 +21,7 @@
 /*** begin file include/lcfg/lcfg_string.h ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -37,7 +37,7 @@
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_string.h 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_string.h 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -53,8 +53,8 @@ int                   lcfg_string_cat_uint(struct lcfg_string *, unsigned int);
 int                   lcfg_string_find(struct lcfg_string *, char);
 int                   lcfg_string_rfind(struct lcfg_string *, char);
 void                  lcfg_string_trunc(struct lcfg_string *, unsigned int);
-inline const char *   lcfg_string_cstr(struct lcfg_string *);
-inline unsigned int   lcfg_string_len(struct lcfg_string *);
+const char *          lcfg_string_cstr(struct lcfg_string *);
+unsigned int          lcfg_string_len(struct lcfg_string *);
 void                  lcfg_string_delete(struct lcfg_string *);
 
 #endif
@@ -62,7 +62,7 @@ void                  lcfg_string_delete(struct lcfg_string *);
 /*** begin file include/lcfg/lcfg_token.h ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -78,7 +78,7 @@ void                  lcfg_string_delete(struct lcfg_string *);
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_token.h 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_token.h 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -114,7 +114,7 @@ struct lcfg_token
 /*** begin file include/lcfg/lcfg_scanner.h ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -130,7 +130,7 @@ struct lcfg_token
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_scanner.h 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_scanner.h 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -152,7 +152,7 @@ void                     lcfg_scanner_delete(struct lcfg_scanner *);
 /*** begin file include/lcfg/lcfg_parser.h ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -168,7 +168,7 @@ void                     lcfg_scanner_delete(struct lcfg_scanner *);
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_parser.h 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_parser.h 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -186,10 +186,70 @@ enum lcfg_status      lcfg_parser_get(struct lcfg_parser *, const char *, void *
 
 #endif
 /*** end file include/lcfg/lcfg_parser.h ***/
+/*** begin file include/lcfgx/lcfgx_tree.h ***/
+/*
+ * liblcfg - lightweight configuration file library
+ * Copyright (c) 2007--2009  Paul Baecher
+ * 
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ *    $Id$
+ * 
+ */
+
+#ifndef LCFGX_TREE_H
+#define LCFGX_TREE_H
+
+
+enum lcfgx_type
+{
+       lcfgx_string,
+       lcfgx_list,
+       lcfgx_map,
+};
+
+struct lcfgx_tree_node
+{
+       enum lcfgx_type type;
+       char *key; /* NULL for root node */
+       
+       union
+       {
+               struct
+               {
+                       void *data;
+                       size_t len;
+               } string;
+               struct lcfgx_tree_node *elements; /* in case of list or map type */
+       } value;
+
+       struct lcfgx_tree_node *next;
+};
+
+struct lcfgx_tree_node *lcfgx_tree_new(struct lcfg *);
+
+void lcfgx_tree_delete(struct lcfgx_tree_node *);
+
+
+#endif
+
+/*** end file include/lcfgx/lcfgx_tree.h ***/
 /*** begin file src/lcfg_string.c ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -205,7 +265,7 @@ enum lcfg_status      lcfg_parser_get(struct lcfg_parser *, const char *, void *
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_string.c 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_string.c 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -352,13 +412,13 @@ int lcfg_string_cat_char(struct lcfg_string *s, char c)
        return s->size;
 }
 
-inline const char *lcfg_string_cstr(struct lcfg_string *s)
+const char *lcfg_string_cstr(struct lcfg_string *s)
 {
        s->str[s->size] = '\0';
        return s->str;
 }
 
-inline unsigned int lcfg_string_len(struct lcfg_string *s)
+unsigned int lcfg_string_len(struct lcfg_string *s)
 {
        return s->size;
 }
@@ -372,7 +432,7 @@ void lcfg_string_delete(struct lcfg_string *s)
 /*** begin file src/lcfg_token.c ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -388,7 +448,7 @@ void lcfg_string_delete(struct lcfg_string *s)
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_token.c 997 2007-05-07 02:11:53Z dp $
+ *    $Id: lcfg_token.c 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -408,7 +468,7 @@ const char *lcfg_token_map[] = {
 /*** begin file src/lcfg_scanner.c ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -424,7 +484,7 @@ const char *lcfg_token_map[] = {
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_scanner.c 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_scanner.c 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -787,7 +847,7 @@ void lcfg_scanner_delete(struct lcfg_scanner *s)
 /*** begin file src/lcfg_parser.c ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -803,7 +863,7 @@ void lcfg_scanner_delete(struct lcfg_scanner *s)
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg_parser.c 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg_parser.c 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -1132,7 +1192,7 @@ void lcfg_parser_delete(struct lcfg_parser *p)
 /*** begin file src/lcfg.c ***/
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -1148,7 +1208,7 @@ void lcfg_parser_delete(struct lcfg_parser *p)
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg.c 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg.c 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
@@ -1207,3 +1267,178 @@ void lcfg_error_set(struct lcfg *c, const char *fmt, ...)
 }
 
 /*** end file src/lcfg.c ***/
+/*** begin file src/lcfgx_tree.c ***/
+/*
+ * liblcfg - lightweight configuration file library
+ * Copyright (c) 2007--2009  Paul Baecher
+ * 
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ *    $Id$
+ * 
+ */
+
+
+
+static struct lcfgx_tree_node *lcfgx_tree_node_new(enum lcfgx_type type, const char *key)
+{
+       struct lcfgx_tree_node *node = malloc(sizeof(struct lcfgx_tree_node));
+
+       node->type = type;
+
+       if( key != NULL )
+               node->key = strdup(key);
+       else
+               node->key = NULL;
+
+       node->next = NULL;
+
+       return node;
+}
+
+
+/*static void lcfgx_tree_dump(struct lcfgx_tree_node *node, int depth)
+{
+       void sp(int n)
+       {
+               int i;
+
+               for( i = 0; i < n; i++ )
+                       printf("%c", ' ');
+       }
+
+       struct lcfgx_tree_node *n;
+
+       for( n = node; n != NULL; n = n->next )
+       {
+               sp(depth);
+
+               if( n->key != NULL )
+                       printf("%s", n->key);
+               else
+                       printf("%s", "(none)");
+
+               if( n->type == lcfgx_string )
+                       printf(" = \"%s\"\n", (char *)n->value.string.data);
+               else
+               {
+                       printf("%c", '\n');
+                       lcfgx_tree_dump(n->value.elements, depth + 2);
+               }
+                       
+       }
+}*/
+
+static void lcfgx_tree_insert(int pathc, char **pathv, void *data, size_t len, struct lcfgx_tree_node *node)
+{
+       struct lcfgx_tree_node *n;
+
+       for( n = node->value.elements; n != NULL; n = n->next )
+               if( !strcmp(pathv[0], n->key) )
+                       break;
+       
+       if( pathc == 1 )
+       {
+               /* leaf node --> string value */
+               if( n == NULL )
+               {
+                       /* not found, insert */
+                       n = lcfgx_tree_node_new(lcfgx_string, pathv[0]);
+                       n->value.string.len = len;
+                       n->value.string.data = malloc(len);
+                       memcpy(n->value.string.data, data, len);
+                       n->next = node->value.elements;
+                       node->value.elements = n;
+               }
+       }
+       else
+       {
+               /* inner node --> (map/list) */
+               if( n == NULL )
+               {
+                       /* not found, insert it */
+                       n = lcfgx_tree_node_new(lcfgx_map, pathv[0]);
+                       n->value.elements = NULL;
+                       n->next = node->value.elements;
+                       node->value.elements = n;
+               }
+
+               /* recurse into map/list */
+               lcfgx_tree_insert(pathc - 1, &pathv[1], data, len, n);
+       }
+}
+
+enum lcfg_status lcfgx_tree_visitor(const char *key, void *data, size_t len, void *user_data)
+{
+       struct lcfgx_tree_node *root = user_data;
+       char path[strlen(key) + 1];
+       int path_components = 1;
+
+       strncpy(path, key, strlen(key) + 1);
+
+       while( *key != 0 )
+               if( *key++ == '.' )
+                       path_components++;
+       
+       char *pathv[path_components];
+       char *token;
+       char *saveptr = NULL;
+       int pathc = 0;
+
+       while( (token = strtok_r(pathc == 0 ? path : NULL, ".", &saveptr)) != NULL )
+               pathv[pathc++] = token;
+
+       lcfgx_tree_insert(pathc, pathv, data, len, root);
+
+       return lcfg_status_ok;
+}
+
+struct lcfgx_tree_node *lcfgx_tree_new(struct lcfg *c)
+{
+       struct lcfgx_tree_node *root = lcfgx_tree_node_new(lcfgx_map, NULL);
+
+       root->value.elements = NULL;
+
+       lcfg_accept(c, lcfgx_tree_visitor, root);
+
+       return root;
+}
+
+void lcfgx_tree_delete(struct lcfgx_tree_node *n)
+{
+
+       if( n->type != lcfgx_string )
+       {
+               struct lcfgx_tree_node *m, *next;
+
+               for( m = n->value.elements; m != NULL; )
+               {
+                       next = m->next;
+                       lcfgx_tree_delete(m);
+                       m = next;
+               }
+       }
+       else
+       {
+               free(n->value.string.data);
+       }
+
+       if( n->key != NULL )
+               free(n->key);
+       
+       free(n);
+}
+
+/*** end file src/lcfgx_tree.c ***/
index bb670cc..d12d1f8 100755 (executable)
@@ -1,6 +1,6 @@
 /*
  * liblcfg - lightweight configuration file library
- * Copyright (C) 2007  Paul Baecher
+ * Copyright (c) 2007--2009  Paul Baecher
  * 
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- *    $Id: lcfg.h 995 2007-05-07 01:49:42Z dp $
+ *    $Id: lcfg.h 1446 2009-01-15 22:44:36Z dp $
  * 
  */
 
 #ifndef LCFG_H
 #define LCFG_H
 
+#include <stdlib.h>
+
 struct lcfg;
 
 enum lcfg_status { lcfg_status_ok, lcfg_status_error };
@@ -53,3 +55,61 @@ void                 lcfg_delete(struct lcfg *);
 
 
 #endif
+/*
+ * liblcfg - lightweight configuration file library
+ * Copyright (c) 2007--2009  Paul Baecher
+ * 
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ *    $Id$
+ * 
+ */
+
+#ifndef LCFGX_TREE_H
+#define LCFGX_TREE_H
+
+
+enum lcfgx_type
+{
+       lcfgx_string,
+       lcfgx_list,
+       lcfgx_map,
+};
+
+struct lcfgx_tree_node
+{
+       enum lcfgx_type type;
+       char *key; /* NULL for root node */
+       
+       union
+       {
+               struct
+               {
+                       void *data;
+                       size_t len;
+               } string;
+               struct lcfgx_tree_node *elements; /* in case of list or map type */
+       } value;
+
+       struct lcfgx_tree_node *next;
+};
+
+struct lcfgx_tree_node *lcfgx_tree_new(struct lcfg *);
+
+void lcfgx_tree_delete(struct lcfgx_tree_node *);
+
+
+#endif
+