author | Michael Krelin <hacker@klever.net> | 2007-11-28 18:01:36 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2007-11-28 18:01:36 (UTC) |
commit | 73d98f3652b498b9a74b183bef395714c7d73fda (patch) (unidiff) | |
tree | 0d206adb4e28d321c5050b7c04274cf6a8a97e51 | |
parent | 7ddb513bec854479fc9efb2a79044a978055d800 (diff) | |
download | libopkele-73d98f3652b498b9a74b183bef395714c7d73fda.zip libopkele-73d98f3652b498b9a74b183bef395714c7d73fda.tar.gz libopkele-73d98f3652b498b9a74b183bef395714c7d73fda.tar.bz2 |
added a trivial expat wrapper
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | include/Makefile.am | 2 | ||||
-rw-r--r-- | include/opkele/expat.h | 91 | ||||
-rw-r--r-- | lib/Makefile.am | 7 | ||||
-rw-r--r-- | lib/expat.cc | 96 | ||||
-rw-r--r-- | libopkele.pc.in | 4 |
6 files changed, 207 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac index 48a5efb..2b94b41 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -66,6 +66,19 @@ LIBCURL_CHECK_CONFIG(,,,[ | |||
66 | AC_MSG_ERROR([no required libcurl library. get one from http://curl.haxx.se/]) | 66 | AC_MSG_ERROR([no required libcurl library. get one from http://curl.haxx.se/]) |
67 | ]) | 67 | ]) |
68 | 68 | ||
69 | AC_CHECK_HEADER([expat.h],[ | ||
70 | AC_CHECK_LIB([expat],[XML_ParserCreate],[ | ||
71 | EXPAT_LIBS=-lexpat | ||
72 | EXPAT_CFLAGS= | ||
73 | AC_SUBST([EXPAT_LIBS]) | ||
74 | AC_SUBST([EXPAT_CFLAGS]) | ||
75 | ],[ | ||
76 | AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/]) | ||
77 | ]) | ||
78 | ],[ | ||
79 | AC_MSG_ERROR([no required expat library. get one from http://expat.sourceforge.net/]) | ||
80 | ]) | ||
81 | |||
69 | if test -n "$PCRE_LIBS" -a -n "$PCRE_CFLAGS" ; then | 82 | if test -n "$PCRE_LIBS" -a -n "$PCRE_CFLAGS" ; then |
70 | AC_SUBST([PCRE_CFLAGS]) | 83 | AC_SUBST([PCRE_CFLAGS]) |
71 | AC_SUBST([PCRE_LIBS]) | 84 | AC_SUBST([PCRE_LIBS]) |
diff --git a/include/Makefile.am b/include/Makefile.am index b31786d..0385cfb 100644 --- a/include/Makefile.am +++ b/include/Makefile.am | |||
@@ -14,4 +14,4 @@ nobase_include_HEADERS = \ | |||
14 | EXTRA_DIST = \ | 14 | EXTRA_DIST = \ |
15 | opkele/data.h \ | 15 | opkele/data.h \ |
16 | opkele/util.h \ | 16 | opkele/util.h \ |
17 | opkele/curl.h | 17 | opkele/curl.h opkele/expat.h |
diff --git a/include/opkele/expat.h b/include/opkele/expat.h new file mode 100644 index 0000000..60c41ac --- a/dev/null +++ b/include/opkele/expat.h | |||
@@ -0,0 +1,91 @@ | |||
1 | #ifndef __OPKELE_EXPAT_H | ||
2 | #define __OPKELE_EXPAT_H | ||
3 | |||
4 | #include <cassert> | ||
5 | #include <expat.h> | ||
6 | |||
7 | namespace opkele { | ||
8 | |||
9 | namespace util { | ||
10 | |||
11 | class expat_t { | ||
12 | public: | ||
13 | XML_Parser _x; | ||
14 | |||
15 | expat_t() : _x(0) { } | ||
16 | expat_t(XML_Parser x) : _x(x) { } | ||
17 | virtual ~expat_t() throw(); | ||
18 | |||
19 | expat_t& operator=(XML_Parser x); | ||
20 | |||
21 | operator const XML_Parser(void) const { return _x; } | ||
22 | operator XML_Parser(void) { return _x; } | ||
23 | |||
24 | inline bool parse(const char *s,int len,bool final=false) { | ||
25 | assert(_x); | ||
26 | return XML_Parse(_x,s,len,final); | ||
27 | } | ||
28 | |||
29 | virtual void start_element(const XML_Char *n,const XML_Char **a) { } | ||
30 | virtual void end_element(const XML_Char *n) { } | ||
31 | void set_element_handler(); | ||
32 | |||
33 | virtual void character_data(const XML_Char *s,int l) { } | ||
34 | void set_character_data_handler(); | ||
35 | |||
36 | virtual void processing_instruction(const XML_Char *t,const XML_Char *d) { } | ||
37 | void set_processing_instruction_handler(); | ||
38 | |||
39 | virtual void comment(const XML_Char *d) { } | ||
40 | void set_comment_handler(); | ||
41 | |||
42 | virtual void start_cdata_section() { } | ||
43 | virtual void end_cdata_section() { } | ||
44 | void set_cdata_section_handler(); | ||
45 | |||
46 | virtual void default_handler(const XML_Char *s,int l) { } | ||
47 | void set_default_handler(); | ||
48 | void set_default_handler_expand(); | ||
49 | |||
50 | virtual void start_namespace_decl(const XML_Char *p,const XML_Char *u) { } | ||
51 | virtual void end_namespace_decl(const XML_Char *p) { } | ||
52 | void set_namespace_decl_handler(); | ||
53 | |||
54 | inline enum XML_Error get_error_code() { | ||
55 | assert(_x); return XML_GetErrorCode(_x); } | ||
56 | static inline const XML_LChar *error_string(XML_Error c) { | ||
57 | return XML_ErrorString(c); } | ||
58 | |||
59 | inline long get_current_byte_index() { | ||
60 | assert(_x); return XML_GetCurrentByteIndex(_x); } | ||
61 | inline int get_current_line_number() { | ||
62 | assert(_x); return XML_GetCurrentLineNumber(_x); } | ||
63 | inline int get_current_column_number() { | ||
64 | assert(_x); return XML_GetCurrentColumnNumber(_x); } | ||
65 | |||
66 | inline void set_user_data() { | ||
67 | assert(_x); XML_SetUserData(_x,this); } | ||
68 | |||
69 | inline bool set_base(const XML_Char *b) { | ||
70 | assert(_x); return XML_SetBase(_x,b); } | ||
71 | inline const XML_Char *get_base() { | ||
72 | assert(_x); return XML_GetBase(_x); } | ||
73 | |||
74 | inline int get_specified_attribute_count() { | ||
75 | assert(_x); return XML_GetSpecifiedAttributeCount(_x); } | ||
76 | |||
77 | inline bool set_param_entity_parsing(enum XML_ParamEntityParsing c) { | ||
78 | assert(_x); return XML_SetParamEntityParsing(_x,c); } | ||
79 | |||
80 | inline static XML_Parser parser_create(const XML_Char *e=0) { | ||
81 | return XML_ParserCreate(e); } | ||
82 | inline static XML_Parser parser_create_ns(const XML_Char *e=0,XML_Char s='\t') { | ||
83 | return XML_ParserCreateNS(e,s); } | ||
84 | |||
85 | }; | ||
86 | |||
87 | } | ||
88 | |||
89 | } | ||
90 | |||
91 | #endif /* __OPKELE_EXPAT_H */ | ||
diff --git a/lib/Makefile.am b/lib/Makefile.am index 0fe705a..7309353 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am | |||
@@ -1,14 +1,15 @@ | |||
1 | lib_LTLIBRARIES = libopkele.la | 1 | lib_LTLIBRARIES = libopkele.la |
2 | 2 | ||
3 | DEFAULT_INCLUDES = -I${top_builddir} | ||
3 | INCLUDES = \ | 4 | INCLUDES = \ |
4 | -I${top_srcdir}/include/ \ | 5 | -I${top_srcdir}/include/ \ |
5 | ${KONFORKA_CFLAGS} \ | 6 | ${KONFORKA_CFLAGS} \ |
6 | ${OPENSSL_CFLAGS} \ | 7 | ${OPENSSL_CFLAGS} \ |
7 | ${LIBCURL_CPPFLAGS} \ | 8 | ${LIBCURL_CPPFLAGS} \ |
8 | ${PCRE_CFLAGS} | 9 | ${PCRE_CFLAGS} ${EXPAT_CFLAGS} |
9 | libopkele_la_LIBADD = \ | 10 | libopkele_la_LIBADD = \ |
10 | ${LIBCURL} \ | 11 | ${LIBCURL} \ |
11 | ${PCRE_LIBS} \ | 12 | ${PCRE_LIBS} ${EXPAT_LIBS} \ |
12 | ${OPENSSL_LIBS} \ | 13 | ${OPENSSL_LIBS} \ |
13 | ${KONFORKA_LIBS} | 14 | ${KONFORKA_LIBS} |
14 | 15 | ||
@@ -23,6 +24,6 @@ libopkele_la_SOURCES = \ | |||
23 | extension.cc \ | 24 | extension.cc \ |
24 | sreg.cc \ | 25 | sreg.cc \ |
25 | extension_chain.cc \ | 26 | extension_chain.cc \ |
26 | curl.cc | 27 | curl.cc expat.cc |
27 | libopkele_la_LDFLAGS = \ | 28 | libopkele_la_LDFLAGS = \ |
28 | -version-info 2:0:0 | 29 | -version-info 2:0:0 |
diff --git a/lib/expat.cc b/lib/expat.cc new file mode 100644 index 0000000..fa6fdde --- a/dev/null +++ b/lib/expat.cc | |||
@@ -0,0 +1,96 @@ | |||
1 | #include <opkele/expat.h> | ||
2 | |||
3 | namespace opkele { | ||
4 | |||
5 | namespace util { | ||
6 | |||
7 | expat_t::~expat_t() throw() { | ||
8 | if(_x) | ||
9 | XML_ParserFree(_x); | ||
10 | } | ||
11 | |||
12 | expat_t& expat_t::operator=(XML_Parser x) { | ||
13 | if(_x) | ||
14 | XML_ParserFree(_x); | ||
15 | _x = x; | ||
16 | } | ||
17 | |||
18 | static void _start_element(void* ud,const XML_Char *n,const XML_Char **a) { | ||
19 | ((expat_t*)ud)->start_element(n,a); | ||
20 | } | ||
21 | static void _end_element(void *ud,const XML_Char *n) { | ||
22 | ((expat_t*)ud)->end_element(n); | ||
23 | } | ||
24 | |||
25 | void expat_t::set_element_handler() { | ||
26 | assert(_x); | ||
27 | XML_SetElementHandler(_x,_start_element,_end_element); | ||
28 | } | ||
29 | |||
30 | static void _character_data(void *ud,const XML_Char *s,int l) { | ||
31 | ((expat_t*)ud)->character_data(s,l); | ||
32 | } | ||
33 | |||
34 | void expat_t::set_character_data_handler() { | ||
35 | assert(_x); | ||
36 | XML_SetCharacterDataHandler(_x,_character_data); | ||
37 | } | ||
38 | |||
39 | static void _processing_instruction(void *ud,const XML_Char *t,const XML_Char *d) { | ||
40 | ((expat_t*)ud)->processing_instruction(t,d); | ||
41 | } | ||
42 | |||
43 | void expat_t::set_processing_instruction_handler() { | ||
44 | assert(_x); | ||
45 | XML_SetProcessingInstructionHandler(_x,_processing_instruction); | ||
46 | } | ||
47 | |||
48 | static void _comment(void *ud,const XML_Char *d) { | ||
49 | ((expat_t*)ud)->comment(d); | ||
50 | } | ||
51 | |||
52 | void expat_t::set_comment_handler() { | ||
53 | assert(_x); | ||
54 | XML_SetCommentHandler(_x,_comment); | ||
55 | } | ||
56 | |||
57 | static void _start_cdata_section(void *ud) { | ||
58 | ((expat_t*)ud)->start_cdata_section(); | ||
59 | } | ||
60 | static void _end_cdata_section(void *ud) { | ||
61 | ((expat_t*)ud)->end_cdata_section(); | ||
62 | } | ||
63 | |||
64 | void expat_t::set_cdata_section_handler() { | ||
65 | assert(_x); | ||
66 | XML_SetCdataSectionHandler(_x,_start_cdata_section,_end_cdata_section); | ||
67 | } | ||
68 | |||
69 | static void _default_handler(void *ud,const XML_Char *s,int l) { | ||
70 | ((expat_t*)ud)->default_handler(s,l); | ||
71 | } | ||
72 | |||
73 | void expat_t::set_default_handler() { | ||
74 | assert(_x); | ||
75 | XML_SetDefaultHandler(_x,_default_handler); | ||
76 | } | ||
77 | void expat_t::set_default_handler_expand() { | ||
78 | assert(_x); | ||
79 | XML_SetDefaultHandlerExpand(_x,_default_handler); | ||
80 | } | ||
81 | |||
82 | static void _start_namespace_decl(void *ud,const XML_Char *p,const XML_Char *u) { | ||
83 | ((expat_t*)ud)->start_namespace_decl(p,u); | ||
84 | } | ||
85 | static void _end_namespace_decl(void *ud,const XML_Char *p) { | ||
86 | ((expat_t*)ud)->end_namespace_decl(p); | ||
87 | } | ||
88 | |||
89 | void expat_t::set_namespace_decl_handler() { | ||
90 | assert(_x); | ||
91 | XML_SetNamespaceDeclHandler(_x,_start_namespace_decl,_end_namespace_decl); | ||
92 | } | ||
93 | |||
94 | } | ||
95 | |||
96 | } | ||
diff --git a/libopkele.pc.in b/libopkele.pc.in index bc67362..0a95e96 100644 --- a/libopkele.pc.in +++ b/libopkele.pc.in | |||
@@ -7,5 +7,5 @@ Name: libopkele | |||
7 | Description: C++ implementation of OpenID protocol | 7 | Description: C++ implementation of OpenID protocol |
8 | Version: @VERSION@ | 8 | Version: @VERSION@ |
9 | Requires: openssl libpcre @KONFORKA_KONFORKA@ | 9 | Requires: openssl libpcre @KONFORKA_KONFORKA@ |
10 | Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ | 10 | Cflags: -I${includedir} @LIBCURL_CPPFLAGS@ @PCRE_CFLAGS@ @EXPAT_CFLAGS@ |
11 | Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ | 11 | Libs: -L${libdir} -lopkele @LIBCURL@ @PCRE_LIBS@ @EXPAT_LIBS@ |