Add ezxml (#4362), thanks Raphael
git-svn-id: svn://svn.openwrt.org/openwrt/packages@13678 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
954efe33e3
commit
a45d0e5d2c
57
libs/ezxml/Makefile
Normal file
57
libs/ezxml/Makefile
Normal file
@ -0,0 +1,57 @@
|
||||
#
|
||||
# Copyright (C) 2008 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
# $Id:
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ezxml
|
||||
PKG_VERSION:=0.8.6
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=@SF/ezxml
|
||||
PKG_MD5SUM:=e22ae17a0bd82dfa2a66f9876f1a8fd7
|
||||
|
||||
TAR_OPTIONS:=--transform='s,$(PKG_NAME),$(PKG_NAME)-$(PKG_VERSION),' -xvf -
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/ezxml/Default
|
||||
TITLE:=ezXML
|
||||
URL:=http://ezxml.sourceforge.net/
|
||||
endef
|
||||
|
||||
define Package/libezxml
|
||||
$(call Package/ezxml/Default)
|
||||
SECTION:=libs
|
||||
CATEGORY:=Libraries
|
||||
TITLE+= (library)
|
||||
endef
|
||||
|
||||
define Package/libezxml/description
|
||||
ezXML is a fast and lightweight C library for parsing XML documents.
|
||||
endef
|
||||
|
||||
TARGET_CFLAGS += -D_GNU_SOURCE
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/ezxml.h $(1)/usr/include/
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libezxml.a $(1)/usr/lib/
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libezxml.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/libezxml/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/libezxml.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libezxml))
|
17
libs/ezxml/patches/100-cross_compile.patch
Normal file
17
libs/ezxml/patches/100-cross_compile.patch
Normal file
@ -0,0 +1,17 @@
|
||||
diff -pruN ezxml-0.8.6.orig/GNUmakefile ezxml-0.8.6/GNUmakefile
|
||||
--- ezxml-0.8.6.orig/GNUmakefile 2007-08-30 17:38:55.000000000 +0200
|
||||
+++ ezxml-0.8.6/GNUmakefile 2007-08-30 17:41:12.000000000 +0200
|
||||
@@ -21,10 +21,10 @@
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
-CC = gcc
|
||||
-AR = ar
|
||||
+#CC = gcc
|
||||
+#AR = ar
|
||||
RM = rm -f
|
||||
-CFLAGS = -Wall -O2
|
||||
+#CFLAGS = -Wall -O2
|
||||
DEBUG_CFLAGS = -O0 -g
|
||||
OBJS = ezxml.o
|
||||
LIB = libezxml.a
|
27
libs/ezxml/patches/101-build_shared.patch
Normal file
27
libs/ezxml/patches/101-build_shared.patch
Normal file
@ -0,0 +1,27 @@
|
||||
diff -pruN ezxml-0.8.6.orig/GNUmakefile ezxml-0.8.6/GNUmakefile
|
||||
--- ezxml-0.8.6.orig/GNUmakefile 2008-12-16 15:22:46.773434689 +0100
|
||||
+++ ezxml-0.8.6/GNUmakefile 2008-12-16 15:22:27.337440224 +0100
|
||||
@@ -28,6 +28,7 @@ RM = rm -f
|
||||
DEBUG_CFLAGS = -O0 -g
|
||||
OBJS = ezxml.o
|
||||
LIB = libezxml.a
|
||||
+DYN = libezxml.so
|
||||
TEST = ezxmltest
|
||||
ifdef NOMMAP
|
||||
CFLAGS += -D EZXML_NOMMAP
|
||||
@@ -36,11 +37,14 @@ ifdef DEBUG
|
||||
CFLAGS += $(DEBUG_CFLAGS)
|
||||
endif
|
||||
|
||||
-all: $(LIB)
|
||||
+all: $(LIB) $(DYN)
|
||||
|
||||
$(LIB): $(OBJS)
|
||||
$(AR) rcs $(LIB) $(OBJS)
|
||||
|
||||
+$(DYN): $(OBJS)
|
||||
+ $(CC) -shared -o $(DYN) $(OBJS)
|
||||
+
|
||||
nommap: CFLAGS += -D EZXML_NOMMAP
|
||||
nommap: all
|
||||
|
38
libs/ezxml/patches/200-ezxml_parse_str_d.patch
Normal file
38
libs/ezxml/patches/200-ezxml_parse_str_d.patch
Normal file
@ -0,0 +1,38 @@
|
||||
diff -pruN ezxml-0.8.6.orig/ezxml.c ezxml-0.8.6/ezxml.c
|
||||
--- ezxml-0.8.6.orig/ezxml.c 2006-06-08 04:33:38.000000000 +0200
|
||||
+++ ezxml-0.8.6/ezxml.c 2008-02-15 14:35:17.000000000 +0100
|
||||
@@ -599,6 +599,19 @@ ezxml_t ezxml_parse_str(char *s, size_t
|
||||
else return ezxml_err(root, d, "unclosed tag <%s>", root->cur->name);
|
||||
}
|
||||
|
||||
+// parse the given xml string and return an ezxml structure
|
||||
+ezxml_t ezxml_parse_str_d(char const *_s, size_t len)
|
||||
+{
|
||||
+ ezxml_root_t root;
|
||||
+ char *s;
|
||||
+
|
||||
+ if (! (s = strndup(_s, len))) return NULL;
|
||||
+
|
||||
+ root = (ezxml_root_t)ezxml_parse_str(s, strlen(s));
|
||||
+ root->len = -1; // so we know to free s in ezxml_free()
|
||||
+ return &root->xml;
|
||||
+}
|
||||
+
|
||||
// Wrapper for ezxml_parse_str() that accepts a file stream. Reads the entire
|
||||
// stream into memory and then parses it. For xml files, use ezxml_parse_file()
|
||||
// or ezxml_parse_fd()
|
||||
diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
|
||||
--- ezxml-0.8.6.orig/ezxml.h 2006-06-08 03:57:30.000000000 +0200
|
||||
+++ ezxml-0.8.6/ezxml.h 2008-02-15 14:37:15.000000000 +0100
|
||||
@@ -59,6 +59,11 @@ struct ezxml {
|
||||
// pass in the copy. Returns NULL on failure.
|
||||
ezxml_t ezxml_parse_str(char *s, size_t len);
|
||||
|
||||
+// Given a string of xml data and its length, parses it and creates an ezxml
|
||||
+// structure. that strdup()s s
|
||||
+// Returns NULL on failure.
|
||||
+ezxml_t ezxml_parse_str_d(char const *s, size_t len);
|
||||
+
|
||||
// A wrapper for ezxml_parse_str() that accepts a file descriptor. First
|
||||
// attempts to mem map the file. Failing that, reads the file into memory.
|
||||
// Returns NULL on failure.
|
125
libs/ezxml/patches/300-ezxml_int.patch
Normal file
125
libs/ezxml/patches/300-ezxml_int.patch
Normal file
@ -0,0 +1,125 @@
|
||||
diff -pruN ezxml-0.8.6.orig/ezxml.c ezxml-0.8.6/ezxml.c
|
||||
--- ezxml-0.8.6.orig/ezxml.c 2008-12-16 17:02:17.262312778 +0100
|
||||
+++ ezxml-0.8.6/ezxml.c 2008-12-16 17:03:24.231073153 +0100
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
+#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
@@ -72,6 +73,19 @@ ezxml_t ezxml_idx(ezxml_t xml, int idx)
|
||||
return xml;
|
||||
}
|
||||
|
||||
+int ezxml_int(ezxml_t xml, int default_value)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if(!xml)
|
||||
+ return default_value;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ ret = strtol(xml->txt, NULL, 10);
|
||||
+
|
||||
+ return (errno == 0 ? ret : default_value);
|
||||
+}
|
||||
+
|
||||
// returns the value of the requested tag attribute or NULL if not found
|
||||
const char *ezxml_attr(ezxml_t xml, const char *attr)
|
||||
{
|
||||
@@ -89,6 +103,23 @@ const char *ezxml_attr(ezxml_t xml, cons
|
||||
return (root->attr[i][j]) ? root->attr[i][j + 1] : NULL; // found default
|
||||
}
|
||||
|
||||
+int ezxml_attr_int(ezxml_t xml, const char *attr, int default_value)
|
||||
+{
|
||||
+ int ret;
|
||||
+ const char *val = NULL;
|
||||
+
|
||||
+ if(!xml)
|
||||
+ return default_value;
|
||||
+
|
||||
+ if((val = ezxml_attr(xml, attr)) == NULL)
|
||||
+ return default_value;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ ret = strtol(val, NULL, 10);
|
||||
+
|
||||
+ return (errno == 0 ? ret : default_value);
|
||||
+}
|
||||
+
|
||||
// same as ezxml_get but takes an already initialized va_list
|
||||
ezxml_t ezxml_vget(ezxml_t xml, va_list ap)
|
||||
{
|
||||
@@ -926,6 +957,16 @@ ezxml_t ezxml_set_txt(ezxml_t xml, const
|
||||
return xml;
|
||||
}
|
||||
|
||||
+ezxml_t ezxml_set_int(ezxml_t xml, int data)
|
||||
+{
|
||||
+ char *buf = NULL;
|
||||
+ if (! xml) return NULL;
|
||||
+
|
||||
+ asprintf(&buf, "%d", data);
|
||||
+
|
||||
+ return ezxml_set_flag(ezxml_set_txt(xml, buf), EZXML_TXTM);
|
||||
+}
|
||||
+
|
||||
// Sets the given tag attribute or adds a new attribute if not found. A value
|
||||
// of NULL will remove the specified attribute. Returns the tag given.
|
||||
ezxml_t ezxml_set_attr(ezxml_t xml, const char *name, const char *value)
|
||||
@@ -968,6 +1009,15 @@ ezxml_t ezxml_set_attr(ezxml_t xml, cons
|
||||
return xml;
|
||||
}
|
||||
|
||||
+ezxml_t ezxml_set_attr_int(ezxml_t xml, const char *name, int data)
|
||||
+{
|
||||
+ char *buf = NULL;
|
||||
+ if (! xml) return NULL;
|
||||
+
|
||||
+ asprintf(&buf, "%d", data);
|
||||
+ return ezxml_set_attr(ezxml_set_flag(xml, EZXML_DUP), name, buf);
|
||||
+}
|
||||
+
|
||||
// sets a flag for the given tag and returns the tag
|
||||
ezxml_t ezxml_set_flag(ezxml_t xml, short flag)
|
||||
{
|
||||
diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
|
||||
--- ezxml-0.8.6.orig/ezxml.h 2008-12-16 17:02:17.262312778 +0100
|
||||
+++ ezxml-0.8.6/ezxml.h 2008-12-16 17:03:44.189450448 +0100
|
||||
@@ -95,9 +95,13 @@ ezxml_t ezxml_idx(ezxml_t xml, int idx);
|
||||
// returns the given tag's character content or empty string if none
|
||||
#define ezxml_txt(xml) ((xml) ? xml->txt : "")
|
||||
|
||||
+int ezxml_int(ezxml_t xml, int default_value);
|
||||
+
|
||||
// returns the value of the requested tag attribute, or NULL if not found
|
||||
const char *ezxml_attr(ezxml_t xml, const char *attr);
|
||||
|
||||
+int ezxml_attr_int(ezxml_t xml, const char *attr, int default_value);
|
||||
+
|
||||
// Traverses the ezxml sturcture to retrieve a specific subtag. Takes a
|
||||
// variable length list of tag names and indexes. The argument list must be
|
||||
// terminated by either an index of -1 or an empty string tag name. Example:
|
||||
@@ -137,6 +141,9 @@ ezxml_t ezxml_add_child(ezxml_t xml, con
|
||||
// sets the character content for the given tag and returns the tag
|
||||
ezxml_t ezxml_set_txt(ezxml_t xml, const char *txt);
|
||||
|
||||
+// set int value
|
||||
+ezxml_t ezxml_set_int(ezxml_t xml, int data);
|
||||
+
|
||||
// wrapper for ezxml_set_txt() that strdup()s txt
|
||||
#define ezxml_set_txt_d(xml, txt) \
|
||||
ezxml_set_flag(ezxml_set_txt(xml, strdup(txt)), EZXML_TXTM)
|
||||
@@ -144,6 +151,9 @@ ezxml_t ezxml_set_txt(ezxml_t xml, const
|
||||
// Sets the given tag attribute or adds a new attribute if not found. A value
|
||||
// of NULL will remove the specified attribute. Returns the tag given.
|
||||
ezxml_t ezxml_set_attr(ezxml_t xml, const char *name, const char *value);
|
||||
+
|
||||
+// set int value for an attr
|
||||
+ezxml_t ezxml_set_attr_int(ezxml_t xml, const char *name, int data);
|
||||
|
||||
// Wrapper for ezxml_set_attr() that strdup()s name/value. Value cannot be NULL
|
||||
#define ezxml_set_attr_d(xml, name, value) \
|
21
libs/ezxml/patches/400-ezxml_child.patch
Normal file
21
libs/ezxml/patches/400-ezxml_child.patch
Normal file
@ -0,0 +1,21 @@
|
||||
diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
|
||||
--- ezxml-0.8.6.orig/ezxml.h 2008-12-16 17:07:47.585487234 +0100
|
||||
+++ ezxml-0.8.6/ezxml.h 2008-12-16 17:08:29.037939949 +0100
|
||||
@@ -175,6 +175,17 @@ ezxml_t ezxml_insert(ezxml_t xml, ezxml_
|
||||
// removes a tag along with all its subtags
|
||||
#define ezxml_remove(xml) ezxml_free(ezxml_cut(xml))
|
||||
|
||||
+static inline char const * ezxml_child_txt( ezxml_t node, char const *child )
|
||||
+{
|
||||
+ return ezxml_txt( ezxml_child( node, child ) );
|
||||
+}
|
||||
+
|
||||
+static inline ezxml_t ezxml_child_set_txt_d( ezxml_t node, char const *child,
|
||||
+ char const *value )
|
||||
+{
|
||||
+ return ezxml_set_txt_d( ezxml_child( node, child ), value );
|
||||
+}
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user