diff options
author | Aldo Gunsing <dev@aldogunsing.nl> | 2018-11-29 18:21:44 +0300 |
---|---|---|
committer | Aldo Gunsing <dev@aldogunsing.nl> | 2018-11-29 20:33:57 +0300 |
commit | 35e61e42702614ef6d2da199e4ae26d90583a96f (patch) | |
tree | 39ce0ff646d297f1d8946c595272295b4a39d152 | |
parent | 8102acd84e7853e816fd6dbe99e5e94767776935 (diff) |
Deduplicate shared libraries between local and decsync backends
-rw-r--r-- | libraries/libmrss/meson.build (renamed from plugins/backend/decsync/libmrss/meson.build) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss.h (renamed from plugins/backend/decsync/libmrss/mrss.h) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_download.c (renamed from plugins/backend/decsync/libmrss/mrss_download.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_edit.c (renamed from plugins/backend/decsync/libmrss/mrss_edit.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_free.c (renamed from plugins/backend/decsync/libmrss/mrss_free.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_generic.c (renamed from plugins/backend/decsync/libmrss/mrss_generic.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_internal.h (renamed from plugins/backend/decsync/libmrss/mrss_internal.h) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_options.c (renamed from plugins/backend/decsync/libmrss/mrss_options.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_parser.c (renamed from plugins/backend/decsync/libmrss/mrss_parser.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_search.c (renamed from plugins/backend/decsync/libmrss/mrss_search.c) | 0 | ||||
-rw-r--r-- | libraries/libmrss/mrss_write.c (renamed from plugins/backend/decsync/libmrss/mrss_write.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/meson.build (renamed from plugins/backend/decsync/libnxml/meson.build) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml.h (renamed from plugins/backend/decsync/libnxml/nxml.h) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_download.c (renamed from plugins/backend/decsync/libnxml/nxml_download.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_easy.c (renamed from plugins/backend/decsync/libnxml/nxml_easy.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_edit.c (renamed from plugins/backend/decsync/libnxml/nxml_edit.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_error.c (renamed from plugins/backend/decsync/libnxml/nxml_error.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_free.c (renamed from plugins/backend/decsync/libnxml/nxml_free.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_init.c (renamed from plugins/backend/decsync/libnxml/nxml_init.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_internal.h (renamed from plugins/backend/decsync/libnxml/nxml_internal.h) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_namespace.c (renamed from plugins/backend/decsync/libnxml/nxml_namespace.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_parser.c (renamed from plugins/backend/decsync/libnxml/nxml_parser.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_string.c (renamed from plugins/backend/decsync/libnxml/nxml_string.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_tools.c (renamed from plugins/backend/decsync/libnxml/nxml_tools.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_utf.c (renamed from plugins/backend/decsync/libnxml/nxml_utf.c) | 0 | ||||
-rw-r--r-- | libraries/libnxml/nxml_write.c (renamed from plugins/backend/decsync/libnxml/nxml_write.c) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/meson.build (renamed from plugins/backend/decsync/rss-glib/meson.build) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-document-private.h (renamed from plugins/backend/decsync/rss-glib/rss-document-private.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-document.c (renamed from plugins/backend/decsync/rss-glib/rss-document.c) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-document.h (renamed from plugins/backend/decsync/rss-glib/rss-document.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-glib.h (renamed from plugins/backend/decsync/rss-glib/rss-glib.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-item-private.h (renamed from plugins/backend/decsync/rss-glib/rss-item-private.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-item.c (renamed from plugins/backend/decsync/rss-glib/rss-item.c) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-item.h (renamed from plugins/backend/decsync/rss-glib/rss-item.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-marshal.c (renamed from plugins/backend/decsync/rss-glib/rss-marshal.c) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-marshal.h (renamed from plugins/backend/decsync/rss-glib/rss-marshal.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-parser-private.h (renamed from plugins/backend/decsync/rss-glib/rss-parser-private.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-parser.c (renamed from plugins/backend/decsync/rss-glib/rss-parser.c) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-parser.h (renamed from plugins/backend/decsync/rss-glib/rss-parser.h) | 0 | ||||
-rw-r--r-- | libraries/rss-glib/rss-version.h (renamed from plugins/backend/decsync/rss-glib/rss-version.h) | 0 | ||||
-rw-r--r-- | meson.build | 12 | ||||
-rw-r--r-- | plugins/backend/decsync/meson.build | 15 | ||||
-rw-r--r-- | plugins/backend/local/Rfc822.vala | 144 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/meson.build | 16 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss.h | 897 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_download.c | 51 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_edit.c | 1739 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_free.c | 464 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_generic.c | 146 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_internal.h | 35 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_options.c | 76 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_parser.c | 1376 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_search.c | 122 | ||||
-rw-r--r-- | plugins/backend/local/libmrss/mrss_write.c | 1228 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/meson.build | 19 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml.h | 947 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_download.c | 139 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_easy.c | 392 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_edit.c | 184 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_error.c | 63 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_free.c | 233 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_init.c | 400 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_internal.h | 84 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_namespace.c | 354 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_parser.c | 1482 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_string.c | 116 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_tools.c | 122 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_utf.c | 515 | ||||
-rw-r--r-- | plugins/backend/local/libnxml/nxml_write.c | 410 | ||||
-rw-r--r-- | plugins/backend/local/meson.build | 14 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/meson.build | 12 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-document-private.h | 58 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-document.c | 1085 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-document.h | 105 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-glib-1.0.vapi | 126 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-glib.h | 9 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-item-private.h | 48 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-item.c | 819 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-item.h | 97 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-marshal.c | 54 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-marshal.h | 15 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-parser-private.h | 45 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-parser.c | 338 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-parser.h | 102 | ||||
-rw-r--r-- | plugins/backend/local/rss-glib/rss-version.h | 96 | ||||
-rw-r--r-- | src/Rfc822.vala (renamed from plugins/backend/decsync/Rfc822.vala) | 0 | ||||
-rw-r--r-- | vapi/rss-glib-1.0.vapi (renamed from plugins/backend/decsync/rss-glib/rss-glib-1.0.vapi) | 0 |
87 files changed, 13 insertions, 14791 deletions
diff --git a/plugins/backend/decsync/libmrss/meson.build b/libraries/libmrss/meson.build index 595dab82..595dab82 100644 --- a/plugins/backend/decsync/libmrss/meson.build +++ b/libraries/libmrss/meson.build diff --git a/plugins/backend/decsync/libmrss/mrss.h b/libraries/libmrss/mrss.h index d1055b5c..d1055b5c 100644 --- a/plugins/backend/decsync/libmrss/mrss.h +++ b/libraries/libmrss/mrss.h diff --git a/plugins/backend/decsync/libmrss/mrss_download.c b/libraries/libmrss/mrss_download.c index c28980aa..c28980aa 100644 --- a/plugins/backend/decsync/libmrss/mrss_download.c +++ b/libraries/libmrss/mrss_download.c diff --git a/plugins/backend/decsync/libmrss/mrss_edit.c b/libraries/libmrss/mrss_edit.c index a21a559d..a21a559d 100644 --- a/plugins/backend/decsync/libmrss/mrss_edit.c +++ b/libraries/libmrss/mrss_edit.c diff --git a/plugins/backend/decsync/libmrss/mrss_free.c b/libraries/libmrss/mrss_free.c index e11c4c9b..e11c4c9b 100644 --- a/plugins/backend/decsync/libmrss/mrss_free.c +++ b/libraries/libmrss/mrss_free.c diff --git a/plugins/backend/decsync/libmrss/mrss_generic.c b/libraries/libmrss/mrss_generic.c index ec4e458d..ec4e458d 100644 --- a/plugins/backend/decsync/libmrss/mrss_generic.c +++ b/libraries/libmrss/mrss_generic.c diff --git a/plugins/backend/decsync/libmrss/mrss_internal.h b/libraries/libmrss/mrss_internal.h index 0b496fdf..0b496fdf 100644 --- a/plugins/backend/decsync/libmrss/mrss_internal.h +++ b/libraries/libmrss/mrss_internal.h diff --git a/plugins/backend/decsync/libmrss/mrss_options.c b/libraries/libmrss/mrss_options.c index bd02c343..bd02c343 100644 --- a/plugins/backend/decsync/libmrss/mrss_options.c +++ b/libraries/libmrss/mrss_options.c diff --git a/plugins/backend/decsync/libmrss/mrss_parser.c b/libraries/libmrss/mrss_parser.c index 200cd8dd..200cd8dd 100644 --- a/plugins/backend/decsync/libmrss/mrss_parser.c +++ b/libraries/libmrss/mrss_parser.c diff --git a/plugins/backend/decsync/libmrss/mrss_search.c b/libraries/libmrss/mrss_search.c index 8d82c2c3..8d82c2c3 100644 --- a/plugins/backend/decsync/libmrss/mrss_search.c +++ b/libraries/libmrss/mrss_search.c diff --git a/plugins/backend/decsync/libmrss/mrss_write.c b/libraries/libmrss/mrss_write.c index 09d648d3..09d648d3 100644 --- a/plugins/backend/decsync/libmrss/mrss_write.c +++ b/libraries/libmrss/mrss_write.c diff --git a/plugins/backend/decsync/libnxml/meson.build b/libraries/libnxml/meson.build index 1eaa8ed8..1eaa8ed8 100644 --- a/plugins/backend/decsync/libnxml/meson.build +++ b/libraries/libnxml/meson.build diff --git a/plugins/backend/decsync/libnxml/nxml.h b/libraries/libnxml/nxml.h index 0406038b..0406038b 100644 --- a/plugins/backend/decsync/libnxml/nxml.h +++ b/libraries/libnxml/nxml.h diff --git a/plugins/backend/decsync/libnxml/nxml_download.c b/libraries/libnxml/nxml_download.c index 9f079bd3..9f079bd3 100644 --- a/plugins/backend/decsync/libnxml/nxml_download.c +++ b/libraries/libnxml/nxml_download.c diff --git a/plugins/backend/decsync/libnxml/nxml_easy.c b/libraries/libnxml/nxml_easy.c index 00690553..00690553 100644 --- a/plugins/backend/decsync/libnxml/nxml_easy.c +++ b/libraries/libnxml/nxml_easy.c diff --git a/plugins/backend/decsync/libnxml/nxml_edit.c b/libraries/libnxml/nxml_edit.c index 597dcaa4..597dcaa4 100644 --- a/plugins/backend/decsync/libnxml/nxml_edit.c +++ b/libraries/libnxml/nxml_edit.c diff --git a/plugins/backend/decsync/libnxml/nxml_error.c b/libraries/libnxml/nxml_error.c index 604fd640..604fd640 100644 --- a/plugins/backend/decsync/libnxml/nxml_error.c +++ b/libraries/libnxml/nxml_error.c diff --git a/plugins/backend/decsync/libnxml/nxml_free.c b/libraries/libnxml/nxml_free.c index ae4ee080..ae4ee080 100644 --- a/plugins/backend/decsync/libnxml/nxml_free.c +++ b/libraries/libnxml/nxml_free.c diff --git a/plugins/backend/decsync/libnxml/nxml_init.c b/libraries/libnxml/nxml_init.c index e7789fa5..e7789fa5 100644 --- a/plugins/backend/decsync/libnxml/nxml_init.c +++ b/libraries/libnxml/nxml_init.c diff --git a/plugins/backend/decsync/libnxml/nxml_internal.h b/libraries/libnxml/nxml_internal.h index 675b6654..675b6654 100644 --- a/plugins/backend/decsync/libnxml/nxml_internal.h +++ b/libraries/libnxml/nxml_internal.h diff --git a/plugins/backend/decsync/libnxml/nxml_namespace.c b/libraries/libnxml/nxml_namespace.c index 2f54670a..2f54670a 100644 --- a/plugins/backend/decsync/libnxml/nxml_namespace.c +++ b/libraries/libnxml/nxml_namespace.c diff --git a/plugins/backend/decsync/libnxml/nxml_parser.c b/libraries/libnxml/nxml_parser.c index 8379aa01..8379aa01 100644 --- a/plugins/backend/decsync/libnxml/nxml_parser.c +++ b/libraries/libnxml/nxml_parser.c diff --git a/plugins/backend/decsync/libnxml/nxml_string.c b/libraries/libnxml/nxml_string.c index f5d4fd49..f5d4fd49 100644 --- a/plugins/backend/decsync/libnxml/nxml_string.c +++ b/libraries/libnxml/nxml_string.c diff --git a/plugins/backend/decsync/libnxml/nxml_tools.c b/libraries/libnxml/nxml_tools.c index 9f075acf..9f075acf 100644 --- a/plugins/backend/decsync/libnxml/nxml_tools.c +++ b/libraries/libnxml/nxml_tools.c diff --git a/plugins/backend/decsync/libnxml/nxml_utf.c b/libraries/libnxml/nxml_utf.c index 9d8f9fbd..9d8f9fbd 100644 --- a/plugins/backend/decsync/libnxml/nxml_utf.c +++ b/libraries/libnxml/nxml_utf.c diff --git a/plugins/backend/decsync/libnxml/nxml_write.c b/libraries/libnxml/nxml_write.c index f1c658c7..f1c658c7 100644 --- a/plugins/backend/decsync/libnxml/nxml_write.c +++ b/libraries/libnxml/nxml_write.c diff --git a/plugins/backend/decsync/rss-glib/meson.build b/libraries/rss-glib/meson.build index 05c5be84..05c5be84 100644 --- a/plugins/backend/decsync/rss-glib/meson.build +++ b/libraries/rss-glib/meson.build diff --git a/plugins/backend/decsync/rss-glib/rss-document-private.h b/libraries/rss-glib/rss-document-private.h index 84889e93..84889e93 100644 --- a/plugins/backend/decsync/rss-glib/rss-document-private.h +++ b/libraries/rss-glib/rss-document-private.h diff --git a/plugins/backend/decsync/rss-glib/rss-document.c b/libraries/rss-glib/rss-document.c index c98a2f13..c98a2f13 100644 --- a/plugins/backend/decsync/rss-glib/rss-document.c +++ b/libraries/rss-glib/rss-document.c diff --git a/plugins/backend/decsync/rss-glib/rss-document.h b/libraries/rss-glib/rss-document.h index 58c995ab..58c995ab 100644 --- a/plugins/backend/decsync/rss-glib/rss-document.h +++ b/libraries/rss-glib/rss-document.h diff --git a/plugins/backend/decsync/rss-glib/rss-glib.h b/libraries/rss-glib/rss-glib.h index 1595d64c..1595d64c 100644 --- a/plugins/backend/decsync/rss-glib/rss-glib.h +++ b/libraries/rss-glib/rss-glib.h diff --git a/plugins/backend/decsync/rss-glib/rss-item-private.h b/libraries/rss-glib/rss-item-private.h index d4951a38..d4951a38 100644 --- a/plugins/backend/decsync/rss-glib/rss-item-private.h +++ b/libraries/rss-glib/rss-item-private.h diff --git a/plugins/backend/decsync/rss-glib/rss-item.c b/libraries/rss-glib/rss-item.c index fb39cbb9..fb39cbb9 100644 --- a/plugins/backend/decsync/rss-glib/rss-item.c +++ b/libraries/rss-glib/rss-item.c diff --git a/plugins/backend/decsync/rss-glib/rss-item.h b/libraries/rss-glib/rss-item.h index 1bbe041c..1bbe041c 100644 --- a/plugins/backend/decsync/rss-glib/rss-item.h +++ b/libraries/rss-glib/rss-item.h diff --git a/plugins/backend/decsync/rss-glib/rss-marshal.c b/libraries/rss-glib/rss-marshal.c index 84e4a2dc..84e4a2dc 100644 --- a/plugins/backend/decsync/rss-glib/rss-marshal.c +++ b/libraries/rss-glib/rss-marshal.c diff --git a/plugins/backend/decsync/rss-glib/rss-marshal.h b/libraries/rss-glib/rss-marshal.h index 159a0ac6..159a0ac6 100644 --- a/plugins/backend/decsync/rss-glib/rss-marshal.h +++ b/libraries/rss-glib/rss-marshal.h diff --git a/plugins/backend/decsync/rss-glib/rss-parser-private.h b/libraries/rss-glib/rss-parser-private.h index eaddb9e4..eaddb9e4 100644 --- a/plugins/backend/decsync/rss-glib/rss-parser-private.h +++ b/libraries/rss-glib/rss-parser-private.h diff --git a/plugins/backend/decsync/rss-glib/rss-parser.c b/libraries/rss-glib/rss-parser.c index 451a7f9f..451a7f9f 100644 --- a/plugins/backend/decsync/rss-glib/rss-parser.c +++ b/libraries/rss-glib/rss-parser.c diff --git a/plugins/backend/decsync/rss-glib/rss-parser.h b/libraries/rss-glib/rss-parser.h index 6ab95a3d..6ab95a3d 100644 --- a/plugins/backend/decsync/rss-glib/rss-parser.h +++ b/libraries/rss-glib/rss-parser.h diff --git a/plugins/backend/decsync/rss-glib/rss-version.h b/libraries/rss-glib/rss-version.h index 6a618529..6a618529 100644 --- a/plugins/backend/decsync/rss-glib/rss-version.h +++ b/libraries/rss-glib/rss-version.h diff --git a/meson.build b/meson.build index 8608472c..60bf5a6f 100644 --- a/meson.build +++ b/meson.build @@ -88,6 +88,9 @@ subdir('libraries/libgtkimageview') subdir('libraries/libIvy') subdir('libraries/htmlclean') subdir('libraries/WebExtension') +subdir('libraries/libnxml') +subdir('libraries/libmrss') +subdir('libraries/rss-glib') subdir('data') @@ -95,6 +98,7 @@ subdir('data') libgd_vapi = vala_compiler.find_library('gd-1.0', dirs: VAPI_DIR) gtkimageview_vapi = vala_compiler.find_library('gtkimageview', dirs: VAPI_DIR) htmlclean_vapi = vala_compiler.find_library('htmlclean', dirs: VAPI_DIR) +rss_glib_vapi = vala_compiler.find_library('rss-glib-1.0', dirs: VAPI_DIR) # htmlclean htmlclean = declare_dependency( @@ -126,6 +130,13 @@ libivy = declare_dependency( include_directories: ivy_inc ) +# lib_rss_glib +lib_rss_glib = declare_dependency( + link_with: rss_glib_lib, + include_directories: rss_glib_inc, + dependencies: rss_glib_vapi +) + vala_sources = [ constants, 'src/FavIcon.vala', @@ -187,6 +198,7 @@ vala_sources = [ 'src/Enums.vala', 'src/DataBaseReadOnly.vala', 'src/ListUtils.vala', + 'src/Rfc822.vala', 'src/Settings.vala', 'src/StringUtils.vala', 'src/Structs.vala', diff --git a/plugins/backend/decsync/meson.build b/plugins/backend/decsync/meson.build index aba485dc..bf9cfdfe 100644 --- a/plugins/backend/decsync/meson.build +++ b/plugins/backend/decsync/meson.build @@ -3,18 +3,6 @@ decsync_resources = gnome.compile_resources( 'decsync.gresource.xml' ) -subdir('libnxml') -subdir('libmrss') -subdir('rss-glib') - -rss_glib_dir = join_paths(meson.current_source_dir(), 'rss-glib/') -rss_glib_vapi = vala_compiler.find_library('rss-glib-1.0', dirs: rss_glib_dir) -lib_rss_glib = declare_dependency( - link_with: rss_glib_lib, - include_directories: rss_glib_inc, - dependencies: rss_glib_vapi -) - subdir('libdecsync/src') shared_library( @@ -22,8 +10,7 @@ shared_library( [ 'decsyncInterface.vala', 'decsyncListeners.vala', - 'decsyncUtils.vala', - 'Rfc822.vala' + 'decsyncUtils.vala' ], decsync_resources, c_args: c_args, diff --git a/plugins/backend/local/Rfc822.vala b/plugins/backend/local/Rfc822.vala deleted file mode 100644 index 368c6987..00000000 --- a/plugins/backend/local/Rfc822.vala +++ /dev/null @@ -1,144 +0,0 @@ -namespace FeedReader.Rfc822 { - - /** - * Parse a date string in RFC 822 format - * Note that we don't use Time.strptime because it uses the current locale - * to parse month names, but RFC 822 specifically requires months to be - * written in English. - * See: https://www.w3.org/Protocols/rfc822/#z28 - * And: https://groups.yahoo.com/neo/groups/rss-public/conversations/topics/536 - * */ - public static DateTime? parseDate(string? str) - { - if (str == null) - return null; - - Regex re; - try { - re = new Regex(""" - # We don't care about the day of the week - \s*(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s*)? - (?<day>\d{1,2})\s+ - (?<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+ - # The standard specifies 2-digit years but 4 digit years are - # recommended now. - # This pattern will also accept 3-digit years, so we'll have to - # check for that separately - (?<year>\d{2,4})\s+ - (?<hour>\d{2}) - :(?<minute>\d{2}) - (?::(?<second>\d{2}))?\s+ - (?<zone>UT|GMT|EST|EDT|MST|MDT|PST|PDT|[A-Z]|(?:[+-]\d{4})) - """, - RegexCompileFlags.CASELESS | RegexCompileFlags.EXTENDED, - RegexMatchFlags.ANCHORED); - } catch (RegexError e) { - stderr.printf("RFC822 regex failed to parse: %s\n", e.message); - assert(false); - return null; - } - - MatchInfo info; - if (!re.match(str, 0, out info)) - return null; - - var dayStr = info.fetch_named("day"); - var day = int.parse(dayStr); - - var monthStr = info.fetch_named("month").ascii_down(); - int month; - switch(monthStr) { - case "jan": - month = 1; - break; - case "feb": - month = 2; - break; - case "mar": - month = 3; - break; - case "apr": - month = 4; - break; - case "may": - month = 5; - break; - case "jun": - month = 6; - break; - case "jul": - month = 7; - break; - case "aug": - month = 8; - break; - case "sep": - month = 9; - break; - case "oct": - month = 10; - break; - case "nov": - month = 11; - break; - case "dec": - month = 12; - break; - default: - // The regex should make this impossible - assert(false); - return null; - } - - var yearStr = info.fetch_named("year"); - var year = int.parse(yearStr); - // Two-digit years from 00 to 49 should be interpreted as 2000 to 2049 - if (year >= 0 && year <= 49) - year += 2000; - // Two-digit years from 50 to 99 should be interpreted as 1950 to 1999 - else if (year >= 50 && year < 100) - year += 1900; - var hourStr = info.fetch_named("hour"); - var hour = int.parse(hourStr); - var minuteStr = info.fetch_named("minute"); - var minute = int.parse(minuteStr); - var secondStr = info.fetch_named("second"); - var second = secondStr == null || secondStr == "" ? 0 : int.parse(secondStr); - - var zoneStr = info.fetch_named("zone"); - TimeZone zone; - switch(zoneStr.ascii_up()) { - // Note sure if new TimeZone(zoneStr) would always work for these, - // so specifically handle the cases the spec requires - case "EDT": - zone = new TimeZone("-04"); - break; - case "CDT": - case "EST": - zone = new TimeZone("-05"); - break; - case "CST": - case "MDT": - zone = new TimeZone("-06"); - break; - case "MST": - case "PDT": - zone = new TimeZone("-07"); - break; - case "PST": - zone = new TimeZone("-08"); - break; - - case "GMT": - case "UT": - case "Z": - zone = new TimeZone.utc(); - break; - default: - zone = new TimeZone(zoneStr); - break; - } - - return new DateTime(zone, year, month, day, hour, minute, second); - } -} diff --git a/plugins/backend/local/libmrss/meson.build b/plugins/backend/local/libmrss/meson.build deleted file mode 100644 index 595dab82..00000000 --- a/plugins/backend/local/libmrss/meson.build +++ /dev/null @@ -1,16 +0,0 @@ -mrss_inc = include_directories(['.', '../libnxml']) -mrss_lib = static_library( - 'mrss', - [ - 'mrss_download.c', - 'mrss_edit.c', - 'mrss_free.c', - 'mrss_generic.c', - 'mrss_options.c', - 'mrss_parser.c', - 'mrss_search.c', - 'mrss_write.c' - ], - c_args: ['-Wno-comment', '-Wno-pointer-to-int-cast'], - include_directories: mrss_inc -) diff --git a/plugins/backend/local/libmrss/mrss.h b/plugins/backend/local/libmrss/mrss.h deleted file mode 100644 index d1055b5c..00000000 --- a/plugins/backend/local/libmrss/mrss.h +++ /dev/null @@ -1,897 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __M_RSS_H__ -#define __M_RSS_H__ - -#include <sys/types.h> -#include <curl/curl.h> - -#define LIBMRSS_VERSION_STRING "0.19.2" - -#define LIBMRSS_MAJOR_VERSION 0 -#define LIBMRSS_MINOR_VERSION 19 -#define LIBMRSS_MICRO_VERSION 2 - -typedef struct mrss_t mrss_t; -typedef struct mrss_options_t mrss_options_t; -typedef struct mrss_item_t mrss_item_t; -typedef struct mrss_category_t mrss_category_t; -typedef struct mrss_hour_t mrss_hour_t; -typedef struct mrss_day_t mrss_day_t; -typedef struct mrss_tag_t mrss_tag_t; -typedef struct mrss_attribute_t mrss_attribute_t; -typedef void * mrss_generic_t; - -/** This enum describes the error type of libmrss */ -typedef enum { - MRSS_OK = 0, /**< No error */ - MRSS_ERR_POSIX, /**< For the correct error, use errno */ - MRSS_ERR_PARSER, /**< Parser error */ - MRSS_ERR_DOWNLOAD, /**< Download error */ - MRSS_ERR_VERSION, /**< The RSS has a no compatible VERSION */ - MRSS_ERR_DATA /**< The parameters are incorrect */ -} mrss_error_t; - -typedef enum { - MRSS_VERSION_0_91, /**< 0.91 RSS version */ - MRSS_VERSION_0_92, /**< 0.92 RSS version */ - MRSS_VERSION_1_0, /**< 1.0 RSS version */ - MRSS_VERSION_2_0, /**< 2.0 RSS version */ - MRSS_VERSION_ATOM_0_3, /**< 0.3 Atom version */ - MRSS_VERSION_ATOM_1_0 /**< 1.0 Atom version */ -} mrss_version_t; - -/** Flag list for mrss_set and mrss_get functions */ -typedef enum { - /* Generic */ - - /** Set the ersion to a mrss_t element - the value is a mrss_version_t enum */ - MRSS_FLAG_VERSION = 1, - - /** Set the title to a mrss_t element - the value is a string */ - MRSS_FLAG_TITLE, - /** Set the title type to a mrss_t element - the value is a string (ex: text, html, ...)*/ - MRSS_FLAG_TITLE_TYPE, - /** Set the description to a mrss_t element - the value is a string */ - MRSS_FLAG_DESCRIPTION, - /** Set the description type to a mrss_t element - the value is a string */ - MRSS_FLAG_DESCRIPTION_TYPE, - /** Set the link to a mrss_t element - the value is a string */ - MRSS_FLAG_LINK, - /** Set the id to a mrss_t element - the value is a string */ - MRSS_FLAG_ID, - /** Set the language to a mrss_t element - the value is a string */ - MRSS_FLAG_LANGUAGE, - /** Set the rating to a mrss_t element - the value is a string */ - MRSS_FLAG_RATING, - /** Set the copyright to a mrss_t element - the value is a string */ - MRSS_FLAG_COPYRIGHT, - /** Set the copyright type to a mrss_t element - the value is a string */ - MRSS_FLAG_COPYRIGHT_TYPE, - /** Set the pubDate to a mrss_t element - the value is a string */ - MRSS_FLAG_PUBDATE, - /** Set the lastBuildDate to a mrss_t element - the value is a string */ - MRSS_FLAG_LASTBUILDDATE, - /** Set the docs to a mrss_t element - the value is a string */ - MRSS_FLAG_DOCS, - /** Set the managingeditor to a mrss_t element - the value is a string */ - MRSS_FLAG_MANAGINGEDITOR, - /** Set the managingeditor's email to a mrss_t element - the value is a string */ - MRSS_FLAG_MANAGINGEDITOR_EMAIL, - /** Set the managingeditor's uri to a mrss_t element - the value is a string */ - MRSS_FLAG_MANAGINGEDITOR_URI, - /** Set the webMaster to a mrss_t element - the value is a string */ - MRSS_FLAG_WEBMASTER, - /** Set the generator to a mrss_t element - the value is a string */ - MRSS_FLAG_TTL, - /** Set the about to a mrss_t element - the value is a string */ - MRSS_FLAG_ABOUT, - - /* Contributor */ - - /** Set the contributor to a mrss_t element - the value is a string */ - MRSS_FLAG_CONTRIBUTOR, - /** Set the contributor's email to a mrss_t element - the value is a string */ - MRSS_FLAG_CONTRIBUTOR_EMAIL, - /** Set the contributor's uri to a mrss_t element - the value is a string */ - MRSS_FLAG_CONTRIBUTOR_URI, - - /* Generator */ - - /** Set the generator to a mrss_t element - the value is a string */ - MRSS_FLAG_GENERATOR, - /** Set the generator's email to a mrss_t element - the value is a string */ - MRSS_FLAG_GENERATOR_URI, - /** Set the generator's uri to a mrss_t element - the value is a string */ - MRSS_FLAG_GENERATOR_VERSION, - - /* Image */ - - /** Set the image_title to a mrss_t element - the value is a string */ - MRSS_FLAG_IMAGE_TITLE, - /** Set the image_url to a mrss_t element - the value is a string */ - MRSS_FLAG_IMAGE_URL, - /** Set the image_logo to a mrss_t element - the value is a string */ - MRSS_FLAG_IMAGE_LOGO, - /** Set the image_link to a mrss_t element - the value is a string */ - MRSS_FLAG_IMAGE_LINK, - /** Set the image_width to a mrss_t element - the value is a integer */ - MRSS_FLAG_IMAGE_WIDTH, - /** Set the image_height to a mrss_t element - the value is a integer */ - MRSS_FLAG_IMAGE_HEIGHT, - /** Set the image_description to a mrss_t element - the value is a string */ - MRSS_FLAG_IMAGE_DESCRIPTION, - - /* TextInput */ - - /** Set the textinput_title to a mrss_t element - the value is a string */ - MRSS_FLAG_TEXTINPUT_TITLE, - /** Set the textinput_description to a mrss_t element - the value is a string */ - MRSS_FLAG_TEXTINPUT_DESCRIPTION, - /** Set the textinput_name to a mrss_t element - the value is a string */ - MRSS_FLAG_TEXTINPUT_NAME, - /** Set the textinput_link to a mrss_t element - the value is a string */ - MRSS_FLAG_TEXTINPUT_LINK, - - /* Cloud */ - - /** Set the cloud to a mrss_t element - the value is a string */ - MRSS_FLAG_CLOUD, - /** Set the cloud_domain to a mrss_t element - the value is a string */ - MRSS_FLAG_CLOUD_DOMAIN, - /** Set the cloud_port to a mrss_t element - the value is a string */ - MRSS_FLAG_CLOUD_PORT, - /** Set the cloud_path to a mrss_t element - the value is a integer */ - MRSS_FLAG_CLOUD_PATH, - /** Set the cloud_registerProcedure to a mrss_t element - - * the value is a string */ - MRSS_FLAG_CLOUD_REGISTERPROCEDURE, - /** Set the cloud_protocol to a mrss_t element - the value is a string */ - MRSS_FLAG_CLOUD_PROTOCOL, - - /* SkipHours */ - - /** Set the hour to a mrss_hour_t element - the value is a string */ - MRSS_FLAG_HOUR, - - /* SkipDays */ - - /** Set the day to a mrss_day_t element - the value is a string */ - MRSS_FLAG_DAY, - - /* Category or Item/Category */ - - /** Set the category to a mrss_category_t element - the value is a string */ - MRSS_FLAG_CATEGORY, - /** Set the domain to a mrss_category_t element - the value is a string */ - MRSS_FLAG_CATEGORY_DOMAIN, - /** Set the label to a mrss_category_t element - the value is a string */ - MRSS_FLAG_CATEGORY_LABEL, - - /* Item */ - - /** Set the title to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_TITLE, - /** Set the title type to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_TITLE_TYPE, - /** Set the link to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_LINK, - /** Set the description to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_DESCRIPTION, - /** Set the description type to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_DESCRIPTION_TYPE, - /** Set the copyright to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_COPYRIGHT, - /** Set the copyright type to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_COPYRIGHT_TYPE, - - /** Set the author to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_AUTHOR, - /** Set the author's uri to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_AUTHOR_URI, - /** Set the author's email to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_AUTHOR_EMAIL, - - /** Set the contributor to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_CONTRIBUTOR, - /** Set the contributor's uri to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_CONTRIBUTOR_URI, - /** Set the contributor's email to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_CONTRIBUTOR_EMAIL, - - /** Set the comments to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_COMMENTS, - /** Set the pubDate to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_PUBDATE, - /** Set the guid to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_GUID, - /** Set the guid_isPermaLink to a mrss_item_t element - - * the value is a integer */ - MRSS_FLAG_ITEM_GUID_ISPERMALINK, - /** Set the source to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_SOURCE, - /** Set the source_url to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_SOURCE_URL, - /** Set the enclosure to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_ENCLOSURE, - /** Set the enclosure_url to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_ENCLOSURE_URL, - /** Set the enclosure_length to a mrss_item_t element - - * the value is a integer */ - MRSS_FLAG_ITEM_ENCLOSURE_LENGTH, - /** Set the enclosure_type to a mrss_item_t element - the value is a string */ - MRSS_FLAG_ITEM_ENCLOSURE_TYPE, - - /* Item */ - - /** Set the name to a mrss_tag_t element - the value is a string */ - MRSS_FLAG_TAG_NAME, - - /** Set the value to a mrss_tag_t element - the value is a string */ - MRSS_FLAG_TAG_VALUE, - - /** Set the namespace to a mrss_tag_t element - the value is a string */ - MRSS_FLAG_TAG_NS, - - /** Set the name to a mrss_attribute_t element - the value is a string */ - MRSS_FLAG_ATTRIBUTE_NAME, - - /** Set the value to a mrss_attribute_t element - the value is a string */ - MRSS_FLAG_ATTRIBUTE_VALUE, - - /** Set the namespace to a mrss_attribute_t element - the value is a string */ - MRSS_FLAG_ATTRIBUTE_NS, - - /** Set the terminetor flag */ - MRSS_FLAG_END = 0 - -} mrss_flag_t; - -/** Enum for the casting of the libmrss data struct */ -typedef enum { - /** The data struct is a mrss_t */ - MRSS_ELEMENT_CHANNEL, - /** The data struct is a mrss_item_t */ - MRSS_ELEMENT_ITEM, - /** The data struct is a mrss_hour_t */ - MRSS_ELEMENT_SKIPHOURS, - /** The data struct is a mrss_day_t */ - MRSS_ELEMENT_SKIPDAYS, - /** The data struct is a mrss_category_t */ - MRSS_ELEMENT_CATEGORY, - /** The data struct is a mrss_tag_t */ - MRSS_ELEMENT_TAG, - /** The data struct is a mrss_attribute_t */ - MRSS_ELEMENT_ATTRIBUTE -} mrss_element_t; - -/** Data struct for any items of RSS. It contains a pointer to the list - * of categories. - * - * \brief - * Struct data for item elements */ -struct mrss_item_t { - - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /* Data: */ - - /* 0.91 0.92 1.0 2.0 ATOM */ - char *title; /* R O O O R */ - char *title_type; /* - - - - O */ - char *link; /* R O O O O */ - char *description; /* R O - O O */ - char *description_type; /* - - - - 0 */ - char *copyright; /* - - - - O */ - char *copyright_type; /* - - - - O */ - - char *author; /* - - - O O */ - char *author_uri; /* - - - - O */ - char *author_email; /* - - - - O */ - - char *contributor; /* - - - - O */ - char *contributor_uri; /* - - - - O */ - char *contributor_email; /* - - - - O */ - - char *comments; /* - - - O - */ - char *pubDate; /* - - - O O */ - char *guid; /* - - - O O */ - int guid_isPermaLink; /* - - - O - */ - - char *source; /* - O - O - */ - char *source_url; /* - R - R - */ - - char *enclosure; /* - O - O - */ - char *enclosure_url; /* - R - R - */ - int enclosure_length; /* - R - R - */ - char *enclosure_type; /* - R - R - */ - - mrss_category_t *category; /* - O - O O */ - - mrss_tag_t *other_tags; - - mrss_item_t *next; -}; - -/** Data struct for skipHours elements. - * - * \brief - * Struct data for skipHours elements */ -struct mrss_hour_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /* Data: */ - /* 0.91 0.92 1.0 2.0 ATOM */ - char *hour; /* R R - R - */ - mrss_hour_t *next; -}; - -/** Data struct for skipDays elements. - * - * \brief - * Struct data for skipDays elements */ -struct mrss_day_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /* Data: */ - /* 0.91 0.92 1.0 2.0 ATOM */ - char *day; /* R R - R - */ - mrss_day_t *next; -}; - -/** Data struct for category elements - * - * \brief - * Struct data for category elements */ -struct mrss_category_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /* Data: */ - /* 0.91 0.92 1.0 2.0 ATOM */ - char *category; /* - R - R R */ - char *domain; /* - O - O O */ - char *label; /* - - - - O */ - mrss_category_t *next; -}; - -/** Principal data struct. It contains pointers to any other structures. - * - * \brief - * Principal data struct. It contains pointers to any other structures */ -struct mrss_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - int curl_error; - - /* Data: */ - - char *file; - size_t size; - char *encoding; - - mrss_version_t version; /* 0.91 0.92 1.0 2.0 ATOM */ - - char *title; /* R R R R R */ - char *title_type; /* - - - - O */ - char *description; /* R R R R R */ - char *description_type; /* - - - - O */ - char *link; /* R R R R O */ - char *id; /* - - - - O */ - char *language; /* R O - O O */ - char *rating; /* O O - O - */ - char *copyright; /* O O - O O */ - char *copyright_type; /* - - - - O */ - char *pubDate; /* O O - O - */ - char *lastBuildDate; /* O O - O O */ - char *docs; /* O O - O - */ - char *managingeditor; /* O O - O O */ - char *managingeditor_email; /* O O - O O */ - char *managingeditor_uri; /* O O - O O */ - char *webMaster; /* O O - O - */ - int ttl; /* - - - O - */ - char *about; /* - - R - - */ - - /* Contributor */ /* - - - - O */ - char *contributor; /* - - - - R */ - char *contributor_email; /* - - - - O */ - char *contributor_uri; /* - - - - O */ - - /* Generator */ - char *generator; /* - - - O O */ - char *generator_uri; /* - - - - O */ - char *generator_version; /* - - - - O */ - - /* Tag Image: */ /* O O O O - */ - char *image_title; /* R R R R - */ - char *image_url; /* R R R R O */ - char *image_logo; /* - - - - O */ - char *image_link; /* R R R R - */ - unsigned int image_width; /* O O - O - */ - unsigned int image_height; /* O O - O - */ - char *image_description; /* O O - O - */ - - /* TextInput: */ /* O O O O - */ - char *textinput_title; /* R R R R - */ - char *textinput_description; /* R R R R - */ - char *textinput_name; /* R R R R - */ - char *textinput_link; /* R R R R - */ - - /* Cloud */ - char *cloud; /* - O - O - */ - char *cloud_domain; /* - R - R - */ - int cloud_port; /* - R - R - */ - char *cloud_path; /* - R - R - */ - char *cloud_registerProcedure;/* - R - R - */ - char *cloud_protocol; /* - R - R - */ - - mrss_hour_t *skipHours; /* O O - O - */ - mrss_day_t *skipDays; /* O O - O - */ - - mrss_category_t *category; /* - O - O O */ - - mrss_item_t *item; /* R R R R R */ - - mrss_tag_t *other_tags; - - void *c_locale; - -}; - -/** Data struct for any other tag out of the RSS namespace. - * - * \brief - * Struct data for external tags */ -struct mrss_tag_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /*name of the tag */ - char *name; - - /* value */ - char *value; - - /* namespace */ - char *ns; - - /* list of attributes: */ - mrss_attribute_t *attributes; - - /* Sub tags: */ - mrss_tag_t *children; - - /* the next tag: */ - mrss_tag_t *next; -}; - -/** Data struct for the attributes of the tag - * - * \brief - * Struct data for external attribute */ -struct mrss_attribute_t { - /** For internal use only: */ - mrss_element_t element; - int allocated; - - /* name of the tag */ - char *name; - - /* value */ - char *value; - - /* namespace */ - char *ns; - - /* The next attribute: */ - mrss_attribute_t *next; -}; - -/** Options data struct. It contains some user preferences. - * - * \brief - * Options data struct. It contains some user preferences. */ -struct mrss_options_t { - int timeout; - char *proxy; - char *proxy_authentication; - char *certfile; - char *cacert; - char *password; - int verifypeer; - char *authentication; - char *user_agent; -}; - -/** PARSE FUNCTIONS *********************************************************/ - -/** - * Parses a url and creates the data struct of the feed RSS url. - * This function downloads your request if this is http or ftp. - * \param url The url to be parsed - * \param mrss the pointer to your data struct - * \return the error code - */ -mrss_error_t mrss_parse_url (char * url, - mrss_t ** mrss); - -/** - * Like the previous function but with a options struct. - * \param url The url to be parsed - * \param mrss the pointer to your data struct - * \param options a pointer to a options data struct - * \return the error code - */ -mrss_error_t mrss_parse_url_with_options - (char * url, - mrss_t ** mrss, - mrss_options_t * options); - -/** - * Like the previous function but with CURLcode error - * \param url The url to be parsed - * \param mrss the pointer to your data struct - * \param options a pointer to a options data struct. It can be NULL - * \param curlcode the error code from libcurl - * \return the error code - */ -mrss_error_t mrss_parse_url_with_options_and_error - (char * url, - mrss_t ** mrss, - mrss_options_t * options, - CURLcode * curlcode); - -/** - * Like the previous function but you take ownership of the downloaded buffer - * in case of success - * \param url The url to be parsed - * \param mrss the pointer to your data struct - * \param options a pointer to a options data struct - * \param curlcode the error code from libcurl - * \param feed_content a pointer to the buffer with the document. This is not NULL terminated - * \param feed_size the size of the buffer above - * \return the error code - */ -mrss_error_t mrss_parse_url_with_options_error_and_transfer_buffer - (char * url, - mrss_t ** mrss, - mrss_options_t * options, - CURLcode * curlcode, - char ** feed_content, - int * feed_size); - -/** - * Parses a file and creates the data struct of the feed RSS url - * \param file The file to be parsed - * \param mrss the pointer to your data struct - * \return the error code - */ -mrss_error_t mrss_parse_file (char * file, - mrss_t ** mrss); - -/** - * Parses a buffer and creates the data struct of the feed RSS url - * \param buffer Pointer to the xml memory stream to be parsed - * \param size_buffer The size of the array of char - * \param mrss the pointer to your data struct - * \return the error code - */ -mrss_error_t mrss_parse_buffer (char * buffer, - size_t size_buffer, - mrss_t ** mrss); - -/** WRITE FUNCTIONS *********************************************************/ - -/** - * Writes a RSS struct data in a local file - * \param mrss the rss struct data - * \param file the local file - * \return the error code - */ -mrss_error_t mrss_write_file (mrss_t * mrss, - char * file); - -/** - * Write a RSS struct data in a buffer. - * - * \code - * char *buffer; - * buffer=NULL; //<--- This is important!! - * mrss_write_buffer (mrss, &buffer); - * \endcode - * - * The buffer must be NULL. - * \param mrss the rss struct data - * \param buffer the buffer - * \return the error code - */ -mrss_error_t mrss_write_buffer (mrss_t * mrss, - char ** buffer); - -/** FREE FUNCTION ***********************************************************/ - -/** - * This function frees any type of data struct of libmrss. If the element - * is alloced by libmrss, it will be freed, else this function frees - * only the internal data. - * - * \code - * mrss_t *t=....; - * mrss_item_t *item=...; - * - * mrss_free(t); - * mrss_free(item); - * \endcode - * - * \param element the data struct - * \return the error code - */ -mrss_error_t mrss_free (mrss_generic_t element); - -/** GENERIC FUNCTION ********************************************************/ - -/** - * This function returns a static string with the description of error code - * \param err the error code that you need as string - * \return a string. Don't free this string! - */ -char * mrss_strerror (mrss_error_t err); - -/** - * This function returns a static string with the description of curl code - * \param err the error code that you need as string - * \return a string. Don't free this string! - */ -char * mrss_curl_strerror (CURLcode err); - -/** - * This function returns the mrss_element_t of a mrss data struct. - * \param element it is the element that you want check - * \param ret it is a pointer to a mrss_element_t. It will be sets. - * \return the error code - */ -mrss_error_t mrss_element (mrss_generic_t element, - mrss_element_t *ret); - -/** - * This function returns the number of seconds sinze Jennuary 1st 1970 in the - * UTC time zone, for the url that the urlstring parameter specifies. - * - * \param urlstring the url - * \param lastmodified is a pointer to a time_t struct. The return value can - * be 0 if the HEAD request does not return a Last-Modified value. - * \return the error code - */ -mrss_error_t mrss_get_last_modified (char * urlstring, - time_t * lastmodified); - -/** - * Like the previous function but with a options struct. - * - * \param urlstring the url - * \param lastmodified is a pointer to a time_t struct. The return value can - * be 0 if the HEAD request does not return a Last-Modified value. - * \param options a pointer to a options struct - * \return the error code - */ -mrss_error_t mrss_get_last_modified_with_options - (char * urlstring, - time_t * lastmodified, - mrss_options_t * options); -/** - * Like the previous function but with a CURLcode pointer. - * - * \param urlstring the url - * \param lastmodified is a pointer to a time_t struct. The return value can - * be 0 if the HEAD request does not return a Last-Modified value. - * \param options a pointer to a options struct - * \param curl_code it will contain the error code of libcurl - * \return the error code - */ -mrss_error_t mrss_get_last_modified_with_options_and_error - (char * urlstring, - time_t * lastmodified, - mrss_options_t * options, - CURLcode * curl_code); - -/** EDIT FUNCTIONS **********************************************************/ - -/** If you want create a new feed RSS from scratch, you need use - * this function as the first. - * - * \code - * mrss_t *d; - * mrss_error_t err; - * char *string; - * int integer; - * - * d=NULL; // ->this is important! If d!=NULL, mrss_new doesn't alloc memory. - * mrss_new(&d); - * - * err=mrss_set (d, - * MRSS_FLAG_VERSION, MRSS_VERSION_0_92, - * MRSS_FLAG_TITLE, "the title!", - * MRSS_FLAG_TTL, 12, - * MRSS_FLAG_END); - * - * if(err!=MRSS_OK) printf("%s\n",mrss_strerror(err)); - * - * err=mrss_get (d, - * MRSS_FLAG_TITLE, &string, - * MRSS_FLAG_TTL, &integer, - * MRSS_FLAG_END); - * - * if(err!=MRSS_OK) printf("%s\n",mrss_strerror(err)); - * printf("The title is: '%s'\n", string); - * printf("The ttl is: '%d'\n", integer); - * free(string); - * \endcode - * - * \param mrss is the pointer to the new data struct - * \return the error code - */ -mrss_error_t mrss_new (mrss_t ** mrss); - -/** - * For insert/replace/remove a flags use this function as this example: - * \code - * mrss_set(mrss, MRSS_FLAG_TITLE, "hello world", MRSS_FLAG_END); - * mrss_set(item, MRSS_FLAG_DESCRIPTION, NULL, MRSS_FLAG_END); - * \endcode - * - * \param element it is the mrss data that you want changes the the next - * list of elements. The list is composted by KEY - VALUES and as last - * element MRSS_FLAG_END. The variable of value depends from key. - * \see mrss_flag_t - * \return the error code - */ -mrss_error_t mrss_set (mrss_generic_t element, - ...); - -/** - * This function returns the request arguments. The syntax is the same of - * mrss_set but the values of the list are pointer to data element (int *, - * char **). If the key needs a char **, the value will be allocated. - * \code - * mrss_get(category, MRSS_FLAG_CATEGORY_DOMAIN, &string, MRSS_FLAG_END); - * if(string) free(string); - * \endcode - * \param element it is any type of mrss data struct. - * \return the error code - */ -mrss_error_t mrss_get (mrss_generic_t element, - ...); - -/** - * This function adds an element to another element. For example you can - * add a item to a channel, or a category to a item, and so on. Look this - * example: - * \code - * mrss_item_t *item = NULL; - * mrss_hour_t *hour = NULL; - * mrss_day_t day; // If the element is no null, the function - * mrss_category_t category, // does not alloc it - * - * mrss_new_subdata(mrss, MRSS_ELEMENT_ITEM, &item); - * mrss_new_subdata(mrss, MRSS_ELEMENT_SKIPHOURS, &hour); - * mrss_new_subdata(mrss, MRSS_ELEMENT_SKIPDAYS, &day); - * mrss_new_subdata(item, MRSS_ELEMENT_ITEM_CATEGORY, &category); - * \endcode - * \param element it is the parent element - * \param subelement it is the type of the child (MRSS_ELEMENT_ITEM, - * MRSS_ELEMENT_CATEGORY, ...) - * \param subdata it is the pointer to the new struct. If the pointer - * of *subdata exists, it will no alloced, else yes. - * \return the error code - * \see mrss_element_t - */ -mrss_error_t mrss_new_subdata (mrss_generic_t element, - mrss_element_t subelement, - mrss_generic_t subdata); - -/** - * This function removes a subdata element. As first argoment you must specify - * the parent, and second argoment the child. - * \code - * mrss_remove_subdata(mrss, item); - * \endcode - * \param element it is the parent - * \param subdata the child that you want remove. Remember: - * mrss_remove_subdata does not free the memory. So you can remove a item - * and reinsert it after. - * \return the error code - */ -mrss_error_t mrss_remove_subdata (mrss_generic_t element, - mrss_generic_t subdata); - -/* TAGS FUNCTIONS **********************************************************/ - -/** - * This function search a tag in a mrss_t, a mrss_item_t or a mrss_tag_t from - * name and a namespace. - * \param element it is the parent node (mrss_t or mrss_item_t) - * \param name the name of the element - * \param ns the namespace. It can be null if the tag has a null namespace - * \param tag the return pointer - * \return the error code - */ -mrss_error_t mrss_search_tag (mrss_generic_t element, - char * name, - char * ns, - mrss_tag_t ** tag); - -/** - * This function search an attribute from a mrss_tag_t, a name and a namespace - * \param element it is the mrss_tag_t - * \param name the name of the element - * \param ns the namespace. It can be null if the tag has a null namespace - * \param attribute the return pointer - * \return the error code - */ -mrss_error_t mrss_search_attribute (mrss_generic_t element, - char * name, - char * ns, - mrss_attribute_t ** attribute); - -/* OPTIONS FUNCTIONS *******************************************************/ - -/** - * This function creates a options struct. - * - * \param timeout timeout for the download procedure - * \param proxy a proxy server. can be NULL - * \param proxy_authentication a proxy authentication (user:pwd). can be NULL - * \param certfile a certificate for ssl autentication connection - * \param password the password of certfile - * \param cacert CA certificate to verify peer against. can be NULL - * \param verifypeer active/deactive the peer check - * \param authentication an authentication login (user:pwd). can be NULL - * \param user_agent a user_agent. can be NULL - * \return a pointer to a new allocated mrss_options_t struct - */ -mrss_options_t * - mrss_options_new (int timeout, - char *proxy, - char *proxy_authentication, - char *certfile, - char *password, - char *cacert, - int verifypeer, - char *authentication, - char *user_agent); - -/** - * This function destroys a options struct. - * \param options a pointer to a options struct - */ -void mrss_options_free (mrss_options_t *options); - -#endif - -/* EOF */ - diff --git a/plugins/backend/local/libmrss/mrss_download.c b/plugins/backend/local/libmrss/mrss_download.c deleted file mode 100644 index c28980aa..00000000 --- a/plugins/backend/local/libmrss/mrss_download.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "mrss.h" -#include "mrss_internal.h" - -char * -__mrss_download_file (nxml_t * nxml, char *fl, size_t * size, - mrss_error_t * error, CURLcode * code) -{ - char *buffer; - - if (code) - *code = CURLE_OK; - - switch (nxml_download_file (nxml, fl, &buffer, size)) - { - case NXML_OK: - return buffer; - - case NXML_ERR_DOWNLOAD: - - if (code) - *code = nxml_curl_error (nxml, NXML_ERR_DOWNLOAD); - - *error = MRSS_ERR_DOWNLOAD; - return NULL; - - default: - *error = MRSS_ERR_POSIX; - return NULL; - } -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_edit.c b/plugins/backend/local/libmrss/mrss_edit.c deleted file mode 100644 index a21a559d..00000000 --- a/plugins/backend/local/libmrss/mrss_edit.c +++ /dev/null @@ -1,1739 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -static mrss_error_t __mrss_set_channel (mrss_t *, va_list); -static mrss_error_t __mrss_set_item (mrss_item_t *, va_list); -static mrss_error_t __mrss_set_hour (mrss_hour_t *, va_list); -static mrss_error_t __mrss_set_day (mrss_day_t *, va_list); -static mrss_error_t __mrss_set_category (mrss_category_t *, va_list); -static mrss_error_t __mrss_set_tag (mrss_tag_t *, va_list); -static mrss_error_t __mrss_set_attribute (mrss_attribute_t *, va_list); - -static mrss_error_t __mrss_get_channel (mrss_t *, va_list); -static mrss_error_t __mrss_get_item (mrss_item_t *, va_list); -static mrss_error_t __mrss_get_hour (mrss_hour_t *, va_list); -static mrss_error_t __mrss_get_day (mrss_day_t *, va_list); -static mrss_error_t __mrss_get_category (mrss_category_t *, va_list); -static mrss_error_t __mrss_get_tag (mrss_tag_t *, va_list); -static mrss_error_t __mrss_get_attribute (mrss_attribute_t *, va_list); - -static mrss_error_t __mrss_new_subdata_channel (mrss_t *, mrss_element_t, - mrss_generic_t); -static mrss_error_t __mrss_new_subdata_item (mrss_item_t *, mrss_element_t, - mrss_generic_t); -static mrss_error_t __mrss_new_subdata_tag (mrss_tag_t *, mrss_element_t, - mrss_generic_t); - -static mrss_error_t __mrss_remove_subdata_channel (mrss_t *, mrss_generic_t); -static mrss_error_t __mrss_remove_subdata_item (mrss_item_t *, - mrss_generic_t); -static mrss_error_t __mrss_remove_subdata_tag (mrss_tag_t *, mrss_generic_t); - -#define __MRSS_SET_STRING( x ) \ - if(x) free(x); \ - if(value && !(x=strdup(value))) return MRSS_ERR_POSIX; \ - else if(!value) x=NULL; - -#define __MRSS_SET_INTEGER( x ) \ - x=(int)value; - -#define __MRSS_GET_STRING( x ) \ - string = (char **)value; \ - if (!x) *string = NULL; \ - else if(!(*string = strdup(x))) return MRSS_ERR_POSIX; - -#define __MRSS_GET_INTEGER( x ) \ - integer=(int *)value; \ - *integer=x; - -mrss_error_t -mrss_new (mrss_t ** data) -{ - int allocated; - - if (!data) - return MRSS_ERR_DATA; - - if (!*data) - { - if (!(*data = (mrss_t *) malloc (sizeof (mrss_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*data, 0, sizeof (mrss_t)); - (*data)->element = MRSS_ELEMENT_CHANNEL; - (*data)->allocated = allocated; - - return MRSS_OK; -} - -mrss_error_t -mrss_set (mrss_generic_t data, ...) -{ - va_list va; - mrss_error_t err; - mrss_t *tmp; - - if (!data) - return MRSS_ERR_DATA; - - va_start (va, data); - - tmp = (mrss_t *) data; - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - err = __mrss_set_channel ((mrss_t *) data, va); - break; - - case MRSS_ELEMENT_ITEM: - err = __mrss_set_item ((mrss_item_t *) data, va); - break; - - case MRSS_ELEMENT_SKIPHOURS: - err = __mrss_set_hour ((mrss_hour_t *) data, va); - break; - - case MRSS_ELEMENT_SKIPDAYS: - err = __mrss_set_day ((mrss_day_t *) data, va); - break; - - case MRSS_ELEMENT_CATEGORY: - err = __mrss_set_category ((mrss_category_t *) data, va); - break; - - case MRSS_ELEMENT_TAG: - err = __mrss_set_tag ((mrss_tag_t *) data, va); - break; - - case MRSS_ELEMENT_ATTRIBUTE: - err = __mrss_set_attribute ((mrss_attribute_t *) data, va); - break; - - default: - err = MRSS_ERR_DATA; - break; - } - - va_end (va); - return err; -} - -static mrss_error_t -__mrss_set_channel (mrss_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_VERSION: - if ((mrss_version_t) value != MRSS_VERSION_0_91 && - (mrss_version_t) value != MRSS_VERSION_0_92 && - (mrss_version_t) value != MRSS_VERSION_2_0) - return MRSS_ERR_DATA; - - data->version = (mrss_version_t) value; - break; - - case MRSS_FLAG_TITLE: - __MRSS_SET_STRING (data->title); - break; - - case MRSS_FLAG_TITLE_TYPE: - __MRSS_SET_STRING (data->title_type); - break; - - case MRSS_FLAG_DESCRIPTION: - __MRSS_SET_STRING (data->description); - break; - - case MRSS_FLAG_DESCRIPTION_TYPE: - __MRSS_SET_STRING (data->description_type); - break; - - case MRSS_FLAG_LINK: - __MRSS_SET_STRING (data->link); - break; - - case MRSS_FLAG_ID: - __MRSS_SET_STRING (data->id); - break; - - case MRSS_FLAG_LANGUAGE: - __MRSS_SET_STRING (data->language); - break; - - case MRSS_FLAG_RATING: - __MRSS_SET_STRING (data->rating); - break; - - case MRSS_FLAG_COPYRIGHT: - __MRSS_SET_STRING (data->copyright); - break; - - case MRSS_FLAG_COPYRIGHT_TYPE: - __MRSS_SET_STRING (data->copyright_type); - break; - - case MRSS_FLAG_PUBDATE: - __MRSS_SET_STRING (data->pubDate); - break; - - case MRSS_FLAG_LASTBUILDDATE: - __MRSS_SET_STRING (data->lastBuildDate); - break; - - case MRSS_FLAG_DOCS: - __MRSS_SET_STRING (data->docs); - break; - - case MRSS_FLAG_MANAGINGEDITOR: - __MRSS_SET_STRING (data->managingeditor); - break; - - case MRSS_FLAG_MANAGINGEDITOR_EMAIL: - __MRSS_SET_STRING (data->managingeditor_email); - break; - - case MRSS_FLAG_MANAGINGEDITOR_URI: - __MRSS_SET_STRING (data->managingeditor_uri); - break; - - case MRSS_FLAG_WEBMASTER: - __MRSS_SET_STRING (data->webMaster); - break; - - case MRSS_FLAG_TTL: - __MRSS_SET_INTEGER (data->ttl); - break; - - case MRSS_FLAG_ABOUT: - __MRSS_SET_STRING (data->about); - break; - - case MRSS_FLAG_CONTRIBUTOR: - __MRSS_SET_STRING (data->contributor); - break; - - case MRSS_FLAG_CONTRIBUTOR_EMAIL: - __MRSS_SET_STRING (data->contributor_email); - break; - - case MRSS_FLAG_CONTRIBUTOR_URI: - __MRSS_SET_STRING (data->contributor_uri); - break; - - case MRSS_FLAG_GENERATOR: - __MRSS_SET_STRING (data->generator); - break; - - case MRSS_FLAG_GENERATOR_URI: - __MRSS_SET_STRING (data->generator_uri); - break; - - case MRSS_FLAG_GENERATOR_VERSION: - __MRSS_SET_STRING (data->generator_version); - break; - - case MRSS_FLAG_IMAGE_TITLE: - __MRSS_SET_STRING (data->image_title); - break; - - case MRSS_FLAG_IMAGE_URL: - __MRSS_SET_STRING (data->image_url); - break; - - case MRSS_FLAG_IMAGE_LOGO: - __MRSS_SET_STRING (data->image_logo); - break; - - case MRSS_FLAG_IMAGE_LINK: - __MRSS_SET_STRING (data->image_link); - break; - - case MRSS_FLAG_IMAGE_WIDTH: - __MRSS_SET_INTEGER (data->image_width); - break; - - case MRSS_FLAG_IMAGE_HEIGHT: - __MRSS_SET_INTEGER (data->image_height); - break; - - case MRSS_FLAG_IMAGE_DESCRIPTION: - __MRSS_SET_STRING (data->image_description); - break; - - case MRSS_FLAG_TEXTINPUT_TITLE: - __MRSS_SET_STRING (data->textinput_title); - break; - - case MRSS_FLAG_TEXTINPUT_DESCRIPTION: - __MRSS_SET_STRING (data->textinput_description); - break; - - case MRSS_FLAG_TEXTINPUT_NAME: - __MRSS_SET_STRING (data->textinput_name); - break; - - case MRSS_FLAG_TEXTINPUT_LINK: - __MRSS_SET_STRING (data->textinput_link); - break; - - case MRSS_FLAG_CLOUD: - __MRSS_SET_STRING (data->cloud); - break; - - case MRSS_FLAG_CLOUD_DOMAIN: - __MRSS_SET_STRING (data->cloud_domain); - break; - - case MRSS_FLAG_CLOUD_PORT: - __MRSS_SET_INTEGER (data->cloud_port); - break; - - case MRSS_FLAG_CLOUD_PATH: - __MRSS_SET_STRING (data->cloud_path); - break; - - case MRSS_FLAG_CLOUD_REGISTERPROCEDURE: - __MRSS_SET_STRING (data->cloud_registerProcedure); - break; - - case MRSS_FLAG_CLOUD_PROTOCOL: - __MRSS_SET_STRING (data->cloud_protocol); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_hour (mrss_hour_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_HOUR: - __MRSS_SET_STRING (data->hour); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_day (mrss_day_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_DAY: - __MRSS_SET_STRING (data->day); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_category (mrss_category_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_CATEGORY: - __MRSS_SET_STRING (data->category); - break; - - case MRSS_FLAG_CATEGORY_DOMAIN: - __MRSS_SET_STRING (data->domain); - break; - - case MRSS_FLAG_CATEGORY_LABEL: - __MRSS_SET_STRING (data->label); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_tag (mrss_tag_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_TAG_NAME: - __MRSS_SET_STRING (data->name); - break; - - case MRSS_FLAG_TAG_VALUE: - __MRSS_SET_STRING (data->value); - break; - - case MRSS_FLAG_TAG_NS: - __MRSS_SET_STRING (data->ns); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_attribute (mrss_attribute_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_ATTRIBUTE_NAME: - __MRSS_SET_STRING (data->name); - break; - - case MRSS_FLAG_ATTRIBUTE_VALUE: - __MRSS_SET_STRING (data->value); - break; - - case MRSS_FLAG_ATTRIBUTE_NS: - __MRSS_SET_STRING (data->ns); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_set_item (mrss_item_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_ITEM_TITLE: - __MRSS_SET_STRING (data->title); - break; - - case MRSS_FLAG_ITEM_TITLE_TYPE: - __MRSS_SET_STRING (data->title_type); - break; - - case MRSS_FLAG_ITEM_LINK: - __MRSS_SET_STRING (data->link); - break; - - case MRSS_FLAG_ITEM_DESCRIPTION: - __MRSS_SET_STRING (data->description); - break; - - case MRSS_FLAG_ITEM_DESCRIPTION_TYPE: - __MRSS_SET_STRING (data->description_type); - break; - - case MRSS_FLAG_ITEM_COPYRIGHT: - __MRSS_SET_STRING (data->copyright); - break; - - case MRSS_FLAG_ITEM_COPYRIGHT_TYPE: - __MRSS_SET_STRING (data->copyright_type); - break; - - case MRSS_FLAG_ITEM_AUTHOR: - __MRSS_SET_STRING (data->author); - break; - - case MRSS_FLAG_ITEM_AUTHOR_EMAIL: - __MRSS_SET_STRING (data->author_email); - break; - - case MRSS_FLAG_ITEM_AUTHOR_URI: - __MRSS_SET_STRING (data->author_uri); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR: - __MRSS_SET_STRING (data->contributor); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR_EMAIL: - __MRSS_SET_STRING (data->contributor_email); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR_URI: - __MRSS_SET_STRING (data->contributor_uri); - break; - - case MRSS_FLAG_ITEM_COMMENTS: - __MRSS_SET_STRING (data->comments); - break; - - case MRSS_FLAG_ITEM_PUBDATE: - __MRSS_SET_STRING (data->pubDate); - break; - - case MRSS_FLAG_ITEM_GUID: - __MRSS_SET_STRING (data->guid); - break; - - case MRSS_FLAG_ITEM_GUID_ISPERMALINK: - __MRSS_SET_INTEGER (data->guid_isPermaLink); - break; - - case MRSS_FLAG_ITEM_SOURCE: - __MRSS_SET_STRING (data->source); - break; - - case MRSS_FLAG_ITEM_SOURCE_URL: - __MRSS_SET_STRING (data->source_url); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE: - __MRSS_SET_STRING (data->enclosure); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_URL: - __MRSS_SET_STRING (data->enclosure_url); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_LENGTH: - __MRSS_SET_INTEGER (data->enclosure_length); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_TYPE: - __MRSS_SET_STRING (data->enclosure_type); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -mrss_error_t -mrss_get (mrss_generic_t data, ...) -{ - va_list va; - mrss_error_t err; - mrss_t *tmp; - - if (!data) - return MRSS_ERR_DATA; - - va_start (va, data); - - tmp = (mrss_t *) data; - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - err = __mrss_get_channel ((mrss_t *) data, va); - break; - - case MRSS_ELEMENT_ITEM: - err = __mrss_get_item ((mrss_item_t *) data, va); - break; - - case MRSS_ELEMENT_SKIPHOURS: - err = __mrss_get_hour ((mrss_hour_t *) data, va); - break; - - case MRSS_ELEMENT_SKIPDAYS: - err = __mrss_get_day ((mrss_day_t *) data, va); - break; - - case MRSS_ELEMENT_CATEGORY: - err = __mrss_get_category ((mrss_category_t *) data, va); - break; - - case MRSS_ELEMENT_TAG: - err = __mrss_get_tag ((mrss_tag_t *) data, va); - break; - - case MRSS_ELEMENT_ATTRIBUTE: - err = __mrss_get_attribute ((mrss_attribute_t *) data, va); - break; - - default: - err = MRSS_ERR_DATA; - break; - } - - va_end (va); - return err; -} - -static mrss_error_t -__mrss_get_channel (mrss_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - int *integer; - mrss_version_t *version; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_VERSION: - version = value; - *version = data->version; - break; - - case MRSS_FLAG_TITLE: - __MRSS_GET_STRING (data->title); - break; - - case MRSS_FLAG_TITLE_TYPE: - __MRSS_GET_STRING (data->title_type); - break; - - case MRSS_FLAG_DESCRIPTION: - __MRSS_GET_STRING (data->description); - break; - - case MRSS_FLAG_DESCRIPTION_TYPE: - __MRSS_GET_STRING (data->description_type); - break; - - case MRSS_FLAG_LINK: - __MRSS_GET_STRING (data->link); - break; - - case MRSS_FLAG_ID: - __MRSS_GET_STRING (data->id); - break; - - case MRSS_FLAG_LANGUAGE: - __MRSS_GET_STRING (data->language); - break; - - case MRSS_FLAG_RATING: - __MRSS_GET_STRING (data->rating); - break; - - case MRSS_FLAG_COPYRIGHT: - __MRSS_GET_STRING (data->copyright); - break; - - case MRSS_FLAG_COPYRIGHT_TYPE: - __MRSS_GET_STRING (data->copyright_type); - break; - - case MRSS_FLAG_PUBDATE: - __MRSS_GET_STRING (data->pubDate); - break; - - case MRSS_FLAG_LASTBUILDDATE: - __MRSS_GET_STRING (data->lastBuildDate); - break; - - case MRSS_FLAG_DOCS: - __MRSS_GET_STRING (data->docs); - break; - - case MRSS_FLAG_MANAGINGEDITOR: - __MRSS_GET_STRING (data->managingeditor); - break; - - case MRSS_FLAG_MANAGINGEDITOR_EMAIL: - __MRSS_GET_STRING (data->managingeditor_email); - break; - - case MRSS_FLAG_MANAGINGEDITOR_URI: - __MRSS_GET_STRING (data->managingeditor_uri); - break; - - case MRSS_FLAG_WEBMASTER: - __MRSS_GET_STRING (data->webMaster); - break; - - case MRSS_FLAG_TTL: - __MRSS_GET_INTEGER (data->ttl); - break; - - case MRSS_FLAG_ABOUT: - __MRSS_GET_STRING (data->about); - break; - - case MRSS_FLAG_CONTRIBUTOR: - __MRSS_GET_STRING (data->contributor); - break; - - case MRSS_FLAG_CONTRIBUTOR_EMAIL: - __MRSS_GET_STRING (data->contributor_email); - break; - - case MRSS_FLAG_CONTRIBUTOR_URI: - __MRSS_GET_STRING (data->contributor_uri); - break; - - case MRSS_FLAG_GENERATOR: - __MRSS_GET_STRING (data->generator); - break; - - case MRSS_FLAG_GENERATOR_URI: - __MRSS_GET_STRING (data->generator_uri); - break; - - case MRSS_FLAG_GENERATOR_VERSION: - __MRSS_GET_STRING (data->generator_version); - break; - - case MRSS_FLAG_IMAGE_TITLE: - __MRSS_GET_STRING (data->image_title); - break; - - case MRSS_FLAG_IMAGE_URL: - __MRSS_GET_STRING (data->image_url); - break; - - case MRSS_FLAG_IMAGE_LOGO: - __MRSS_GET_STRING (data->image_logo); - break; - - case MRSS_FLAG_IMAGE_LINK: - __MRSS_GET_STRING (data->image_link); - break; - - case MRSS_FLAG_IMAGE_WIDTH: - __MRSS_GET_INTEGER (data->image_width); - break; - - case MRSS_FLAG_IMAGE_HEIGHT: - __MRSS_GET_INTEGER (data->image_height); - break; - - case MRSS_FLAG_IMAGE_DESCRIPTION: - __MRSS_GET_STRING (data->image_description); - break; - - case MRSS_FLAG_TEXTINPUT_TITLE: - __MRSS_GET_STRING (data->textinput_title); - break; - - case MRSS_FLAG_TEXTINPUT_DESCRIPTION: - __MRSS_GET_STRING (data->textinput_description); - break; - - case MRSS_FLAG_TEXTINPUT_NAME: - __MRSS_GET_STRING (data->textinput_name); - break; - - case MRSS_FLAG_TEXTINPUT_LINK: - __MRSS_GET_STRING (data->textinput_link); - break; - - case MRSS_FLAG_CLOUD: - __MRSS_GET_STRING (data->cloud); - break; - - case MRSS_FLAG_CLOUD_DOMAIN: - __MRSS_GET_STRING (data->cloud_domain); - break; - - case MRSS_FLAG_CLOUD_PORT: - __MRSS_GET_INTEGER (data->cloud_port); - break; - - case MRSS_FLAG_CLOUD_PATH: - __MRSS_GET_STRING (data->cloud_path); - break; - - case MRSS_FLAG_CLOUD_REGISTERPROCEDURE: - __MRSS_GET_STRING (data->cloud_registerProcedure); - break; - - case MRSS_FLAG_CLOUD_PROTOCOL: - __MRSS_GET_STRING (data->cloud_protocol); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_hour (mrss_hour_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_HOUR: - __MRSS_GET_STRING (data->hour); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_day (mrss_day_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_DAY: - __MRSS_GET_STRING (data->day); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_category (mrss_category_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_CATEGORY: - __MRSS_GET_STRING (data->category); - break; - - case MRSS_FLAG_CATEGORY_DOMAIN: - __MRSS_GET_STRING (data->domain); - break; - - case MRSS_FLAG_CATEGORY_LABEL: - __MRSS_GET_STRING (data->label); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_tag (mrss_tag_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_TAG_NAME: - __MRSS_GET_STRING (data->name); - break; - - case MRSS_FLAG_TAG_VALUE: - __MRSS_GET_STRING (data->value); - break; - - case MRSS_FLAG_TAG_NS: - __MRSS_GET_STRING (data->ns); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_attribute (mrss_attribute_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_ATTRIBUTE_NAME: - __MRSS_GET_STRING (data->name); - break; - - case MRSS_FLAG_ATTRIBUTE_VALUE: - __MRSS_GET_STRING (data->value); - break; - - case MRSS_FLAG_ATTRIBUTE_NS: - __MRSS_GET_STRING (data->ns); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_get_item (mrss_item_t * data, va_list va) -{ - mrss_flag_t flag; - void *value; - char **string; - int *integer; - - while ((flag = va_arg (va, mrss_flag_t))) - { - value = va_arg (va, void *); - - switch (flag) - { - case MRSS_FLAG_ITEM_TITLE: - __MRSS_GET_STRING (data->title); - break; - - case MRSS_FLAG_ITEM_TITLE_TYPE: - __MRSS_GET_STRING (data->title_type); - break; - - case MRSS_FLAG_ITEM_LINK: - __MRSS_GET_STRING (data->link); - break; - - case MRSS_FLAG_ITEM_DESCRIPTION: - __MRSS_GET_STRING (data->description); - break; - - case MRSS_FLAG_ITEM_DESCRIPTION_TYPE: - __MRSS_GET_STRING (data->description_type); - break; - - case MRSS_FLAG_ITEM_COPYRIGHT: - __MRSS_GET_STRING (data->copyright); - break; - - case MRSS_FLAG_ITEM_COPYRIGHT_TYPE: - __MRSS_GET_STRING (data->copyright_type); - break; - - case MRSS_FLAG_ITEM_AUTHOR: - __MRSS_GET_STRING (data->author); - break; - - case MRSS_FLAG_ITEM_AUTHOR_EMAIL: - __MRSS_GET_STRING (data->author_email); - break; - - case MRSS_FLAG_ITEM_AUTHOR_URI: - __MRSS_GET_STRING (data->author_uri); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR: - __MRSS_GET_STRING (data->contributor); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR_EMAIL: - __MRSS_GET_STRING (data->contributor_email); - break; - - case MRSS_FLAG_ITEM_CONTRIBUTOR_URI: - __MRSS_GET_STRING (data->contributor_uri); - break; - - case MRSS_FLAG_ITEM_COMMENTS: - __MRSS_GET_STRING (data->comments); - break; - - case MRSS_FLAG_ITEM_PUBDATE: - __MRSS_GET_STRING (data->pubDate); - break; - - case MRSS_FLAG_ITEM_GUID: - __MRSS_GET_STRING (data->guid); - break; - - case MRSS_FLAG_ITEM_GUID_ISPERMALINK: - __MRSS_GET_INTEGER (data->guid_isPermaLink); - break; - - case MRSS_FLAG_ITEM_SOURCE: - __MRSS_GET_STRING (data->source); - break; - - case MRSS_FLAG_ITEM_SOURCE_URL: - __MRSS_GET_STRING (data->source_url); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE: - __MRSS_GET_STRING (data->enclosure); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_URL: - __MRSS_GET_STRING (data->enclosure_url); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_LENGTH: - __MRSS_GET_INTEGER (data->enclosure_length); - break; - - case MRSS_FLAG_ITEM_ENCLOSURE_TYPE: - __MRSS_GET_STRING (data->enclosure_type); - break; - - default: - return MRSS_ERR_DATA; - } - } - - return MRSS_OK; -} - -mrss_error_t -mrss_new_subdata (mrss_generic_t data, mrss_element_t element, - mrss_generic_t new) -{ - mrss_t *tmp; - - if (!data || !new) - return MRSS_ERR_DATA; - - tmp = (mrss_t *) data; - - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - return __mrss_new_subdata_channel ((mrss_t *) data, element, new); - - case MRSS_ELEMENT_ITEM: - return __mrss_new_subdata_item ((mrss_item_t *) data, element, new); - - case MRSS_ELEMENT_TAG: - return __mrss_new_subdata_tag ((mrss_tag_t *) data, element, new); - - default: - return MRSS_ERR_DATA; - } -} - -static mrss_error_t -__mrss_new_subdata_channel (mrss_t * mrss, mrss_element_t element, - mrss_generic_t data) -{ - mrss_item_t **item; - mrss_hour_t **hour; - mrss_day_t **day; - mrss_category_t **category; - mrss_tag_t **tag; - int allocated; - - switch (element) - { - case MRSS_ELEMENT_ITEM: - item = (mrss_item_t **) data; - - if (!*item) - { - if (!(*item = (mrss_item_t *) malloc (sizeof (mrss_item_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*item, 0, sizeof (mrss_item_t)); - - (*item)->element = MRSS_ELEMENT_ITEM; - (*item)->allocated = allocated; - (*item)->next = mrss->item; - mrss->item = (*item); - - break; - - case MRSS_ELEMENT_SKIPHOURS: - hour = (mrss_hour_t **) data; - - if (!*hour) - { - if (!(*hour = (mrss_hour_t *) malloc (sizeof (mrss_hour_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*hour, 0, sizeof (mrss_hour_t)); - - (*hour)->element = MRSS_ELEMENT_SKIPHOURS; - (*hour)->allocated = allocated; - (*hour)->next = mrss->skipHours; - mrss->skipHours = (*hour); - - break; - - case MRSS_ELEMENT_SKIPDAYS: - day = (mrss_day_t **) data; - - if (!*day) - { - if (!(*day = (mrss_day_t *) malloc (sizeof (mrss_day_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*day, 0, sizeof (mrss_day_t)); - - (*day)->element = MRSS_ELEMENT_SKIPDAYS; - (*day)->allocated = allocated; - (*day)->next = mrss->skipDays; - mrss->skipDays = (*day); - - break; - - case MRSS_ELEMENT_CATEGORY: - category = (mrss_category_t **) data; - - if (!*category) - { - if (! - (*category = - (mrss_category_t *) malloc (sizeof (mrss_category_t)))) - return MRSS_ERR_POSIX; - allocated = 1; - } - else - allocated = 0; - - memset (*category, 0, sizeof (mrss_category_t)); - - (*category)->element = MRSS_ELEMENT_CATEGORY; - (*category)->allocated = allocated; - (*category)->next = mrss->category; - mrss->category = (*category); - - break; - - case MRSS_ELEMENT_TAG: - tag = (mrss_tag_t **) data; - - if (!*tag) - { - if (!(*tag = (mrss_tag_t *) malloc (sizeof (mrss_tag_t)))) - return MRSS_ERR_POSIX; - allocated = 1; - } - else - allocated = 0; - - memset (*tag, 0, sizeof (mrss_tag_t)); - - (*tag)->element = MRSS_ELEMENT_TAG; - (*tag)->allocated = allocated; - (*tag)->next = mrss->other_tags; - mrss->other_tags = (*tag); - - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_new_subdata_item (mrss_item_t * item, mrss_element_t element, - mrss_generic_t data) -{ - mrss_category_t **category; - mrss_tag_t **tag; - int allocated; - - switch (element) - { - case MRSS_ELEMENT_CATEGORY: - category = (mrss_category_t **) data; - - if (!*category) - { - if (! - (*category = - (mrss_category_t *) malloc (sizeof (mrss_category_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*category, 0, sizeof (mrss_category_t)); - - (*category)->element = MRSS_ELEMENT_CATEGORY; - (*category)->allocated = allocated; - (*category)->next = item->category; - item->category = (*category); - - break; - - case MRSS_ELEMENT_TAG: - tag = (mrss_tag_t **) data; - - if (!*tag) - { - if (!(*tag = (mrss_tag_t *) malloc (sizeof (mrss_tag_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*tag, 0, sizeof (mrss_tag_t)); - - (*tag)->element = MRSS_ELEMENT_TAG; - (*tag)->allocated = allocated; - (*tag)->next = item->other_tags; - item->other_tags = (*tag); - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_new_subdata_tag (mrss_tag_t * tag, mrss_element_t element, - mrss_generic_t data) -{ - mrss_tag_t **new; - mrss_attribute_t **attribute; - int allocated; - - switch (element) - { - case MRSS_ELEMENT_TAG: - new = (mrss_tag_t **) data; - - if (!*new) - { - if (!(*new = (mrss_tag_t *) malloc (sizeof (mrss_tag_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*new, 0, sizeof (mrss_tag_t)); - - (*new)->element = MRSS_ELEMENT_TAG; - (*new)->allocated = allocated; - (*new)->next = tag->children; - tag->children = (*new); - - break; - - case MRSS_ELEMENT_ATTRIBUTE: - attribute = (mrss_attribute_t **) data; - - if (!*attribute) - { - if (! - (*attribute = - (mrss_attribute_t *) malloc (sizeof (mrss_attribute_t)))) - return MRSS_ERR_POSIX; - - allocated = 1; - } - else - allocated = 0; - - memset (*attribute, 0, sizeof (mrss_attribute_t)); - - (*attribute)->element = MRSS_ELEMENT_ATTRIBUTE; - (*attribute)->allocated = allocated; - (*attribute)->next = tag->attributes; - tag->attributes = (*attribute); - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -mrss_error_t -mrss_remove_subdata (mrss_generic_t data, mrss_generic_t subdata) -{ - mrss_t *tmp; - - if (!data || !subdata) - return MRSS_ERR_DATA; - - tmp = (mrss_t *) data; - - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - return __mrss_remove_subdata_channel ((mrss_t *) data, subdata); - - case MRSS_ELEMENT_ITEM: - return __mrss_remove_subdata_item ((mrss_item_t *) data, subdata); - - case MRSS_ELEMENT_TAG: - return __mrss_remove_subdata_tag ((mrss_tag_t *) data, subdata); - - default: - return MRSS_ERR_DATA; - } -} - -static mrss_error_t -__mrss_remove_subdata_channel (mrss_t * data, mrss_generic_t subdata) -{ - mrss_hour_t *hour, *hour_tmp, *hour_old; - mrss_day_t *day, *day_tmp, *day_old; - mrss_category_t *category, *category_tmp, *category_old; - mrss_item_t *item, *item_tmp, *item_old; - mrss_tag_t *tag, *tag_tmp, *tag_old; - - int found = 0; - - mrss_t *tmp = (mrss_t *) subdata; - - switch (tmp->element) - { - case MRSS_ELEMENT_ITEM: - item = (mrss_item_t *) subdata; - - item_tmp = data->item; - item_old = NULL; - - while (item_tmp) - { - if (item_tmp == item) - { - found++; - - if (item_old) - item_old->next = item_tmp->next; - else - data->item = item_tmp->next; - - break; - } - - item_old = item_tmp; - item_tmp = item_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_SKIPHOURS: - hour = (mrss_hour_t *) subdata; - - hour_tmp = data->skipHours; - hour_old = NULL; - - while (hour_tmp) - { - if (hour_tmp == hour) - { - found++; - - if (hour_old) - hour_old->next = hour_tmp->next; - else - data->skipHours = hour_tmp->next; - - break; - } - - hour_old = hour_tmp; - hour_tmp = hour_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_SKIPDAYS: - day = (mrss_day_t *) subdata; - - day_tmp = data->skipDays; - day_old = NULL; - - while (day_tmp) - { - if (day_tmp == day) - { - found++; - - if (day_old) - day_old->next = day_tmp->next; - else - data->skipDays = day_tmp->next; - - break; - } - - day_old = day_tmp; - day_tmp = day_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_CATEGORY: - category = (mrss_category_t *) subdata; - - category_tmp = data->category; - category_old = NULL; - - while (category_tmp) - { - if (category_tmp == category) - { - found++; - - if (category_old) - category_old->next = category_tmp->next; - else - data->category = category_tmp->next; - - break; - } - - category_old = category_tmp; - category_tmp = category_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_TAG: - tag = (mrss_tag_t *) subdata; - - tag_tmp = data->other_tags; - tag_old = NULL; - - while (tag_tmp) - { - if (tag_tmp == tag) - { - found++; - - if (tag_old) - tag_old->next = tag_tmp->next; - else - data->other_tags = tag_tmp->next; - - break; - } - - tag_old = tag_tmp; - tag_tmp = tag_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_remove_subdata_item (mrss_item_t * data, mrss_generic_t subdata) -{ - mrss_category_t *category, *category_tmp, *category_old; - mrss_tag_t *tag, *tag_tmp, *tag_old; - - int found = 0; - - mrss_t *tmp = (mrss_t *) subdata; - - switch (tmp->element) - { - case MRSS_ELEMENT_CATEGORY: - category = (mrss_category_t *) subdata; - - category_tmp = data->category; - category_old = NULL; - - while (category_tmp) - { - if (category_tmp == category) - { - found++; - - if (category_old) - category_old->next = category_tmp->next; - else - data->category = category_tmp->next; - - break; - } - - category_old = category_tmp; - category_tmp = category_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_TAG: - tag = (mrss_tag_t *) subdata; - - tag_tmp = data->other_tags; - tag_old = NULL; - - while (tag_tmp) - { - if (tag_tmp == tag) - { - found++; - - if (tag_old) - tag_old->next = tag_tmp->next; - else - data->other_tags = tag_tmp->next; - - break; - } - - tag_old = tag_tmp; - tag_tmp = tag_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -static mrss_error_t -__mrss_remove_subdata_tag (mrss_tag_t * data, mrss_generic_t subdata) -{ - mrss_attribute_t *attribute, *attribute_tmp, *attribute_old; - mrss_tag_t *tag, *tag_tmp, *tag_old; - - int found = 0; - - mrss_t *tmp = (mrss_t *) subdata; - - switch (tmp->element) - { - case MRSS_ELEMENT_TAG: - tag = (mrss_tag_t *) subdata; - - tag_tmp = data->children; - tag_old = NULL; - - while (tag_tmp) - { - if (tag_tmp == tag) - { - found++; - - if (tag_old) - tag_old->next = tag_tmp->next; - else - data->children = tag_tmp->next; - - break; - } - - tag_old = tag_tmp; - tag_tmp = tag_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - case MRSS_ELEMENT_ATTRIBUTE: - attribute = (mrss_attribute_t *) subdata; - - attribute_tmp = data->attributes; - attribute_old = NULL; - - while (attribute_tmp) - { - if (attribute_tmp == attribute) - { - found++; - - if (attribute_old) - attribute_old->next = attribute_tmp->next; - else - data->attributes = attribute_tmp->next; - - break; - } - - attribute_old = attribute_tmp; - attribute_tmp = attribute_tmp->next; - } - - if (!found) - return MRSS_ERR_DATA; - - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_free.c b/plugins/backend/local/libmrss/mrss_free.c deleted file mode 100644 index e11c4c9b..00000000 --- a/plugins/backend/local/libmrss/mrss_free.c +++ /dev/null @@ -1,464 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -static void __mrss_free_channel (mrss_t * mrss); -static void __mrss_free_category (mrss_category_t * category); -static void __mrss_free_hour (mrss_hour_t * hour); -static void __mrss_free_day (mrss_day_t * day); -static void __mrss_free_item (mrss_item_t * item); -static void __mrss_free_tag (mrss_tag_t * tag); -static void __mrss_free_attribute (mrss_attribute_t * attribute); - -static void -__mrss_free_channel (mrss_t * mrss) -{ - mrss_hour_t *hour; - mrss_day_t *day; - mrss_category_t *category; - mrss_item_t *item; - mrss_tag_t *tag; - void *old; - - if (!mrss) - return; - - if (mrss->file) - free (mrss->file); - - if (mrss->encoding) - free (mrss->encoding); - - if (mrss->title) - free (mrss->title); - - if (mrss->title_type) - free (mrss->title_type); - - if (mrss->description) - free (mrss->description); - - if (mrss->description_type) - free (mrss->description_type); - - if (mrss->link) - free (mrss->link); - - if (mrss->id) - free (mrss->id); - - if (mrss->language) - free (mrss->language); - - if (mrss->rating) - free (mrss->rating); - - if (mrss->copyright) - free (mrss->copyright); - - if (mrss->copyright_type) - free (mrss->copyright_type); - - if (mrss->pubDate) - free (mrss->pubDate); - - if (mrss->lastBuildDate) - free (mrss->lastBuildDate); - - if (mrss->docs) - free (mrss->docs); - - if (mrss->managingeditor) - free (mrss->managingeditor); - - if (mrss->managingeditor_email) - free (mrss->managingeditor_email); - - if (mrss->managingeditor_uri) - free (mrss->managingeditor_uri); - - if (mrss->webMaster) - free (mrss->webMaster); - - if (mrss->about) - free (mrss->about); - - if (mrss->contributor) - free (mrss->contributor); - - if (mrss->contributor_email) - free (mrss->contributor_email); - - if (mrss->contributor_uri) - free (mrss->contributor_uri); - - if (mrss->generator) - free (mrss->generator); - - if (mrss->generator_uri) - free (mrss->generator_uri); - - if (mrss->generator_version) - free (mrss->generator_version); - - if (mrss->image_title) - free (mrss->image_title); - - if (mrss->image_url) - free (mrss->image_url); - - if (mrss->image_logo) - free (mrss->image_logo); - - if (mrss->image_link) - free (mrss->image_link); - - if (mrss->image_description) - free (mrss->image_description); - - if (mrss->textinput_title) - free (mrss->textinput_title); - - if (mrss->textinput_description) - free (mrss->textinput_description); - - if (mrss->textinput_name) - free (mrss->textinput_name); - - if (mrss->textinput_link) - free (mrss->textinput_link); - - if (mrss->cloud) - free (mrss->cloud); - - if (mrss->cloud_domain) - free (mrss->cloud_domain); - - if (mrss->cloud_path) - free (mrss->cloud_path); - - if (mrss->cloud_registerProcedure) - free (mrss->cloud_registerProcedure); - - if (mrss->cloud_protocol) - free (mrss->cloud_protocol); - - category = mrss->category; - while (category) - { - old = category; - category = category->next; - - __mrss_free_category ((mrss_category_t *) old); - } - - tag = mrss->other_tags; - while (tag) - { - old = tag; - tag = tag->next; - - __mrss_free_tag ((mrss_tag_t *) old); - } - - hour = mrss->skipHours; - while (hour) - { - old = hour; - hour = hour->next; - - __mrss_free_hour ((mrss_hour_t *) old); - } - - day = mrss->skipDays; - while (day) - { - old = day; - day = day->next; - - __mrss_free_day ((mrss_day_t *) old); - } - - item = mrss->item; - while (item) - { - old = item; - item = item->next; - - __mrss_free_item ((mrss_item_t *) old); - } - - if (mrss->c_locale) - freelocale (mrss->c_locale); - - if (mrss->allocated) - free (mrss); -} - -static void -__mrss_free_tag (mrss_tag_t * tag) -{ - mrss_attribute_t *attribute; - mrss_tag_t *child; - void *old; - - if (!tag) - return; - - if (tag->name) - free (tag->name); - - if (tag->value) - free (tag->value); - - if (tag->ns) - free (tag->ns); - - attribute = tag->attributes; - while (attribute) - { - old = attribute; - attribute = attribute->next; - - __mrss_free_attribute ((mrss_attribute_t *) old); - } - - child = tag->children; - while (child) - { - old = child; - child = child->next; - - __mrss_free_tag ((mrss_tag_t *) old); - } - - if (tag->allocated) - free (tag); -} - -static void -__mrss_free_attribute (mrss_attribute_t * attribute) -{ - if (!attribute) - return; - - if (attribute->name) - free (attribute->name); - - if (attribute->value) - free (attribute->value); - - if (attribute->ns) - free (attribute->ns); - - if (attribute->allocated) - free (attribute); -} - -static void -__mrss_free_category (mrss_category_t * category) -{ - if (!category) - return; - - if (category->category) - free (category->category); - - if (category->domain) - free (category->domain); - - if (category->label) - free (category->label); - - if (category->allocated) - free (category); -} - -static void -__mrss_free_hour (mrss_hour_t * hour) -{ - if (!hour) - return; - - if (hour->hour) - free (hour->hour); - - if (hour->allocated) - free (hour); -} - -static void -__mrss_free_day (mrss_day_t * day) -{ - if (!day) - return; - - if (day->day) - free (day->day); - - if (day->allocated) - free (day); -} - -static void -__mrss_free_item (mrss_item_t * item) -{ - mrss_category_t *category; - mrss_tag_t *tag; - void *old; - - if (!item) - return; - - if (item->title) - free (item->title); - - if (item->title_type) - free (item->title_type); - - if (item->link) - free (item->link); - - if (item->description) - free (item->description); - - if (item->description_type) - free (item->description_type); - - if (item->copyright) - free (item->copyright); - - if (item->copyright_type) - free (item->copyright_type); - - if (item->author) - free (item->author); - - if (item->author_email) - free (item->author_email); - - if (item->author_uri) - free (item->author_uri); - - if (item->contributor) - free (item->contributor); - - if (item->contributor_email) - free (item->contributor_email); - - if (item->contributor_uri) - free (item->contributor_uri); - - if (item->comments) - free (item->comments); - - if (item->pubDate) - free (item->pubDate); - - if (item->guid) - free (item->guid); - - if (item->source) - free (item->source); - - if (item->source_url) - free (item->source_url); - - if (item->enclosure) - free (item->enclosure); - - if (item->enclosure_url) - free (item->enclosure_url); - - if (item->enclosure_type) - free (item->enclosure_type); - - category = item->category; - while (category) - { - old = category; - category = category->next; - - __mrss_free_category ((mrss_category_t *) old); - } - - tag = item->other_tags; - while (tag) - { - old = tag; - tag = tag->next; - - __mrss_free_tag ((mrss_tag_t *) old); - } - - if (item->allocated) - free (item); -} - -/*************************** EXTERNAL FUNCTION ******************************/ - -mrss_error_t -mrss_free (mrss_generic_t element) -{ - mrss_t *tmp; - - tmp = (mrss_t *) element; - - if (!tmp) - return MRSS_OK; - - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - __mrss_free_channel ((mrss_t *) element); - break; - - case MRSS_ELEMENT_ITEM: - __mrss_free_item ((mrss_item_t *) element); - break; - - case MRSS_ELEMENT_SKIPHOURS: - __mrss_free_hour ((mrss_hour_t *) element); - break; - - case MRSS_ELEMENT_SKIPDAYS: - __mrss_free_day ((mrss_day_t *) element); - break; - - case MRSS_ELEMENT_CATEGORY: - __mrss_free_category ((mrss_category_t *) element); - break; - - case MRSS_ELEMENT_TAG: - __mrss_free_tag ((mrss_tag_t *) element); - break; - - case MRSS_ELEMENT_ATTRIBUTE: - __mrss_free_attribute ((mrss_attribute_t *) element); - break; - - default: - return MRSS_ERR_DATA; - } - - return MRSS_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_generic.c b/plugins/backend/local/libmrss/mrss_generic.c deleted file mode 100644 index ec4e458d..00000000 --- a/plugins/backend/local/libmrss/mrss_generic.c +++ /dev/null @@ -1,146 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -char * -mrss_strerror (mrss_error_t err) -{ - switch (err) - { - case MRSS_OK: - return "Success"; - - case MRSS_ERR_PARSER: - return "Parser error"; - - case MRSS_ERR_DOWNLOAD: - return "Download error"; - - case MRSS_ERR_VERSION: - return "Version error"; - - case MRSS_ERR_DATA: - return "No correct paramenter in the function"; - - default: - return strerror (errno); - } -} - -char * -mrss_curl_strerror (CURLcode err) -{ - return (char *) curl_easy_strerror (err); -} - -mrss_error_t -mrss_element (mrss_generic_t element, mrss_element_t * ret) -{ - mrss_t *tmp; - - if (!element || !ret) - return MRSS_ERR_DATA; - - tmp = (mrss_t *) element; - *ret = tmp->element; - return MRSS_OK; -} - -static size_t -__mrss_get_last_modified_header (void *ptr, size_t size, size_t nmemb, - time_t * timing) -{ - char *header = (char *) ptr; - - if (!strncmp ("Last-Modified:", header, 14)) - *timing = curl_getdate (header + 14, NULL); - - return size * nmemb; -} - -mrss_error_t -mrss_get_last_modified (char *urlstring, time_t * lastmodified) -{ - return mrss_get_last_modified_with_options (urlstring, lastmodified, NULL); -} - -mrss_error_t -mrss_get_last_modified_with_options (char *urlstring, time_t * lastmodified, - mrss_options_t * options) -{ - CURL *curl; - - if (!urlstring || !lastmodified) - return MRSS_ERR_DATA; - - *lastmodified = 0; - - curl_global_init (CURL_GLOBAL_DEFAULT); - if (!(curl = curl_easy_init ())) - return MRSS_ERR_POSIX; - - curl_easy_setopt (curl, CURLOPT_URL, urlstring); - curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, - __mrss_get_last_modified_header); - curl_easy_setopt (curl, CURLOPT_HEADERDATA, lastmodified); - curl_easy_setopt (curl, CURLOPT_NOBODY, 1); - curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); - - if (options) - { - if (options->timeout > 0) - curl_easy_setopt (curl, CURLOPT_TIMEOUT, options->timeout); - else if (options->timeout < 0) - curl_easy_setopt (curl, CURLOPT_TIMEOUT, 10); - - if (options->certfile) - curl_easy_setopt (curl, CURLOPT_SSLCERT, options->certfile); - - if (options->password) - curl_easy_setopt (curl, CURLOPT_SSLCERTPASSWD, options->password); - - if (options->cacert) - curl_easy_setopt (curl, CURLOPT_CAINFO, options->cacert); - - if (options->proxy) - { - curl_easy_setopt (curl, CURLOPT_PROXY, options->proxy); - - if (options->proxy_authentication) - curl_easy_setopt (curl, CURLOPT_PROXYUSERPWD, - options->proxy_authentication); - } - - curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, options->verifypeer); - } - - if (curl_easy_perform (curl)) - { - curl_easy_cleanup (curl); - return MRSS_ERR_POSIX; - } - - curl_easy_cleanup (curl); - - return MRSS_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_internal.h b/plugins/backend/local/libmrss/mrss_internal.h deleted file mode 100644 index 0b496fdf..00000000 --- a/plugins/backend/local/libmrss/mrss_internal.h +++ /dev/null @@ -1,35 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __M_RSS_INTERNAL_H__ -#define __M_RSS_INTERNAL_H__ - -#include <curl/curl.h> -#include <nxml.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <string.h> -#include <errno.h> -#include <locale.h> - -char * __mrss_download_file (nxml_t *, char *, size_t *, mrss_error_t *, CURLcode *code); - -#endif - -/* EOF */ - diff --git a/plugins/backend/local/libmrss/mrss_options.c b/plugins/backend/local/libmrss/mrss_options.c deleted file mode 100644 index bd02c343..00000000 --- a/plugins/backend/local/libmrss/mrss_options.c +++ /dev/null @@ -1,76 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -mrss_options_t * -mrss_options_new (int timeout, char *proxy, char *proxy_authentication, - char *certfile, char *password, char *cacert, - int verifypeer, char *authentication, char *user_agent) -{ - mrss_options_t *options; - - if (!(options = (mrss_options_t *) malloc (sizeof (mrss_options_t)))) - return NULL; - - options->timeout = timeout; - options->proxy = proxy ? strdup (proxy) : NULL; - options->proxy_authentication = - proxy_authentication ? strdup (proxy_authentication) : NULL; - options->certfile = certfile ? strdup (certfile) : NULL; - options->password = password ? strdup (password) : NULL; - options->cacert = cacert ? strdup (cacert) : NULL; - options->authentication = authentication ? strdup (authentication) : NULL; - options->user_agent = user_agent ? strdup (user_agent) : NULL; - options->verifypeer = verifypeer; - - return options; -} - -void -mrss_options_free (mrss_options_t * options) -{ - if (!options) - return; - - if (options->proxy) - free (options->proxy); - - if (options->proxy_authentication) - free (options->proxy_authentication); - - if (options->certfile) - free (options->certfile); - - if (options->password) - free (options->password); - - if (options->cacert) - free (options->cacert); - - if (options->authentication) - free (options->authentication); - - if (options->user_agent) - free (options->user_agent); - - free (options); -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_parser.c b/plugins/backend/local/libmrss/mrss_parser.c deleted file mode 100644 index 200cd8dd..00000000 --- a/plugins/backend/local/libmrss/mrss_parser.c +++ /dev/null @@ -1,1376 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -static void -__mrss_parse_tag_insert (mrss_tag_t ** where, mrss_tag_t * what) -{ - if (!*where) - *where = what; - else - { - mrss_tag_t *tag = *where; - - while (tag->next) - tag = tag->next; - - tag->next = what; - } -} - -static mrss_tag_t * -__mrss_parse_tag (nxml_t * doc, nxml_data_t * cur) -{ - mrss_tag_t *tag; - mrss_attribute_t *attribute; - nxml_attr_t *nxml_attr; - - if (!(tag = (mrss_tag_t *) calloc (1, sizeof (mrss_tag_t)))) - return NULL; - - tag->element = MRSS_ELEMENT_TAG; - tag->allocated = 1; - - if (!(tag->name = strdup (cur->value))) - { - mrss_free (tag); - return NULL; - } - - if (cur->ns && cur->ns->ns && !(tag->ns = strdup (cur->ns->ns))) - { - mrss_free (tag); - return NULL; - } - - for (nxml_attr = cur->attributes; nxml_attr; nxml_attr = nxml_attr->next) - { - - if (! - (attribute = - (mrss_attribute_t *) calloc (1, sizeof (mrss_attribute_t)))) - return NULL; - - attribute->element = MRSS_ELEMENT_ATTRIBUTE; - attribute->allocated = 1; - - if (!(attribute->name = strdup (nxml_attr->name))) - { - mrss_free (tag); - return NULL; - } - - if (!(attribute->value = strdup (nxml_attr->value))) - { - mrss_free (tag); - return NULL; - } - - if (nxml_attr->ns && nxml_attr->ns->ns - && !(attribute->ns = strdup (nxml_attr->ns->ns))) - { - mrss_free (tag); - return NULL; - } - - if (!tag->attributes) - tag->attributes = attribute; - else - { - mrss_attribute_t *tmp = tag->attributes; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = attribute; - } - - } - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_TEXT) - { - if (!tag->value && !(tag->value = strdup (cur->value))) - { - mrss_free (tag); - return NULL; - } - } - else if (cur->type == NXML_TYPE_ELEMENT) - { - mrss_tag_t *child = __mrss_parse_tag (doc, cur); - - if (child) - __mrss_parse_tag_insert (&tag->children, child); - } - } - - return tag; -} - -static void -__mrss_parser_atom_string (nxml_t * doc, nxml_data_t * cur, char **what, - char **type) -{ - char *c; - - if (!(c = nxmle_find_attribute (cur, "type", NULL)) || !strcmp (c, "text")) - { - *what = nxmle_get_string (cur, NULL); - *type = c; - return; - } - - if (!strcmp (c, "html") || !strcmp (c, "xhtml")) - { - nxml_data_t *ncur; - char *total, *c1; - nxml_t *new; - int size; - - total = NULL; - size = 0; - - c1 = nxmle_get_string (cur, NULL); - - if (c1 && *c1) - { - total = strdup (c1); - size = strlen (total); - } - - else - { - while ((ncur = cur->children)) - { - char *buffer = NULL, *p; - char *tmp; - int len; - - if (nxml_remove (doc, cur, ncur) != NXML_OK) - continue; - - if (nxml_new (&new) != NXML_OK) - { - nxml_free_data (ncur); - continue; - } - - if (nxml_add (new, NULL, &ncur) != NXML_OK) - { - nxml_free_data (ncur); - nxml_free (new); - continue; - } - - if (!(buffer = nxmle_write_buffer (new, NULL))) - { - nxml_free (new); - continue; - } - - nxml_free (new); - - if (strncmp (buffer, "<?xml ", 6)) - { - free (buffer); - continue; - } - - p = buffer; - - while (*p && *p != '>') - p++; - - if (!*p) - { - free (buffer); - continue; - } - - p++; - while (*p && (*p == ' ' || *p == '\t' || *p == '\n')) - p++; - - len = strlen (p); - - if (!(tmp = realloc (total, size + len + 1))) - { - free (buffer); - - if (total) - { - free (total); - total = NULL; - } - - break; - } - - total = tmp; - strcpy (total + size, p); - size += len; - - free (buffer); - } - } - - *what = total; - *type = c; - free(c1); - return; - } - - free (c); - *what = nxmle_get_string (cur, NULL); -} - -static char * -__mrss_atom_prepare_date (mrss_t * data, char *datestr) -{ - struct tm stm; - - if (!datestr) - return NULL; - - memset (&stm, 0, sizeof (stm)); - - /* format: 2007-01-17T07:45:50Z */ - if (sscanf - (datestr, "%04d-%02d-%02dT%02d:%02d:%02dZ", &stm.tm_year, - &stm.tm_mon, &stm.tm_mday, &stm.tm_hour, &stm.tm_min, - &stm.tm_sec) == 6) - { - char datebuf[256]; - stm.tm_year -= 1900; - stm.tm_mon -= 1; - - if (!data->c_locale - && !(data->c_locale = newlocale (LC_ALL_MASK, "C", NULL))) - return NULL; - - strftime_l (datebuf, sizeof (datebuf), "%a, %d %b %Y %H:%M:%S %z", &stm, - data->c_locale); - - return strdup (datebuf); - } - - return NULL; -} - -static void -__mrss_parser_atom_category (nxml_data_t * cur, mrss_category_t ** category) -{ - char *c; - mrss_category_t *cat; - - if (!(cat = calloc (1, sizeof (mrss_category_t)))) - return; - - if (!(c = nxmle_find_attribute (cur, "term", NULL))) - { - free (cat); - return; - } - - cat->element = MRSS_ELEMENT_CATEGORY; - cat->allocated = 1; - cat->category = c; - - if ((c = nxmle_find_attribute (cur, "scheme", NULL))) - cat->domain = c; - - if ((c = nxmle_find_attribute (cur, "label", NULL))) - cat->label = c; - - if (!*category) - *category = cat; - - else - { - mrss_category_t *tmp; - tmp = *category; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = cat; - } -} - -static void -__mrss_parser_atom_author (nxml_data_t * cur, char **name, char **email, - char **uri) -{ - for (cur = cur->children; cur; cur = cur->next) - { - if (!*name && !strcmp (cur->value, "name")) - *name = nxmle_get_string (cur, NULL); - - else if (!*email && !strcmp (cur->value, "email")) - *email = nxmle_get_string (cur, NULL); - - else if (!*uri && !strcmp (cur->value, "uri")) - *uri = nxmle_get_string (cur, NULL); - } -} - -static void -__mrss_parser_atom_entry (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - mrss_item_t *item; - - if (!(item = malloc (sizeof (mrss_item_t)))) - return; - - memset (item, 0, sizeof (mrss_item_t)); - item->element = MRSS_ELEMENT_ITEM; - item->allocated = 1; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title -> title */ - if (!item->title && !strcmp (cur->value, "title")) - __mrss_parser_atom_string (doc, cur, &item->title, - &item->title_type); - - /* link href -> link */ - else if (!item->link && !strcmp (cur->value, "link") - && (c = nxmle_find_attribute (cur, "href", NULL))) - item->link = c; - - /* content -> description */ - /* Note: We intentionally override summary with content */ - else if (!strcmp (cur->value, "content")) - { - if (item->description) - { - free(item->description); - item->description = NULL; - } - __mrss_parser_atom_string (doc, cur, &item->description, - &item->description_type); - } - - /* summary -> description */ - else if (!item->description && !strcmp (cur->value, "summary")) - __mrss_parser_atom_string (doc, cur, &item->description, - &item->description_type); - - /* right -> copyright */ - else if (!item->copyright && !strcmp (cur->value, "rights")) - __mrss_parser_atom_string (doc, cur, &item->description, - &item->description_type); - - /* author structure -> author elements */ - else if (!strcmp (cur->value, "author")) - __mrss_parser_atom_author (cur, &item->author, - &item->author_email, - &item->author_uri); - - /* contributor structure -> contributor elements */ - else if (!strcmp (cur->value, "contributor")) - __mrss_parser_atom_author (cur, &item->contributor, - &item->contributor_email, - &item->contributor_uri); - - /* published -> pubDate */ - else if (!item->pubDate && !strcmp (cur->value, "published") - && data->version == MRSS_VERSION_ATOM_1_0 - && (c = nxmle_get_string (cur, NULL))) - { - item->pubDate = __mrss_atom_prepare_date (data, c); - free (c); - } - - else if (!item->pubDate && !strcmp (cur->value, "updated") - && data->version == MRSS_VERSION_ATOM_1_0 - && (c = nxmle_get_string (cur, NULL))) - { - item->pubDate = __mrss_atom_prepare_date (data, c); - free (c); - } - - /* issued -> pubDate (Atom 0.3) */ - else if (!item->pubDate && !strcmp (cur->value, "issued") - && (c = nxmle_get_string (cur, NULL))) - { - item->pubDate = __mrss_atom_prepare_date (data, c); - free (c); - } - - /* id -> guid */ - else if (!item->guid && !strcmp (cur->value, "id") - && (c = nxmle_get_string (cur, NULL))) - item->guid = c; - - /* categories */ - else if (!strcmp (cur->value, "category")) - __mrss_parser_atom_category (cur, &item->category); - - else - { - mrss_tag_t *tag; - if ((tag = __mrss_parse_tag (doc, cur))) - __mrss_parse_tag_insert (&item->other_tags, tag); - } - } - } - - if (!data->item) - data->item = item; - - else - { - mrss_item_t *tmp = data->item; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = item; - } -} - -static void -__mrss_parser_rss_image (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title */ - if (!strcmp (cur->value, "title") && !data->image_title - && (c = nxmle_get_string (cur, NULL))) - data->image_title = c; - - /* url */ - else if (!strcmp (cur->value, "url") && !data->image_url - && (c = nxmle_get_string (cur, NULL))) - data->image_url = c; - - /* link */ - else if (!strcmp (cur->value, "link") && !data->image_link - && (c = nxmle_get_string (cur, NULL))) - data->image_link = c; - - /* width */ - else if (!strcmp (cur->value, "width") && !data->image_width - && (c = nxmle_get_string (cur, NULL))) - { - data->image_width = atoi (c); - free (c); - } - - /* height */ - else if (!strcmp (cur->value, "height") && !data->image_height - && (c = nxmle_get_string (cur, NULL))) - { - data->image_height = atoi (c); - free (c); - } - - /* description */ - else if (!strcmp (cur->value, "description") - && !data->image_description - && (c = nxmle_get_string (cur, NULL))) - data->image_description = c; - } - } -} - -static void -__mrss_parser_rss_textinput (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title */ - if (!strcmp (cur->value, "title") && !data->textinput_title - && (c = nxmle_get_string (cur, NULL))) - data->textinput_title = c; - - /* description */ - else if (!strcmp (cur->value, "description") - && !data->textinput_description - && (c = nxmle_get_string (cur, NULL))) - data->textinput_description = c; - - /* name */ - else if (!strcmp (cur->value, "name") && !data->textinput_name - && (c = nxmle_get_string (cur, NULL))) - data->textinput_name = c; - - /* link */ - else if (!strcmp (cur->value, "link") && !data->textinput_link - && (c = nxmle_get_string (cur, NULL))) - data->textinput_link = c; - } - } -} - -static void -__mrss_parser_rss_skipHours (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - if (!strcmp (cur->value, "hour") - && (c = nxmle_get_string (cur, NULL))) - { - mrss_hour_t *hour; - - if (!(hour = (mrss_hour_t *) calloc (1, sizeof (mrss_hour_t)))) - { - free (c); - return; - } - - hour->element = MRSS_ELEMENT_SKIPHOURS; - hour->allocated = 1; - hour->hour = c; - - if (!data->skipHours) - data->skipHours = hour; - else - { - mrss_hour_t *tmp; - - tmp = data->skipHours; - - while (tmp->next) - tmp = tmp->next; - tmp->next = hour; - } - } - } - } -} - -static void -__mrss_parser_rss_skipDays (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - if (!strcmp (cur->value, "day") - && (c = nxmle_get_string (cur, NULL))) - { - mrss_day_t *day; - - if (!(day = (mrss_day_t *) calloc (1, sizeof (mrss_day_t)))) - { - free (c); - return; - } - - day->element = MRSS_ELEMENT_SKIPDAYS; - day->allocated = 1; - day->day = c; - - if (!data->skipDays) - data->skipDays = day; - else - { - mrss_day_t *tmp; - - tmp = data->skipDays; - - while (tmp->next) - tmp = tmp->next; - tmp->next = day; - } - } - } - } -} - -static void -__mrss_parser_rss_item (nxml_t * doc, nxml_data_t * cur, mrss_t * data) -{ - char *c; - char *attr; - mrss_item_t *item; - - if (!(item = (mrss_item_t *) calloc (1, sizeof (mrss_item_t)))) - return; - - item->element = MRSS_ELEMENT_ITEM; - item->allocated = 1; - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title */ - if (!strcmp (cur->value, "title") && !item->title - && (c = nxmle_get_string (cur, NULL))) - item->title = c; - - /* link */ - else if (!strcmp (cur->value, "link") && !item->link - && (c = nxmle_get_string (cur, NULL))) - item->link = c; - - /* content:encoded - * FIXME: We are ignoring the namespace. - /* Note: We intentionally override description with content:encoded */ - else if (!strcmp (cur->value, "encoded") - && (c = nxmle_get_string (cur, NULL))) - { - if (item->description) - free(item->description); - item->description = c; - } - - /* description */ - else if (!strcmp (cur->value, "description") && !item->description - && (c = nxmle_get_string (cur, NULL))) - item->description = c; - - /* source */ - else if (!strcmp (cur->value, "source") && !item->source) - { - item->source = nxmle_get_string (cur, NULL); - - if ((attr = nxmle_find_attribute (cur, "url", NULL))) - item->source_url = attr; - } - - /* enclosure */ - else if (!strcmp (cur->value, "enclosure") && !item->enclosure) - { - item->enclosure = nxmle_get_string (cur, NULL); - - if ((attr = nxmle_find_attribute (cur, "url", NULL))) - item->enclosure_url = attr; - - if ((attr = nxmle_find_attribute (cur, "length", NULL))) - { - item->enclosure_length = atoi (attr); - free (attr); - } - - if ((attr = nxmle_find_attribute (cur, "type", NULL))) - item->enclosure_type = attr; - } - - /* category */ - else if (!strcmp (cur->value, "category") - && (c = nxmle_get_string (cur, NULL))) - { - mrss_category_t *category; - - if (! - (category = - (mrss_category_t *) calloc (1, sizeof (mrss_category_t)))) - { - free (c); - return; - } - - category->element = MRSS_ELEMENT_CATEGORY; - category->allocated = 1; - category->category = c; - - if ((attr = nxmle_find_attribute (cur, "domain", NULL))) - category->domain = attr; - - if (!item->category) - item->category = category; - else - { - mrss_category_t *tmp; - - tmp = item->category; - while (tmp->next) - tmp = tmp->next; - tmp->next = category; - } - } - - /* author */ - else if (!strcmp (cur->value, "author") && !item->author - && (c = nxmle_get_string (cur, NULL))) - item->author = c; - - /* comments */ - else if (!strcmp (cur->value, "comments") && !item->comments - && (c = nxmle_get_string (cur, NULL))) - item->comments = c; - - /* guid */ - else if (!strcmp (cur->value, "guid") && !item->guid - && (c = nxmle_get_string (cur, NULL))) - { - item->guid = c; - - if ((attr = nxmle_find_attribute (cur, "isPermaLink", NULL))) - { - if (!strcmp (attr, "false")) - item->guid_isPermaLink = 0; - else - item->guid_isPermaLink = 1; - - free (attr); - } - } - - /* pubDate */ - else if (!strcmp (cur->value, "pubDate") && !item->pubDate - && (c = nxmle_get_string (cur, NULL))) - item->pubDate = c; - - /* Other tags: */ - else - { - mrss_tag_t *tag; - - if ((tag = __mrss_parse_tag (doc, cur))) - __mrss_parse_tag_insert (&item->other_tags, tag); - } - - } - } - - - if (!data->item) - data->item = item; - else - { - mrss_item_t *tmp; - - tmp = data->item; - - while (tmp->next) - tmp = tmp->next; - tmp->next = item; - } -} - -static mrss_error_t -__mrss_parser_atom (nxml_t * doc, nxml_data_t * cur, mrss_t ** ret) -{ - mrss_t *data; - char *c = NULL; - - if (!(data = malloc (sizeof (mrss_t)))) - return MRSS_ERR_POSIX; - - memset (data, 0, sizeof (mrss_t)); - data->element = MRSS_ELEMENT_CHANNEL; - data->allocated = 1; - data->version = MRSS_VERSION_ATOM_1_0; - - if (doc->encoding && !(data->encoding = strdup (doc->encoding))) - { - mrss_free (data); - return MRSS_ERR_POSIX; - } - - if (!data->language && (c = nxmle_find_attribute (cur, "xml:lang", NULL))) - data->language = c; - - if ((c = nxmle_find_attribute (cur, "version", NULL))) - { - if (!strcmp (c, "0.3")) - data->version = MRSS_VERSION_ATOM_0_3; - - free (c); - } - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title -> title */ - if (!data->title && !strcmp (cur->value, "title")) - __mrss_parser_atom_string (doc, cur, &data->title, - &data->title_type); - - /* subtitle -> description */ - else if (!data->description - && data->version == MRSS_VERSION_ATOM_1_0 - && !strcmp (cur->value, "subtitle")) - __mrss_parser_atom_string (doc, cur, &data->description, - &data->description_type); - - /* tagline -> description (Atom 0.3) */ - else if (data->version == MRSS_VERSION_ATOM_0_3 - && !data->description && !strcmp (cur->value, "tagline")) - __mrss_parser_atom_string (doc, cur, &data->description, - &data->description_type); - - /* link href -> link */ - else if (!strcmp (cur->value, "link") && !data->link - && (c = nxmle_find_attribute (cur, "href", NULL))) - data->link = c; - - /* id -> id */ - else if (!strcmp (cur->value, "id") && !data->id - && (c = nxmle_get_string (cur, NULL))) - data->id = c; - - /* rights -> copyright */ - else if (!data->copyright && !strcmp (cur->value, "rights")) - __mrss_parser_atom_string (doc, cur, &data->copyright, - &data->copyright_type); - - /* updated -> lastBuildDate */ - else if (!strcmp (cur->value, "updated") - && (c = nxmle_get_string (cur, NULL))) - { - data->lastBuildDate = __mrss_atom_prepare_date (data, c); - free (c); - } - - /* author -> managingeditor */ - else if (!strcmp (cur->value, "author")) - __mrss_parser_atom_author (cur, &data->managingeditor, - &data->managingeditor_email, - &data->managingeditor_uri); - - /* contributor */ - else if (!strcmp (cur->value, "contributor")) - __mrss_parser_atom_author (cur, &data->contributor, - &data->contributor_email, - &data->contributor_uri); - - /* generator -> generator */ - else if (!strcmp (cur->value, "generator") && !data->generator - && (c = nxmle_get_string (cur, NULL))) - { - char *attr; - - data->generator = c; - - if ((attr = nxmle_find_attribute (cur, "uri", NULL))) - data->generator_uri = attr; - - if ((attr = nxmle_find_attribute (cur, "version", NULL))) - data->generator_version = attr; - } - - /* icon -> image_url */ - else if (!strcmp (cur->value, "icon") && !data->image_url - && (c = nxmle_get_string (cur, NULL))) - data->image_url = c; - - /* logo -> image_logo */ - else if (!strcmp (cur->value, "logo") && !data->image_logo - && (c = nxmle_get_string (cur, NULL))) - data->image_logo = c; - - /* category */ - else if (!strcmp (cur->value, "category")) - __mrss_parser_atom_category (cur, &data->category); - - /* entry -> item */ - else if (!strcmp (cur->value, "entry")) - __mrss_parser_atom_entry (doc, cur, data); - - else - { - mrss_tag_t *tag; - if ((tag = __mrss_parse_tag (doc, cur))) - __mrss_parse_tag_insert (&data->other_tags, tag); - } - - } - } - - *ret = data; - - return MRSS_OK; -} - -static mrss_error_t -__mrss_parser_rss (mrss_version_t v, nxml_t * doc, nxml_data_t * cur, - mrss_t ** ret) -{ - mrss_t *data; - char *c, *attr; - - if (!(data = (mrss_t *) calloc (1, sizeof (mrss_t)))) - return MRSS_ERR_POSIX; - - data->element = MRSS_ELEMENT_CHANNEL; - data->allocated = 1; - data->version = v; - - if (doc->encoding && !(data->encoding = strdup (doc->encoding))) - { - mrss_free (data); - return MRSS_ERR_POSIX; - } - - if (data->version == MRSS_VERSION_1_0) - { - nxml_data_t *cur_channel = NULL; - - while (cur) - { - - if (!strcmp (cur->value, "channel")) - cur_channel = cur; - - else if (!strcmp (cur->value, "image")) - __mrss_parser_rss_image (doc, cur, data); - - else if (!strcmp (cur->value, "textinput")) - __mrss_parser_rss_textinput (doc, cur, data); - - else if (!strcmp (cur->value, "item")) - __mrss_parser_rss_item (doc, cur, data); - - cur = cur->next; - } - - cur = cur_channel; - } - else - { - while (cur && strcmp (cur->value, "channel")) - cur = cur->next; - } - - if (!cur) - { - mrss_free (data); - return MRSS_ERR_PARSER; - } - - if (data->version == MRSS_VERSION_1_0) - { - if ((attr = nxmle_find_attribute (cur, "about", NULL))) - data->about = attr; - } - - for (cur = cur->children; cur; cur = cur->next) - { - if (cur->type == NXML_TYPE_ELEMENT) - { - /* title */ - if (!strcmp (cur->value, "title") && !data->title && - (c = nxmle_get_string (cur, NULL))) - data->title = c; - - /* description */ - else if (!strcmp (cur->value, "description") && !data->description - && (c = nxmle_get_string (cur, NULL))) - data->description = c; - - /* link */ - else if (!strcmp (cur->value, "link") && !data->link - && (c = nxmle_get_string (cur, NULL))) - data->link = c; - - /* language */ - else if (!strcmp (cur->value, "language") && !data->language - && (c = nxmle_get_string (cur, NULL))) - data->language = c; - - /* rating */ - else if (!strcmp (cur->value, "rating") && !data->rating - && (c = nxmle_get_string (cur, NULL))) - data->rating = c; - - /* copyright */ - else if (!strcmp (cur->value, "copyright") && !data->copyright - && (c = nxmle_get_string (cur, NULL))) - data->copyright = c; - - /* pubDate */ - else if (!strcmp (cur->value, "pubDate") && !data->pubDate - && (c = nxmle_get_string (cur, NULL))) - data->pubDate = c; - - /* lastBuildDate */ - else if (!strcmp (cur->value, "lastBuildDate") - && !data->lastBuildDate - && (c = nxmle_get_string (cur, NULL))) - data->lastBuildDate = c; - - /* docs */ - else if (!strcmp (cur->value, "docs") && !data->docs - && (c = nxmle_get_string (cur, NULL))) - data->docs = c; - - /* managingeditor */ - else if (!strcmp (cur->value, "managingeditor") - && !data->managingeditor - && (c = nxmle_get_string (cur, NULL))) - data->managingeditor = c; - - /* webMaster */ - else if (!strcmp (cur->value, "webMaster") && !data->webMaster - && (c = nxmle_get_string (cur, NULL))) - data->webMaster = c; - - /* image */ - else if (!strcmp (cur->value, "image")) - __mrss_parser_rss_image (doc, cur, data); - - /* textinput */ - else if (!strcmp (cur->value, "textinput")) - __mrss_parser_rss_textinput (doc, cur, data); - - /* skipHours */ - else if (!strcmp (cur->value, "skipHours")) - __mrss_parser_rss_skipHours (doc, cur, data); - - /* skipDays */ - else if (!strcmp (cur->value, "skipDays")) - __mrss_parser_rss_skipDays (doc, cur, data); - - /* item */ - else if (!strcmp (cur->value, "item")) - __mrss_parser_rss_item (doc, cur, data); - - /* category */ - else if (!strcmp (cur->value, "category") - && (c = nxmle_get_string (cur, NULL))) - { - mrss_category_t *category; - - if (! - (category = - (mrss_category_t *) calloc (1, sizeof (mrss_category_t)))) - { - mrss_free ((mrss_generic_t *) data); - free (c); - return MRSS_ERR_POSIX; - } - - category->element = MRSS_ELEMENT_CATEGORY; - category->allocated = 1; - category->category = c; - - if ((attr = nxmle_find_attribute (cur, "domain", NULL))) - category->domain = attr; - - if (!data->category) - data->category = category; - else - { - mrss_category_t *tmp; - - tmp = data->category; - while (tmp->next) - tmp = tmp->next; - tmp->next = category; - } - } - - /* enclosure */ - else if (!strcmp (cur->value, "cloud") && !data->cloud) - { - data->cloud = nxmle_get_string (cur, NULL); - - if (!data->cloud_domain - && (attr = nxmle_find_attribute (cur, "domain", NULL))) - data->cloud_domain = attr; - - if (!data->cloud_port - && (attr = nxmle_find_attribute (cur, "port", NULL))) - data->cloud_port = atoi (attr); - - if (!data->cloud_registerProcedure - && (attr = - nxmle_find_attribute (cur, "registerProcedure", NULL))) - data->cloud_registerProcedure = attr; - - if (!data->cloud_protocol - && (attr = nxmle_find_attribute (cur, "protocol", NULL))) - data->cloud_protocol = attr; - } - - /* generator */ - else if (!strcmp (cur->value, "generator") && !data->generator - && (c = nxmle_get_string (cur, NULL))) - data->generator = c; - - /* ttl */ - else if (!strcmp (cur->value, "ttl") && !data->ttl - && (c = nxmle_get_string (cur, NULL))) - { - data->ttl = atoi (c); - free (c); - } - - /* Other tags: */ - else if (data->version != MRSS_VERSION_1_0 - || strcmp (cur->value, "items")) - { - mrss_tag_t *tag; - - if ((tag = __mrss_parse_tag (doc, cur))) - __mrss_parse_tag_insert (&data->other_tags, tag); - } - } - } - - *ret = data; - - return MRSS_OK; -} - -static mrss_error_t -__mrss_parser (nxml_t * doc, mrss_t ** ret) -{ - mrss_error_t r = MRSS_ERR_VERSION; - nxml_data_t *cur; - char *c; - - if (!(cur = nxmle_root_element (doc, NULL))) - return MRSS_ERR_PARSER; - - if (!strcmp (cur->value, "rss")) - { - if ((c = nxmle_find_attribute (cur, "version", NULL))) - { - /* 0.91 VERSION */ - if (!strcmp (c, "0.91")) - r = - __mrss_parser_rss (MRSS_VERSION_0_91, doc, cur->children, ret); - - /* 0.92 VERSION */ - else if (!strcmp (c, "0.92")) - r = - __mrss_parser_rss (MRSS_VERSION_0_92, doc, cur->children, ret); - - /* 2.0 VERSION */ - else if (!strcmp (c, "2.0")) - r = __mrss_parser_rss (MRSS_VERSION_2_0, doc, cur->children, ret); - - else - r = MRSS_ERR_VERSION; - - free (c); - } - - else - r = MRSS_ERR_VERSION; - } - - else if (!strcmp (cur->value, "RDF")) - r = __mrss_parser_rss (MRSS_VERSION_1_0, doc, cur->children, ret); - - else if (!strcmp (cur->value, "feed")) - r = __mrss_parser_atom (doc, cur, ret); - - else - r = MRSS_ERR_PARSER; - - return r; -} - -/*************************** EXTERNAL FUNCTION ******************************/ - -mrss_error_t -mrss_parse_url (char *url, mrss_t ** ret) -{ - return mrss_parse_url_with_options_error_and_transfer_buffer (url, ret, - NULL, NULL, - NULL, NULL); -} - -mrss_error_t -mrss_parse_url_with_options (char *url, mrss_t ** ret, - mrss_options_t * options) -{ - return mrss_parse_url_with_options_error_and_transfer_buffer (url, ret, - options, NULL, - NULL, NULL); -} - -mrss_error_t -mrss_parse_url_with_options_and_error (char *url, mrss_t ** ret, - mrss_options_t * options, - CURLcode * code) -{ - return mrss_parse_url_with_options_error_and_transfer_buffer (url, ret, - options, code, - NULL, NULL); -} - -mrss_error_t -mrss_parse_url_with_options_error_and_transfer_buffer (char *url, - mrss_t ** ret, - mrss_options_t * - options, - CURLcode * code, - char **feed_content, - int *feed_size) -{ - nxml_t *doc; - mrss_error_t err; - char *buffer; - size_t size; - - if (feed_content) - *feed_content = NULL; - - if (feed_size) - *feed_size = 0; - - if (!url || !ret) - return MRSS_ERR_DATA; - - if (nxml_new (&doc) != NXML_OK) - return MRSS_ERR_POSIX; - - if (options) - { - if (options->timeout >= 0) - nxml_set_timeout (doc, options->timeout); - - if (options->proxy) - nxml_set_proxy (doc, options->proxy, options->proxy_authentication); - - if (options->authentication) - nxml_set_authentication (doc, options->authentication); - - if (options->user_agent) - nxml_set_user_agent (doc, options->user_agent); - - nxml_set_certificate (doc, options->certfile, options->password, - options->cacert, options->verifypeer); - } - - if (!(buffer = __mrss_download_file (doc, url, &size, &err, code))) - return err; - - if (nxml_parse_buffer (doc, buffer, size) != NXML_OK) - { - free (buffer); - nxml_free (doc); - - return MRSS_ERR_PARSER; - } - - if (!(err = __mrss_parser (doc, ret))) - { - if (!((*ret)->file = strdup (url))) - { - mrss_free (*ret); - nxml_free (doc); - free (buffer); - - return MRSS_ERR_POSIX; - } - - (*ret)->size = size; - } - - nxml_free (doc); - - /* transfer ownership: */ - if (!feed_content) - free (buffer); - else - *feed_content = buffer; - - if (feed_size) - *feed_size = size; - - return err; -} - -mrss_error_t -mrss_parse_file (char *file, mrss_t ** ret) -{ - nxml_t *doc; - mrss_error_t err; - struct stat st; - - if (!file || !ret) - return MRSS_ERR_DATA; - - if (lstat (file, &st)) - return MRSS_ERR_POSIX; - - if (nxml_new (&doc) != NXML_OK) - return MRSS_ERR_POSIX; - - if (nxml_parse_file (doc, file) != NXML_OK) - { - nxml_free (doc); - return MRSS_ERR_PARSER; - } - - if (!(err = __mrss_parser (doc, ret))) - { - if (!((*ret)->file = strdup (file))) - { - nxml_free (doc); - mrss_free (*ret); - - return MRSS_ERR_POSIX; - } - - (*ret)->size = st.st_size; - } - - nxml_free (doc); - - return err; -} - -mrss_error_t -mrss_parse_buffer (char *buffer, size_t size, mrss_t ** ret) -{ - nxml_t *doc; - mrss_error_t err; - - if (!buffer || !size || !ret) - return MRSS_ERR_DATA; - - if (nxml_new (&doc) != NXML_OK) - return MRSS_ERR_POSIX; - - if (nxml_parse_buffer (doc, buffer, size)) - { - nxml_free (doc); - return MRSS_ERR_PARSER; - } - - if (!(err = __mrss_parser (doc, ret))) - (*ret)->size = size; - - nxml_free (doc); - return err; -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_search.c b/plugins/backend/local/libmrss/mrss_search.c deleted file mode 100644 index 8d82c2c3..00000000 --- a/plugins/backend/local/libmrss/mrss_search.c +++ /dev/null @@ -1,122 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -static mrss_error_t __mrss_search_tag_real (mrss_tag_t * tag, char *name, - char *ns, mrss_tag_t ** ret); - -mrss_error_t -mrss_search_tag (mrss_generic_t data, char *name, char *ns, mrss_tag_t ** tag) -{ - mrss_t *tmp; - mrss_error_t err; - - if (!data || !name) - return MRSS_ERR_DATA; - - - tmp = (mrss_t *) data; - switch (tmp->element) - { - case MRSS_ELEMENT_CHANNEL: - err = - __mrss_search_tag_real (((mrss_t *) data)->other_tags, name, ns, tag); - break; - - case MRSS_ELEMENT_ITEM: - err = - __mrss_search_tag_real (((mrss_item_t *) data)->other_tags, name, ns, - tag); - break; - - case MRSS_ELEMENT_TAG: - err = - __mrss_search_tag_real (((mrss_tag_t *) data)->children, name, ns, - tag); - break; - - default: - err = MRSS_ERR_DATA; - break; - } - - return err; -} - -static mrss_error_t -__mrss_search_tag_real (mrss_tag_t * tag, char *name, char *ns, - mrss_tag_t ** ret) -{ - int i; - - for (*ret = NULL; tag; tag = tag->next) - { - i = 0; - if (tag->ns) - i++; - if (ns) - i++; - - if ((!i || (i == 2 && !strcmp (tag->ns, ns))) - && !strcmp (name, tag->name)) - { - *ret = tag; - return MRSS_OK; - } - } - - return MRSS_OK; -} - -mrss_error_t -mrss_search_attribute (mrss_generic_t data, char *name, char *ns, - mrss_attribute_t ** attribute) -{ - mrss_tag_t *tag; - mrss_attribute_t *attr; - int i; - - if (!data || !name) - return MRSS_ERR_DATA; - - tag = (mrss_tag_t *) data; - if (tag->element != MRSS_ELEMENT_TAG) - return MRSS_ERR_DATA; - - for (*attribute = NULL, attr = tag->attributes; attr; attr = attr->next) - { - i = 0; - if (attr->ns) - i++; - if (ns) - i++; - - if ((!i || (i == 2 && !strcmp (attr->ns, ns))) - && !strcmp (name, attr->name)) - { - *attribute = attr; - return MRSS_OK; - } - } - - return MRSS_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libmrss/mrss_write.c b/plugins/backend/local/libmrss/mrss_write.c deleted file mode 100644 index 09d648d3..00000000 --- a/plugins/backend/local/libmrss/mrss_write.c +++ /dev/null @@ -1,1228 +0,0 @@ -/* mRss - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "mrss.h" -#include "mrss_internal.h" - -static void -__mrss_write_string (void (*func) (void *, char *, ...), void *obj, char *str) -{ - int i; - int len; - char buf[1024]; - int j; - -#define __NXML_CHECK_BUF \ - if(j==sizeof(buf)-1) { buf[j]=0; func(obj, "%s",buf); j=0; } - - if (!str) - return; - - len = strlen (str); - - for (j = i = 0; i < len; i++) - { - if (str[i] == '\r') - continue; - - else if (str[i] == '<') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'l'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '>') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'g'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '&') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'a'; - __NXML_CHECK_BUF; - buf[j++] = 'm'; - __NXML_CHECK_BUF; - buf[j++] = 'p'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '\'') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'a'; - __NXML_CHECK_BUF; - buf[j++] = 'p'; - __NXML_CHECK_BUF; - buf[j++] = 'o'; - __NXML_CHECK_BUF; - buf[j++] = 's'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '\"') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'q'; - __NXML_CHECK_BUF; - buf[j++] = 'u'; - __NXML_CHECK_BUF; - buf[j++] = 'o'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else - { - buf[j++] = str[i]; - __NXML_CHECK_BUF; - } - } - - if (j) - { - buf[j] = 0; - func (obj, "%s", buf); - j = 0; - } -} - -static void -__mrss_write_real_image (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - if (mrss->image_title || mrss->image_url || mrss->image_link - || mrss->image_width || mrss->image_height || mrss->description) - { - - func (obj, " %s<image>\n", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - - if (mrss->image_title) - { - func (obj, " %s<title>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->image_title); - func (obj, "</title>\n"); - } - - if (mrss->image_url) - { - func (obj, " %s<url>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->image_url); - func (obj, "</url>\n"); - } - - if (mrss->image_link) - { - func (obj, " %s<link>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->image_link); - func (obj, "</link>\n"); - } - - if (mrss->version != MRSS_VERSION_1_0) - { - if (mrss->image_width) - func (obj, " <width>%d</width>\n", mrss->image_width); - - if (mrss->image_height) - func (obj, " <height>%d</height>\n", mrss->image_height); - - if (mrss->image_description) - { - func (obj, " <description>"); - __mrss_write_string (func, obj, mrss->image_description); - func (obj, "</description>\n"); - } - } - - func (obj, " %s</image>\n", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - } -} - -static void -__mrss_write_real_textinput (mrss_t * mrss, - void (*func) (void *, char *, ...), void *obj) -{ - if (mrss->textinput_title || mrss->textinput_description - || mrss->textinput_name || mrss->textinput_link) - { - - func (obj, " %s<textinput>\n", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - - if (mrss->textinput_title) - { - func (obj, " %s<title>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->textinput_title); - func (obj, "</title>\n"); - } - - if (mrss->textinput_description) - { - func (obj, " %s<description>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->textinput_description); - func (obj, "</description>\n"); - } - - if (mrss->textinput_name) - { - func (obj, " %s<name>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->textinput_name); - func (obj, "</name>\n"); - } - - if (mrss->textinput_link) - { - func (obj, " %s<link>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, mrss->textinput_link); - func (obj, "</link>\n"); - } - - func (obj, " </textinput>\n"); - } -} - -static void -__mrss_write_real_cloud (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - if ((mrss->version == MRSS_VERSION_0_92 - || mrss->version == MRSS_VERSION_2_0) && (mrss->cloud - || mrss->cloud_domain - || mrss->cloud_port - || mrss->cloud_path - || mrss-> - cloud_registerProcedure - || mrss->cloud_protocol)) - { - func (obj, " <cloud"); - - if (mrss->cloud_domain) - { - func (obj, " domain=\""); - __mrss_write_string (func, obj, mrss->cloud_domain); - func (obj, "\""); - } - - if (mrss->cloud_port) - func (obj, " port=\"%d\"", mrss->cloud_port); - - if (mrss->cloud_path) - { - func (obj, " path=\""); - __mrss_write_string (func, obj, mrss->cloud_path); - func (obj, "\""); - } - - if (mrss->cloud_registerProcedure) - { - func (obj, " registerProcedure=\""); - __mrss_write_string (func, obj, mrss->cloud_registerProcedure); - func (obj, "\""); - } - - if (mrss->cloud_protocol) - { - func (obj, " protocol=\""); - __mrss_write_string (func, obj, mrss->cloud_protocol); - func (obj, "\""); - } - - if (mrss->cloud) - func (obj, ">%s</cloud>\n", mrss->cloud); - else - func (obj, " />\n", mrss->cloud); - } -} - -static void -__mrss_write_real_skipHours (mrss_t * mrss, - void (*func) (void *, char *, ...), void *obj) -{ - if (mrss->skipHours && mrss->version != MRSS_VERSION_1_0) - { - mrss_hour_t *hour; - - func (obj, " <skipHours>\n"); - - hour = mrss->skipHours; - while (hour) - { - func (obj, " <hour>"); - __mrss_write_string (func, obj, hour->hour); - func (obj, "</hour>\n"); - - hour = hour->next; - } - - func (obj, " </skipHours>\n"); - } -} - -static void -__mrss_write_real_skipDays (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - if (mrss->skipDays && mrss->version != MRSS_VERSION_1_0) - { - mrss_day_t *day; - - func (obj, " <skipDays>\n"); - - day = mrss->skipDays; - while (day) - { - func (obj, " <day>"); - __mrss_write_string (func, obj, day->day); - func (obj, "</day>\n"); - day = day->next; - } - - func (obj, " </skipDays>\n"); - } -} - -static void -__mrss_write_real_category (mrss_t * mrss, mrss_category_t * category, - void (*func) (void *, char *, ...), void *obj) -{ - if ((mrss->version == MRSS_VERSION_0_92 - || mrss->version == MRSS_VERSION_2_0) && mrss->category) - { - while (category) - { - func (obj, " <category"); - - if (category->domain) - { - func (obj, " domain=\""); - __mrss_write_string (func, obj, category->domain); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, category->category); - func (obj, "</category>\n"); - - category = category->next; - } - } -} - -static void -__mrss_write_real_tag (mrss_tag_t * tag, void (*func) (void *, char *, ...), - void *obj, int index) -{ - mrss_attribute_t *attribute; - - struct mrss_ns_t - { - char *ns; - struct mrss_ns_t *next; - } *namespaces = NULL, *nstmp; - - int i; - - while (tag) - { - if (tag->ns) - { - if (!(namespaces = calloc (1, sizeof (struct mrss_ns_t)))) - return; - - namespaces->ns = tag->ns; - } - - for (attribute = tag->attributes; attribute; - attribute = attribute->next) - { - if (attribute->ns) - { - for (nstmp = namespaces; nstmp; nstmp = nstmp->next) - if (!strcmp (nstmp->ns, attribute->ns)) - break; - - if (nstmp) - continue; - - if (!(nstmp = calloc (1, sizeof (struct mrss_ns_t)))) - return; - - nstmp->ns = attribute->ns; - nstmp->next = namespaces->next; - namespaces->next = nstmp; - } - } - - - for (i = 0; i < index; i++) - func (obj, " "); - - if (tag->ns) - func (obj, " <ns0:%s", tag->name); - else - func (obj, " <%s", tag->name); - - for (i = 0, nstmp = namespaces; nstmp; nstmp = nstmp->next) - func (obj, " xmlns:ns%d=\"%s\"", i++, nstmp->ns); - - for (attribute = tag->attributes; attribute; - attribute = attribute->next) - { - if (attribute->ns) - { - for (i = 0, nstmp = namespaces; nstmp; i++, nstmp = nstmp->next) - { - if (!strcmp (nstmp->ns, attribute->ns)) - { - func (obj, " ns%d:%s=\"%s\"", i, attribute->name, - attribute->value); - break; - } - } - } - else - func (obj, " %s=\"%s\"", attribute->name, attribute->value); - } - - if (tag->value) - { - func (obj, ">"); - __mrss_write_string (func, obj, tag->value); - } - - if (tag->children) - { - if (!tag->value) - func (obj, ">\n"); - - func (obj, "\n"); - __mrss_write_real_tag (tag->children, func, obj, index + 1); - } - - if (tag->children || tag->value) - { - if (tag->children) - for (i = 0; i < index; i++) - func (obj, " "); - - if (tag->ns) - func (obj, "</ns0:%s>\n", tag->name); - else - func (obj, "</%s>\n", tag->name); - - } - else - func (obj, "/>\n"); - - while (namespaces) - { - nstmp = namespaces; - namespaces = namespaces->next; - free (nstmp); - } - - tag = tag->next; - } -} - -static void -__mrss_write_real_item (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - mrss_item_t *item = mrss->item; - - while (item) - { - func (obj, " %s<item>\n", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - - if (item->title) - { - func (obj, " %s<title>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, item->title); - func (obj, "</title>\n"); - } - - if (item->link) - { - func (obj, " %s<link>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, item->link); - func (obj, "</link>\n"); - } - - if (item->description) - { - func (obj, " %s<description>", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - __mrss_write_string (func, obj, item->description); - func (obj, "</description>\n"); - } - - if (mrss->version == MRSS_VERSION_2_0) - { - if (item->author) - { - func (obj, " <author>"); - __mrss_write_string (func, obj, item->author); - func (obj, "</author>\n"); - } - - if (item->comments) - { - func (obj, " <comments>"); - __mrss_write_string (func, obj, item->comments); - func (obj, "</comments>\n"); - } - - if (item->pubDate) - { - func (obj, " <pubDate>"); - __mrss_write_string (func, obj, item->pubDate); - func (obj, "</pubDate>\n"); - } - - if (item->guid) - { - func (obj, " <guid isPermaLink=\"%s\">", - item->guid_isPermaLink ? "true" : "false"); - __mrss_write_string (func, obj, item->guid); - func (obj, "</guid>\n"); - } - - } - - if (mrss->version == MRSS_VERSION_2_0 - || mrss->version == MRSS_VERSION_0_92) - { - if (item->source || item->source_url) - { - func (obj, " <source"); - - if (item->source_url) - { - func (obj, " url=\""); - __mrss_write_string (func, obj, item->source_url); - func (obj, "\""); - } - - if (item->source) - { - func (obj, ">"); - __mrss_write_string (func, obj, item->source); - func (obj, "</source>\n"); - } - else - func (obj, " />\n"); - } - } - - if (item->enclosure || item->enclosure_length || item->enclosure_type) - { - func (obj, " <enclosure"); - - if (item->enclosure_url) - { - func (obj, " url=\""); - __mrss_write_string (func, obj, item->enclosure_url); - func (obj, "\""); - } - - if (item->enclosure_length) - func (obj, " length=\"%d\"", item->enclosure_length); - - if (item->enclosure_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, item->enclosure_type); - func (obj, "\""); - } - - if (item->enclosure) - { - func (obj, ">"); - __mrss_write_string (func, obj, item->enclosure); - func (obj, "</enclosure>\n"); - } - else - func (obj, " />\n"); - - } - - __mrss_write_real_category (mrss, item->category, func, obj); - - if (item->other_tags) - __mrss_write_real_tag (item->other_tags, func, obj, 1); - - func (obj, " %s</item>\n", - mrss->version == MRSS_VERSION_1_0 ? "" : " "); - - item = item->next; - } - -} - -static void -__mrss_write_real_atom_category (mrss_category_t * category, - void (*func) (void *, char *, ...), - void *obj) -{ - while (category) - { - func (obj, " <category"); - - if (category->domain) - { - func (obj, " scheme=\""); - __mrss_write_string (func, obj, category->domain); - func (obj, "\""); - } - - if (category->category) - { - func (obj, " term=\""); - __mrss_write_string (func, obj, category->category); - func (obj, "\""); - } - - if (category->label) - { - func (obj, " label=\""); - __mrss_write_string (func, obj, category->label); - func (obj, "\""); - } - - func (obj, "/>\n"); - - category = category->next; - } -} - -static void -__mrss_write_real_atom_entry (mrss_t * mrss, - void (*func) (void *, char *, ...), void *obj) -{ - mrss_item_t *item = mrss->item; - - while (item) - { - func (obj, " <entry>\n"); - - if (item->title) - { - func (obj, " <title"); - - if (item->title_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, item->title_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, item->title); - func (obj, "</title>\n"); - } - - if (item->link) - { - func (obj, " <link>"); - __mrss_write_string (func, obj, item->link); - func (obj, "</link>\n"); - } - - if (item->description) - { - func (obj, " <summary"); - - if (item->description_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, item->description_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, item->description); - func (obj, "</summary>\n"); - } - - if (item->copyright) - { - func (obj, " <rights>"); - __mrss_write_string (func, obj, item->copyright); - func (obj, "</rights>\n"); - } - - if (item->author) - { - func (obj, " <author>\n"); - func (obj, " <name>"); - __mrss_write_string (func, obj, item->author); - func (obj, "</name>\n"); - - if (item->author_email) - { - func (obj, " <email>"); - __mrss_write_string (func, obj, item->author_email); - func (obj, "</email>\n"); - } - - if (item->author_uri) - { - func (obj, " <uri>"); - __mrss_write_string (func, obj, item->author_uri); - func (obj, "</uri>\n"); - } - - func (obj, " </author>\n"); - } - - if (item->contributor) - { - func (obj, " <contributor>\n"); - func (obj, " <name>"); - __mrss_write_string (func, obj, item->contributor); - func (obj, "</name>\n"); - - if (item->contributor_email) - { - func (obj, " <email>"); - __mrss_write_string (func, obj, item->contributor_email); - func (obj, "</email>\n"); - } - - if (item->contributor_uri) - { - func (obj, " <uri>"); - __mrss_write_string (func, obj, item->contributor_uri); - func (obj, "</uri>\n"); - } - - func (obj, " </contributor>\n"); - } - - /* TODO */ - if (mrss->pubDate) - { - if (mrss->version == MRSS_VERSION_ATOM_1_0) - { - func (obj, " <published>"); - __mrss_write_string (func, obj, item->pubDate); - func (obj, "</published>\n"); - } - else - { - func (obj, " <issued>"); - __mrss_write_string (func, obj, item->pubDate); - func (obj, "</issued>\n"); - } - } - - if (item->guid) - { - func (obj, " <id>"); - __mrss_write_string (func, obj, item->guid); - func (obj, "</id>\n"); - } - - __mrss_write_real_atom_category (item->category, func, obj); - - if (item->other_tags) - __mrss_write_real_tag (item->other_tags, func, obj, 1); - - func (obj, " </entry>\n"); - - item = item->next; - } -} - -static mrss_error_t -__mrss_write_atom (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - func (obj, "<feed xmlns=\"http://www.w3.org/2005/Atom\""); - - if (mrss->language) - func (obj, " xml:lang=\"%s\"", mrss->language); - - if (mrss->version == MRSS_VERSION_ATOM_0_3) - func (obj, " version=\"0.3\""); - - func (obj, ">\n"); - - func (obj, " <title"); - - if (mrss->title_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, mrss->title_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, mrss->title); - func (obj, "</title>\n"); - - if (mrss->description) - { - if (mrss->version == MRSS_VERSION_ATOM_1_0) - { - func (obj, " <subtitle"); - - if (mrss->description_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, mrss->description_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, mrss->description); - func (obj, "</subtitle>\n"); - } - else - { - func (obj, " <tagline"); - - if (mrss->description_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, mrss->description_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, mrss->description); - func (obj, "</tagline>\n"); - } - } - - if (mrss->link) - { - func (obj, " <link href=\""); - __mrss_write_string (func, obj, mrss->link); - func (obj, "\"/>\n"); - } - - if (mrss->id) - { - func (obj, " <id>"); - __mrss_write_string (func, obj, mrss->id); - func (obj, "</id>\n"); - } - - if (mrss->copyright) - { - func (obj, " <rights"); - - if (mrss->copyright_type) - { - func (obj, " type=\""); - __mrss_write_string (func, obj, mrss->copyright_type); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, mrss->copyright); - func (obj, "</rights>\n"); - } - - /* TODO */ - if (mrss->lastBuildDate) - { - func (obj, " <updated>"); - __mrss_write_string (func, obj, mrss->lastBuildDate); - func (obj, "</updated>\n"); - } - - if (mrss->managingeditor) - { - func (obj, " <author>\n"); - func (obj, " <name>"); - __mrss_write_string (func, obj, mrss->managingeditor); - func (obj, "</name>\n"); - - if (mrss->managingeditor_email) - { - func (obj, " <email>"); - __mrss_write_string (func, obj, mrss->managingeditor_email); - func (obj, "</email>\n"); - } - - if (mrss->managingeditor_uri) - { - func (obj, " <uri>"); - __mrss_write_string (func, obj, mrss->managingeditor_uri); - func (obj, "</uri>\n"); - } - - func (obj, " </author>\n"); - } - - if (mrss->generator) - { - func (obj, " <generator"); - - if (mrss->generator_uri) - { - func (obj, " uri=\""); - __mrss_write_string (func, obj, mrss->generator_uri); - func (obj, "\""); - } - - if (mrss->generator_version) - { - func (obj, " version=\""); - __mrss_write_string (func, obj, mrss->generator_version); - func (obj, "\""); - } - - func (obj, ">"); - __mrss_write_string (func, obj, mrss->generator); - func (obj, "</generator>\n"); - } - - if (mrss->image_url) - { - func (obj, " <icon>"); - __mrss_write_string (func, obj, mrss->image_url); - func (obj, "</icon>\n"); - } - - if (mrss->image_logo) - { - func (obj, " <logo>"); - __mrss_write_string (func, obj, mrss->image_logo); - func (obj, "</logo>\n"); - } - - __mrss_write_real_atom_category (mrss->category, func, obj); - - __mrss_write_real_atom_entry (mrss, func, obj); - - if (mrss->other_tags) - __mrss_write_real_tag (mrss->other_tags, func, obj, 0); - - func (obj, "</feed>\n"); - - return MRSS_OK; -} - -static mrss_error_t -__mrss_write_real (mrss_t * mrss, void (*func) (void *, char *, ...), - void *obj) -{ - func (obj, "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); - - if (mrss->version == MRSS_VERSION_1_0) - func (obj, - "<rdf:RDF\n" - " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n" - " xmlns=\"http://purl.org/rss/1.0/\">\n"); - - else if (mrss->version == MRSS_VERSION_ATOM_1_0 - || mrss->version == MRSS_VERSION_ATOM_0_3) - return __mrss_write_atom (mrss, func, obj); - - else - { - func (obj, "<rss version=\""); - - switch (mrss->version) - { - case MRSS_VERSION_0_91: - func (obj, "0.91"); - break; - - case MRSS_VERSION_0_92: - func (obj, "0.92"); - break; - - case MRSS_VERSION_2_0: - func (obj, "2.0"); - break; - - default: - break; - } - - func (obj, "\">\n"); - } - - if (mrss->version == MRSS_VERSION_1_0 && mrss->about) - { - func (obj, " <channel rdf:about=\""); - __mrss_write_string (func, obj, mrss->about); - func (obj, "\">\n"); - } - - else - func (obj, " <channel>\n"); - - if (mrss->title) - { - func (obj, " <title>"); - __mrss_write_string (func, obj, mrss->title); - func (obj, "</title>\n"); - } - - if (mrss->description) - { - func (obj, " <description>"); - __mrss_write_string (func, obj, mrss->description); - func (obj, "</description>\n"); - } - - if (mrss->link) - { - func (obj, " <link>"); - __mrss_write_string (func, obj, mrss->link); - func (obj, "</link>\n"); - } - - if (mrss->language && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <language>"); - __mrss_write_string (func, obj, mrss->language); - func (obj, "</language>\n"); - } - - if (mrss->rating && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <rating>"); - __mrss_write_string (func, obj, mrss->rating); - func (obj, "</rating>\n"); - } - - if (mrss->copyright && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <copyright>"); - __mrss_write_string (func, obj, mrss->copyright); - func (obj, "</copyright>\n"); - } - - if (mrss->pubDate && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <pubDate>"); - __mrss_write_string (func, obj, mrss->pubDate); - func (obj, "</pubDate>\n"); - } - - if (mrss->lastBuildDate && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <lastBuildDate>"); - __mrss_write_string (func, obj, mrss->lastBuildDate); - func (obj, "</lastBuildDate>\n"); - } - - if (mrss->docs && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <docs>"); - __mrss_write_string (func, obj, mrss->docs); - func (obj, "</docs>\n"); - } - - if (mrss->managingeditor && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <managingeditor>"); - __mrss_write_string (func, obj, mrss->managingeditor); - func (obj, "</managingeditor>\n"); - } - - if (mrss->webMaster && mrss->version != MRSS_VERSION_1_0) - { - func (obj, " <webMaster>"); - __mrss_write_string (func, obj, mrss->webMaster); - func (obj, "</webMaster>\n"); - } - - if (mrss->version == MRSS_VERSION_2_0) - { - if (mrss->generator) - { - func (obj, " <generator>"); - __mrss_write_string (func, obj, mrss->generator); - func (obj, "</generator>\n"); - } - - if (mrss->ttl) - func (obj, " <ttl>%d</ttl>\n", mrss->ttl); - } - - if (mrss->version == MRSS_VERSION_1_0) - { - if (mrss->image_url) - { - func (obj, " <image rdf:resource=\""); - __mrss_write_string (func, obj, mrss->image_url); - func (obj, "\" />\n"); - } - - if (mrss->textinput_link) - { - func (obj, " <textinput rdf:resource=\""); - __mrss_write_string (func, obj, mrss->textinput_link); - func (obj, "\" />\n"); - } - - if (mrss->item) - { - mrss_item_t *item = mrss->item; - - func (obj, " <items>\n" " <rdf:Seq>\n"); - while (item) - { - func (obj, " <rdf:li rdf:resource=\""); - __mrss_write_string (func, obj, item->link); - func (obj, "\" />\n"); - item = item->next; - } - func (obj, " </rdf:Seq>\n" " </items>\n"); - } - - func (obj, " </channel>\n"); - } - - __mrss_write_real_image (mrss, func, obj); - - __mrss_write_real_textinput (mrss, func, obj); - - __mrss_write_real_cloud (mrss, func, obj); - - __mrss_write_real_skipHours (mrss, func, obj); - - __mrss_write_real_skipDays (mrss, func, obj); - - __mrss_write_real_category (mrss, mrss->category, func, obj); - - if (mrss->other_tags) - __mrss_write_real_tag (mrss->other_tags, func, obj, 1); - - __mrss_write_real_item (mrss, func, obj); - - if (mrss->version != MRSS_VERSION_1_0) - func (obj, " </channel>\n" "</rss>\n"); - else - func (obj, "</rdf:RDF>\n"); - - return MRSS_OK; -} - -static void -__mrss_file_write (void *obj, char *str, ...) -{ - va_list va; - - va_start (va, str); - vfprintf ((FILE *) obj, str, va); - va_end (va); -} - -static void -__mrss_buffer_write (void *obj, char *str, ...) -{ - va_list va; - char s[4096]; - int len; - char **buffer = (char **) obj; - - va_start (va, str); - len = vsnprintf (s, sizeof (s), str, va); - va_end (va); - - if (!*buffer) - { - if (!(*buffer = (char *) malloc (sizeof (char) * (len + 1)))) - return; - - strncpy (*buffer, s, len + 1); - } - else - { - if (!(*buffer = (char *) realloc (*buffer, - sizeof (char) * (strlen (*buffer) + - len + 1)))) - return; - strncat (*buffer, s, len + 1); - } -} - -/*************************** EXTERNAL FUNCTION ******************************/ - -mrss_error_t -mrss_write_file (mrss_t * mrss, char *file) -{ - FILE *fl; - mrss_error_t ret; - - if (!mrss || !file) - return MRSS_ERR_DATA; - - if (!(fl = fopen (file, "wb"))) - return MRSS_ERR_POSIX; - - ret = __mrss_write_real (mrss, __mrss_file_write, fl); - fclose (fl); - - return ret; -} - -mrss_error_t -mrss_write_buffer (mrss_t * mrss, char **buffer) -{ - if (!mrss || !buffer) - return MRSS_ERR_DATA; - - return __mrss_write_real (mrss, __mrss_buffer_write, buffer); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/meson.build b/plugins/backend/local/libnxml/meson.build deleted file mode 100644 index 1eaa8ed8..00000000 --- a/plugins/backend/local/libnxml/meson.build +++ /dev/null @@ -1,19 +0,0 @@ -nxml_inc = include_directories('.') -nxml_lib = static_library( - 'nxml', - [ - 'nxml_download.c', - 'nxml_easy.c', - 'nxml_edit.c', - 'nxml_error.c', - 'nxml_free.c', - 'nxml_init.c', - 'nxml_namespace.c', - 'nxml_parser.c', - 'nxml_string.c', - 'nxml_tools.c', - 'nxml_utf.c', - 'nxml_write.c' - ], - include_directories: nxml_inc -) diff --git a/plugins/backend/local/libnxml/nxml.h b/plugins/backend/local/libnxml/nxml.h deleted file mode 100644 index 0406038b..00000000 --- a/plugins/backend/local/libnxml/nxml.h +++ /dev/null @@ -1,947 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __N_XML_H__ -#define __N_XML_H__ - -#include <curl/curl.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <stdarg.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> - -#define LIBNXML_VERSION_STRING "0.18.3" - -#define LIBNXML_MAJOR_VERSION 0 -#define LIBNXML_MINOR_VERSION 18 -#define LIBNXML_MICRO_VERSION 3 - -typedef struct nxml_t nxml_t; -typedef struct nxml_data_t nxml_data_t; -typedef struct nxml_attr_t nxml_attr_t; -typedef struct nxml_doctype_t nxml_doctype_t; -typedef struct nxml_namespace_t nxml_namespace_t; - -typedef struct __nxml_private_t __nxml_private_t; -typedef struct __nxml_entity_t __nxml_entity_t; - -/** This enum describes the error type of libnxml */ -typedef enum { - NXML_OK = 0, /**< No error */ - NXML_ERR_POSIX, /**< For the correct error, use errno */ - NXML_ERR_PARSER, /**< Parser error */ - NXML_ERR_DOWNLOAD, /**< Download error */ - NXML_ERR_DATA /**< The parameters are incorrect */ -} nxml_error_t; - -/** This enum describes the type of data element of libnxml */ -typedef enum { - NXML_TYPE_TEXT, /**< Text element */ - NXML_TYPE_COMMENT, /**< Comment element */ - NXML_TYPE_ELEMENT, /**< Data element */ - NXML_TYPE_PI, /**< PI element */ - NXML_TYPE_ELEMENT_CLOSE /**< Data element - For internal use only */ -} nxml_type_t; - -/** This enum describes the supported XML version */ -typedef enum { - NXML_VERSION_1_1, /**< XML 1.1 */ - NXML_VERSION_1_0 /**< XML 1.0 */ -} nxml_version_t; - -/** This enum describes the CharSet of XML document */ -typedef enum { - NXML_CHARSET_UTF8, /**< UTF8 chatset detected */ - NXML_CHARSET_UTF16LE, /**< UTF 16 Little Endian detected */ - NXML_CHARSET_UTF16BE, /**< UTF 16 Big Endian detected */ - NXML_CHARSET_UCS4_1234, /**< UCS 4byte order 1234 detected */ - NXML_CHARSET_UCS4_4321, /**< UCS 3byte order 4321 detected */ - NXML_CHARSET_UCS4_2143, /**< UCS 3byte order 2143 detected */ - NXML_CHARSET_UCS4_3412, /**< UCS 3byte order 3412 detected */ - NXML_CHARSET_UNKNOWN /**< Unknown format */ -} nxml_charset_t; - -/** - * Data struct for any element of XML stream/files - * - * \brief - * Data struct for any element of XML streams/files - */ -struct nxml_data_t -{ - nxml_type_t type; /**< type of this nxml_data_t struct */ - - char *value; /**< The value of this data struct */ - - nxml_attr_t *attributes; /**< List of attributes of this struct. - This list exists only if - type == NXML_TYPE_ELEMENT */ - - nxml_namespace_t *ns; /**< Pointer to the correct namespace */ - nxml_namespace_t *ns_list; /**< The namespaces in this element */ - - nxml_data_t *children; /**< The children of this data struct */ - nxml_data_t *next; /**< The next element */ - - nxml_data_t *parent; /**< The parent */ - nxml_t *doc; /**< The nxml_t */ -}; - -/** - * Data struct for any element of attribute of xml element - * - * \brief - * Data struct for any element of attribute of xml element - */ -struct nxml_attr_t -{ - char *name; - char *value; - - nxml_namespace_t *ns; - - nxml_attr_t *next; -}; - -/** - * Data struct for doctype elements - * - * \brief - * Data struct for doctype elements - */ -struct nxml_doctype_t -{ - char *value; /**< The string no parsers */ - char *name; /**< The name of current doctype */ - - nxml_t *doc; /**< The nxml_t */ - nxml_doctype_t *next; -}; - -/** - * Data struct for namespace - * - * \brief - * Data struct for namespace - */ -struct nxml_namespace_t -{ - char *prefix; - char *ns; - nxml_namespace_t *next; -}; - -/** Data struct private about entities for internal use only - * - * \brief - * Data struct private about entities for internal use only - */ -struct __nxml_entity_t -{ - char *name; - char *entity; - - __nxml_entity_t *next; -}; - -/** Data struct private for internal use only - * - * \brief - * Data struct private for internal use only - */ -struct __nxml_private_t -{ - void (*func)(char *, ...); - int line; - int timeout; - char *proxy; - char *proxy_authentication; - char *cacert; - char *certfile; - char *password; - int verifypeer; - char *authentication; - char *user_agent; - char textindent; - - CURLcode curl_error; - - __nxml_entity_t *entities; -}; - -/** - * Principal data struct. It describes a XML document and it contains pointers - * to any other structures. - * - * \brief - * Principal data struct. It describes a XML document and it contains pointers - * to any other structures */ -struct nxml_t -{ - - char *file; /**< XML document filename or url */ - size_t size; /**< Size of XML document in byte */ - - nxml_version_t version; /**< XML document version */ - int standalone; /**< This document is standalone ? */ - char *encoding; /**< Encoding type */ - - nxml_charset_t charset_detected; /**< charset detected when the a - XML document is parsed. The document - will be convert to UTF-8 */ - - nxml_data_t *data; /**< The data of XML document */ - nxml_doctype_t *doctype; /**< The doctype of XML document */ - - __nxml_private_t priv; /**< For internal use only */ -}; - -/* INIT FUNCTIONS ************************************************************/ - -/** - * This function creates a new nxml_t data struct. - * - * \param nxml Pointer to a nxml_t data struct. It will be allocated. - * \return the error code - */ -nxml_error_t nxml_new(nxml_t **nxml); - -/** - * This function creates a new nxml_data_t child of a parent in the data - * struct. If parent is NULL the child will be created in the root level - * of XML document. - * - * \param nxml Pointer to a nxml_t data struct. - * \param parent The parent of new data struct child. If it is NULL, the - * child is in the root level. - * \param child It is the pointer to the new data struct. If *child is NULL, - * it will be allocated, else it will be insert as it is. - * \return the error code - * - * \code - * nxml_data_t *data1, *data2; - * data1=NULL; - * nxml_add(nxml, NULL, &data1); - * - * data2=(nxml_data_t *)malloc(sizeof(nxml_data_t)); - * nxml_add(nxml, NULL, &data2); - * \endcode - */ -nxml_error_t nxml_add(nxml_t *nxml, - nxml_data_t *parent, - nxml_data_t **child); - -/** - * This function removes a nxml_data_t child from a parent in the data - * struct. If parent is NULL the child will be removed in the root level of - * XML document. This function doesn't free the child. If you want you can - * reinsert the child in another parent tree or use the nxml_free_data - * function. - * - * \param nxml Pointer to a nxml_t data struct. - * \param parent The parent of data struct child. If it is NULL, the - * child will be searched in the root level. - * \param child It is the pointer to the child that you want remove - * \return the error code - */ -nxml_error_t nxml_remove(nxml_t *nxml, - nxml_data_t *parent, - nxml_data_t *child); - -/** - * This function creates a new nxml_attr_t data of a element in the data - * struct. - * - * \param nxml Pointer to a nxml_t data struct. - * \param element The element of the new data struct attribute. - * \param attribute The pointer to the your data struct. If it is NULL it will - * be allocated, else no. - * \return the error code - */ -nxml_error_t nxml_add_attribute(nxml_t *nxml, - nxml_data_t *element, - nxml_attr_t **attribute); - -/** - * This function removes a nxml_attr_t data of a element. It does not free it - * so you can reinsert o free it with nxml_free_attribute. - * - * \param nxml Pointer to a nxml_t data struct. - * \param element The element that contains the attribute - * \param attribute The attribute that you want remove. - * \return the error code - */ -nxml_error_t nxml_remove_attribute(nxml_t *nxml, - nxml_data_t *element, - nxml_attr_t *attribute); - -/** - * This function adds a nxml_namespace_t data in a nxml document. - * - * \param nxml Pointer to a nxml_t data struct. - * \param element The element of the new data struct namespace. - * \param ns The namespace that you want add - * \return the error code - */ -nxml_error_t nxml_add_namespace(nxml_t *nxml, - nxml_data_t *element, - nxml_namespace_t **ns); - -/** - * This function removes a nxml_namespace_t data from a nxml document. - * - * \param nxml Pointer to a nxml_t data struct. - * \param element The element of the new data struct namespace. - * \param ns The namespace that you want remove - * \return the error code - */ -nxml_error_t nxml_remove_namespace(nxml_t *nxml, - nxml_data_t *element, - nxml_namespace_t *ns); - -/** - * This function sets the output function. If you set your function, the - * parser'll write the error by this function. As default there is not a - * function. If you want tou can set 'nxml_print_general' function that - * print to stderr. - * - * \param nxml The struct create with nxml_new. - * \param func Your function. If you don't want the function, set it to NULL. - * As default a nxml_t element has not a output function. - * \return the error code - */ -nxml_error_t nxml_set_func(nxml_t *nxml, - void (*func)(char *, ...)); - -void nxml_print_generic(char *, ...); - -/** - * This function sets the timeout in seconds for the download of a remote - * XML document. Default is 0 and 0 is no timeout. - * - * \param nxml The struct create with nxml_new. - * \param seconds the timeout in seconds - * \return the error code - */ -nxml_error_t nxml_set_timeout(nxml_t *nxml, - int seconds); - -/** - * This functions sets a proxy server for the downloading procedure. - * - * \param nxml The struct create with nxml_new. - * \param proxy the proxy as a string - * \param userpwd the user and password in this format user:password - * \return the error code - */ -nxml_error_t nxml_set_proxy(nxml_t *nxml, - char *proxy, - char *userpwd); - -/** - * This functions sets a user/password for a for the download procedure. - * - * \param nxml The struct create with nxml_new. - * \param userpwd the user and password in this format user:password - * \return the error code - */ -nxml_error_t nxml_set_authentication(nxml_t *nxml, - char *userpwd); - -/** - * This functions sets an user agent for a for the download procedure. - * - * \param nxml The struct create with nxml_new. - * \param user_agent The agent - * \return the error code - */ -nxml_error_t nxml_set_user_agent(nxml_t *nxml, - char *user_agent); - -/** - * This functions sets a certificate in the http request. You can set a - * certificate file and a password. - * - * \param nxml The struct create with nxml_new. - * \param certfile the certfile for the ssl connection (can be NULL) - * \param password the password of your certifcate (can be NULL) - * \param cacert the CA certificate to verify peer against (can be NULL) - * \param verifypeer active/deactive the peer validation - * \return the error code - */ -nxml_error_t nxml_set_certificate(nxml_t *nxml, - char *certfile, - char *password, - char *cacert, - int verifypeer); - -/** - * This function (de)actives the indent of the TEXT elements. Default it is - * activated. - * - * \param nxml The struct create with nxml_new - * \param textindent If it is != 0, the indent will be activated - * \return the error code - */ -nxml_error_t nxml_set_textindent(nxml_t *nxml, - char textindent); - -/* DOWNLOAD *****************************************************************/ - -/** - * This function downloads a stream from a http/https/ftp server. - * - * \param nxml The struct create with nxml_new. - * \param url the http file - * \param buffer a string for the buffer - * \param size The function sets here the length of the file if it's not NULL. - * \return a buffer or NULL - */ -nxml_error_t nxml_download_file(nxml_t *nxml, - char *url, - char **buffer, - size_t *size); - -/* PARSER FUNCTIONS *********************************************************/ - -/** - * This function parses a url. It downloads a url with curl library and - * parses it. - * - * \param nxml the struct create with nxml_new. - * \param url the url that you want parse. - * \return the error code - */ -nxml_error_t nxml_parse_url(nxml_t *nxml, - char *url); - -/** - * This function parses a file. - * - * \param nxml the struct create with nxml_new. - * \param file the file that you want parse. - * \return the error code - */ -nxml_error_t nxml_parse_file(nxml_t *nxml, - char *file); - -/** - * This function parses a buffer in memory. - * - * \param nxml the struct create with nxml_new. - * \param buffer the buffer that you want parse. - * \param size the size of buffer. If size is 0, the function checks the - * length of your buffer searching a '\\0'. - * \return the error code - */ -nxml_error_t nxml_parse_buffer(nxml_t *nxml, - char *buffer, - size_t size); - -/* WRITE FUNCTIONS **********************************************************/ - -/** - * This function writes the data struct in a local file. - * - * \param nxml the nxml data strut - * \param file the local file - * \return the error code - */ -nxml_error_t nxml_write_file(nxml_t *nxml, - char *file); - -/** - * This function writes the data struct in a buffer. - * - * \code - * char *buffer; - * buffer=NULL; // This is important! - * nxml_write_buffer(nxml, &buffer); - * \endcode - * - * The buffer must be NULL. - * - * \param nxml - * \param buffer the memory buffer - * \return the error code - */ -nxml_error_t nxml_write_buffer(nxml_t *nxml, - char **buffer); - -/* FREE FUNCTIONS ************************************************************/ - -/** - * This function removes the data in a structure nxml_t and makes it clean for - * another usage. - * - * \param nxml the pointer to you data struct. - * \return the error code. - */ -nxml_error_t nxml_empty(nxml_t *nxml); - -/** - * This function frees the memory of a nxml_t *element. After the free, - * your data struct is not useful. If you want erase the internal data, use - * nxml_empty function - * - * \param nxml the pointer to your data struct. - * \return the error code. - */ -nxml_error_t nxml_free(nxml_t *nxml); - -/** - * This function frees the memory of a nxml_data_t *element and any its - * children and its attributes. - * - * \param data the pointer to you data struct. - * \return the error code - */ -nxml_error_t nxml_free_data(nxml_data_t *data); - -/** - * This function frees the memory of a nxml_attr_t *element. - * - * \param data the pointer to you data struct. - * \return the error code - */ -nxml_error_t nxml_free_attribute(nxml_attr_t *data); - -/** - * This function frees the memory of a nxml_namespace_t *element. - * - * \param data the pointer to you data struct. - * \return the error code - */ -nxml_error_t nxml_free_namespace(nxml_namespace_t *data); - -/* EDIT FUNCTIONS ***********************************************************/ - -/** - * This function returns the root element of xml data struct. - * - * \code - * nxml_t *nxml; - * nxml_data_t *root; - * - * nxml_new(&nxml); - * nxml_parser_file(nxml, "file.xml"); - * nxml_root_element(nxml, &root); - * printf("%p\n",root); - * nxml_free(nxml); - * \endcode - * - * \param nxml the data struct - * \param element the pointer to your nxml_data_t struct - * \return the error code - */ -nxml_error_t nxml_root_element(nxml_t *nxml, - nxml_data_t **element); - -/** - * This function searchs the request element in the children of the data struct. - * - * \code - * nxml_t *nxml; - * nxml_data_t *root; - * - * nxml_new(&nxml); - * nxml_parser_file(nxml, "file.xml"); - * nxml_find_element(nxml, NULL, "hello_world", &root); - * printf("%p\n",root); - * nxml_free(nxml); - * \endcode - * - * \param nxml the data struct - * \param parent the data struct nxml_data_t of parent. If it is NULL, this - * function searchs in the root element level. - * \param name the name of the node that you want. - * \param element the pointer to your nxml_data_t struct. If element will be - * NULL, the item that you want does not exist. - * \return the error code - */ -nxml_error_t nxml_find_element(nxml_t *nxml, - nxml_data_t *parent, - char *name, - nxml_data_t **element); - -/** - * This function searchs the first doctype element in the nxml_t document. - * - * \param nxml the data struct - * \param doctype the pointer to your nxml_doctype_t struct. If element will be - * NULL, the item that you want does not exist. - * \return the error code - */ -nxml_error_t nxml_doctype_element(nxml_t *nxml, - nxml_doctype_t **doctype); - -/** - * This function searchs the request attribute and returns its values. - * - * \code - * nxml_t *nxml; - * nxml_data_t *root; - * - * nxml_new(&nxml); - * nxml_parser_file(nxml, "file.xml"); - * nxml_find_element(nxml, NULL, "hello_world", &root); - * if(root) { - * nxml_attr_t *attribute=NULL; - * nxml_find_attribute(root, "attribute", &attribute); - * - * if(attribute) - * printf("%s\n",attribute->value); - * } - * nxml_free(nxml); - * \endcode - * - * \param data the data struct - * \param name the attribute that you want search - * \param attribute the pointer to your nxml_attr_t struct. If attribute will - * be NULL, the attribute that you want does not exist. - * does not exist. - * \return the error code - */ -nxml_error_t nxml_find_attribute(nxml_data_t *data, - char *name, - nxml_attr_t **attribute); - -/** - * This function searchs the request namespaceibute and returns its values. - * - * \param data the data struct - * \param name the namespace that you want search - * \param ns the pointer to your nxml_attr_t struct. If namespace will - * be NULL, the namespace that you want does not exist. - * does not exist. - * \return the error code - */ -nxml_error_t nxml_find_namespace(nxml_data_t *data, - char *name, - nxml_namespace_t **ns); - -/** - * This function returns the string of a XML element. - * \code - * nxml_t *nxml; - * nxml_data_t *root; - * char *str; - * - * nxml_new(&nxml); - * nxml_parser_file(nxml, "file.xml"); - * nxml_find_element(nxml, NULL, "hello_world", &root); - * if(root) { - * nxml_get_string(root, &str); - * if(str) { - * printf("Hello_world item contains: %s\n",str); - * free(str); - * } - * } - * nxml_free(nxml); - * \endcode - * - * \param element the xnml_data_t pointer - * \param string the pointer to you char *. You must free it after usage. - * \return the error code - */ -nxml_error_t nxml_get_string(nxml_data_t *element, - char **string); - -/* ERROR FUNCTIONS **********************************************************/ - -/** - * This function returns a static string with the description of error code - * - * \param nxml the pointer to data struct - * \param err the error code that you need as string - * \return a string. Don't free this string! - */ -char *nxml_strerror(nxml_t *nxml, - nxml_error_t err); - -/** - * This function returns the CURLcode error if there was a problem about the - * downloading procedure: - * - * \param nxml the pointer to data struct - * \param err the error code that you need as string - * \return the CURLcode - */ -CURLcode nxml_curl_error(nxml_t *nxml, - nxml_error_t err); - -/** - * This function return the line of a error of parse. - * - * \param nxml the pointer to data struct - * \param line pointer to your integer. In this pointer will be set the line. - * \return the error code - */ -nxml_error_t nxml_line_error(nxml_t *nxml, - int *line); - -/* EASY FUNCTIONS ***********************************************************/ - -/** - * This function returns a new nxml_t data. - * - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_t data. If it returns NULL, read the err - * code. This function use nxml_set_func with nxml_print_generic so the - * error will be write in the standard output. - */ -nxml_t *nxmle_new_data(nxml_error_t *err); - -/** - * This function returns a new nxml_t data and parses a remote url document - * from http or ftp protocol. This function use nxml_set_func with - * nxml_print_generic so the error will be write in the standard output. - * - * \param url the url that you want parse. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_t data. - */ -nxml_t *nxmle_new_data_from_url(char *url, - nxml_error_t *err); - -/** - * This function returns a new nxml_t data and parses a local file. This - * function use nxml_set_func with nxml_print_generic so the error will be - * write in the standard output. - * - * \param file the file that you want parse. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_t data. - */ -nxml_t *nxmle_new_data_from_file(char *file, - nxml_error_t *err); - -/** - * This function returns a new nxml_t data and parses a buffer. This - * function use nxml_set_func with nxml_print_generic so the error will be - * write in the standard output. - * - * \param buffer the buffer that you want parse. - * \param size the size of buffer. If size is 0, the function checks the - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_t data. - */ -nxml_t *nxmle_new_data_from_buffer(char *buffer, - size_t size, - nxml_error_t *err); - -/** - * This function creates and adds a child nxml_data_t to a parent in your - * nxml data struct. - * - * \param nxml Pointer to your nxml data. - * \param parent The parent of new data struct child. If it is NULL, the - * child is in the root level. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_data_t *nxmle_add_new(nxml_t *nxml, - nxml_data_t *parent, - nxml_error_t *err); - -/** - * This function adds a your nxml_data_t to a parent in your nxml - * data struct. - * - * \param nxml Pointer to your nxml data. - * \param parent The parent of new data struct child. If it is NULL, the - * child is in the root level. - * \param child The you child nxml_data_t struct that you want insert. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_data_t *nxmle_add_data(nxml_t *nxml, - nxml_data_t *parent, - nxml_data_t *child, - nxml_error_t *err); - -/** - * This function creates and adds an attribute nxml_attr_t data to a - * nxml_data_t struct in your nxml data struct. - * - * \param nxml Pointer to your nxml data. - * \param element The parent of new nxml_attr_t struct. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_attr_t *nxmle_add_attribute_new(nxml_t *nxml, - nxml_data_t *element, - nxml_error_t *err); - -/** - * This function adds an attribute nxml_attr_t data to a - * nxml_data_t struct in your nxml data struct. - * - * \param nxml Pointer to your nxml data. - * \param element The parent of your nxml_attr_t struct. - * \param attribute Your attribute element. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_attr_t *nxmle_add_attribute_data(nxml_t *nxml, - nxml_data_t *element, - nxml_attr_t *attribute, - nxml_error_t *err); - -/** - * This function creates and adds a namespace nxml_namespace_t data to a - * nxml data struct. - * - * \param nxml Pointer to your nxml data. - * \param element The element of in witch you want add the namespace. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_namespace_t *nxmle_add_namespace_new(nxml_t *nxml, - nxml_data_t *element, - nxml_error_t *err); - -/** - * This function adds an namespace nxml_namespace-t data to a nxml data struct. - * - * \param nxml Pointer to your nxml data. - * \param element The element of in witch you want add the namespace. - * \param ns Your namespace element. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to a new nxml_data_t data child. - */ -nxml_namespace_t *nxmle_add_namespace_data(nxml_t *nxml, - nxml_data_t *element, - nxml_namespace_t *ns, - nxml_error_t *err); - -/** - * This function returns the root element of a nxml_t. - * - * \param nxml Pointer to your nxml data. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to the root element. If NULL the element does not - * exist. - */ -nxml_data_t *nxmle_root_element(nxml_t *nxml, - nxml_error_t *err); - -/** - * This function returns the first doctype element of a nxml_t. - * - * \param nxml Pointer to your nxml data. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to the doctype element. If NULL the element does not - * exist. - */ -nxml_doctype_t *nxmle_doctype_element(nxml_t *nxml, - nxml_error_t *err); - -/** - * This function returns the nxml_data_t pointer to a element by - * a name. - * - * \param nxml Pointer to your nxml data. - * \param parent Pointer to your nxml_data_t parent. If it is NULL, this - * function searchs in a root element level. - * \param name The name of element that you want. - * \param err If err is not NULL, err will be set to the error flag. - * \return the pointer to the root element. If NULL the element does not - * exist. - */ -nxml_data_t *nxmle_find_element(nxml_t *nxml, - nxml_data_t *parent, - char *name, - nxml_error_t *err); - -/** - * This function returns the value of a attribute by a name. - * - * \param element Pointer to your nxml_data_t. - * \param name The name of attribute that you want. - * \param err If err is not NULL, err will be set to the error flag. - * \return a pointer to a char allocated so you must free it after usage. If - * it is NULL, the attribute does not exist. - */ -char *nxmle_find_attribute(nxml_data_t *element, - char *name, - nxml_error_t *err); - -/** - * This function returns the value of a namespace by a name. - * - * \param element Pointer to your nxml_data_t. - * \param name The name of namespace that you want. - * \param err If err is not NULL, err will be set to the error flag. - * \return a pointer to a char allocated so you must free it after usage. If - * it is NULL, the namespace does not exist. - */ -char *nxmle_find_namespace(nxml_data_t *element, - char *name, - nxml_error_t *err); - -/** - * This function returns the contain of a element. - * - * \param element Pointer to your nxml_data_t. - * \param err If err is not NULL, err will be set to the error flag. - * \return a pointer to a char allocated so you must free it after usage. If - * it is NULL, the attribute does not exist. - */ -char *nxmle_get_string(nxml_data_t *element, - nxml_error_t *err); - -/** - * This function writes the data struct in a buffer. - * - * \param nxml - * \param err If err is not NULL, err will be set to the error flag. - * \return a pointer to a char allocated so you must free it after usage. - */ -char *nxmle_write_buffer(nxml_t *nxml, nxml_error_t *err); - -/** - * This function return the line of a error of parse. - * \param nxml the pointer to data struct - * \param err If err is not NULL, err will be set to the error flag. - * \return the line with the error. - */ -int nxmle_line_error(nxml_t *nxml, nxml_error_t *err); - -/* Easy functions defined: */ -#define nxmle_remove nxml_remove -#define nxmle_remove_attribute nxml_remove_attribute -#define nxmle_remove_namespace nxml_remove_namespace -#define nxmle_write_file nxml_write_file - -#define nxmle_empty nxml_empty -#define nxmle_free nxml_free -#define nxmle_free_data nxml_free_data -#define nxmle_free_attribute nxml_free_attribute - -#define nxmle_strerror nxml_strerror - -#include "nxml_internal.h" - -#endif - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_download.c b/plugins/backend/local/libnxml/nxml_download.c deleted file mode 100644 index 9f079bd3..00000000 --- a/plugins/backend/local/libnxml/nxml_download.c +++ /dev/null @@ -1,139 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -typedef struct __nxml_download_t__ __nxml_download_t; - -struct __nxml_download_t__ -{ - char *mm; - size_t size; -}; - -static size_t -__nxml_memorize_file(void *ptr, size_t size, size_t nmemb, void *data) -{ - register int realsize = size * nmemb; - __nxml_download_t *mem = (__nxml_download_t *)data; - - if (!mem->mm) - { - if (!(mem->mm = (char *)malloc(realsize + 1))) - return -1; - } - else - { - if (!(mem->mm = (char *)realloc(mem->mm, mem->size + realsize + 1))) - return -1; - } - - memcpy(&(mem->mm[mem->size]), ptr, realsize); - mem->size += realsize; - mem->mm[mem->size] = 0; - - return realsize; -} - -nxml_error_t -nxml_download_file(nxml_t *nxml, char *fl, char **buffer, size_t *size) -{ - __nxml_download_t *chunk; - CURL *curl; - CURLcode ret; - - if (!fl || !buffer || !nxml) - return NXML_ERR_DATA; - - if (!(chunk = (__nxml_download_t *)malloc(sizeof(__nxml_download_t)))) - return NXML_ERR_POSIX; - - chunk->mm = NULL; - chunk->size = 0; - - curl_global_init(CURL_GLOBAL_DEFAULT); - if (!(curl = curl_easy_init())) - { - free(chunk); - return NXML_ERR_POSIX; - } - - curl_easy_setopt(curl, CURLOPT_URL, fl); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, __nxml_memorize_file); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_FILE, (void *)chunk); - curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip, deflate"); - - if (nxml->priv.timeout) - curl_easy_setopt(curl, CURLOPT_TIMEOUT, nxml->priv.timeout); - - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, !nxml->priv.verifypeer); - - if (nxml->priv.certfile) - { - curl_easy_setopt(curl, CURLOPT_SSLCERT, nxml->priv.certfile); - - if (nxml->priv.password) - curl_easy_setopt(curl, CURLOPT_SSLCERTPASSWD, nxml->priv.password); - - if (nxml->priv.cacert) - curl_easy_setopt(curl, CURLOPT_CAINFO, nxml->priv.cacert); - } - - if (nxml->priv.authentication) - curl_easy_setopt(curl, CURLOPT_USERPWD, nxml->priv.authentication); - - if (nxml->priv.proxy) - { - curl_easy_setopt(curl, CURLOPT_PROXY, nxml->priv.proxy); - - if (nxml->priv.proxy_authentication) - curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, - nxml->priv.proxy_authentication); - } - - if (nxml->priv.user_agent) - curl_easy_setopt(curl, CURLOPT_USERAGENT, nxml->priv.user_agent); - - if ((ret = curl_easy_perform(curl))) - { - if (chunk->mm) - free(chunk->mm); - - free(chunk); - - nxml->priv.curl_error = ret; - - curl_easy_cleanup(curl); - return NXML_ERR_DOWNLOAD; - } - - curl_easy_cleanup(curl); - - *buffer = chunk->mm; - - if (size) - *size = chunk->size; - - free(chunk); - - return NXML_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_easy.c b/plugins/backend/local/libnxml/nxml_easy.c deleted file mode 100644 index 00690553..00000000 --- a/plugins/backend/local/libnxml/nxml_easy.c +++ /dev/null @@ -1,392 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -nxml_t * -nxmle_new_data(nxml_error_t *err) -{ - nxml_t *data = NULL; - nxml_error_t ret; - - ret = nxml_new(&data); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return data; -} - -nxml_t * -nxmle_new_data_from_url(char *url, nxml_error_t *err) -{ - nxml_t *data = NULL; - nxml_error_t ret; - - ret = nxml_new(&data); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - nxml_set_func(data, nxml_print_generic); - - ret = nxml_parse_url(data, url); - if (err) - *err = ret; - - if (ret != NXML_OK) - { - nxml_free(data); - return NULL; - } - - return data; -} - -nxml_t * -nxmle_new_data_from_file(char *file, nxml_error_t *err) -{ - nxml_t *data = NULL; - nxml_error_t ret; - - ret = nxml_new(&data); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - nxml_set_func(data, nxml_print_generic); - - ret = nxml_parse_file(data, file); - if (err) - *err = ret; - - if (ret != NXML_OK) - { - nxml_free(data); - return NULL; - } - - return data; -} - -nxml_t * -nxmle_new_data_from_buffer(char *buffer, size_t size, nxml_error_t *err) -{ - nxml_t *data = NULL; - nxml_error_t ret; - - ret = nxml_new(&data); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - nxml_set_func(data, nxml_print_generic); - - ret = nxml_parse_buffer(data, buffer, size); - if (err) - *err = ret; - - if (ret != NXML_OK) - { - nxml_free(data); - return NULL; - } - - return data; -} - -nxml_data_t * -nxmle_add_new(nxml_t *nxml, nxml_data_t *parent, nxml_error_t *err) -{ - nxml_error_t ret; - nxml_data_t *child = NULL; - - ret = nxml_add(nxml, parent, &child); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return child; -} - -nxml_data_t * -nxmle_add_data(nxml_t *nxml, nxml_data_t *parent, nxml_data_t *child, - nxml_error_t *err) -{ - nxml_error_t ret; - - if (!child) - { - if (err) - *err = NXML_ERR_DATA; - return NULL; - } - - ret = nxml_add(nxml, parent, &child); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return child; -} - -nxml_attr_t * -nxmle_add_attribute_new(nxml_t *nxml, nxml_data_t *element, - nxml_error_t *err) -{ - nxml_error_t ret; - nxml_attr_t *attribute = NULL; - - ret = nxml_add_attribute(nxml, element, &attribute); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return attribute; -} - -nxml_attr_t * -nxmle_add_attribute_data(nxml_t *nxml, nxml_data_t *element, - nxml_attr_t *attribute, nxml_error_t *err) -{ - nxml_error_t ret; - - if (!attribute) - { - if (err) - *err = NXML_ERR_DATA; - return NULL; - } - - ret = nxml_add_attribute(nxml, element, &attribute); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return attribute; -} - -nxml_namespace_t * -nxmle_add_namespace_new(nxml_t *nxml, nxml_data_t *element, - nxml_error_t *err) -{ - nxml_error_t ret; - nxml_namespace_t *namespace = NULL; - - ret = nxml_add_namespace(nxml, element, &namespace); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return namespace; -} - -nxml_namespace_t * -nxmle_add_namespace_data(nxml_t *nxml, nxml_data_t *element, - nxml_namespace_t *namespace, nxml_error_t *err) -{ - nxml_error_t ret; - - if (!namespace) - { - if (err) - *err = NXML_ERR_DATA; - return NULL; - } - - ret = nxml_add_namespace(nxml, element, &namespace); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return namespace; -} - -nxml_data_t * -nxmle_root_element(nxml_t *nxml, nxml_error_t *err) -{ - nxml_data_t *root; - nxml_error_t ret; - - ret = nxml_root_element(nxml, &root); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return root; -} - -nxml_doctype_t * -nxmle_doctype_element(nxml_t *nxml, nxml_error_t *err) -{ - nxml_doctype_t *doctype; - nxml_error_t ret; - - ret = nxml_doctype_element(nxml, &doctype); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return doctype; -} - -nxml_data_t * -nxmle_find_element(nxml_t *nxml, nxml_data_t *data, char *name, - nxml_error_t *err) -{ - nxml_data_t *element; - nxml_error_t ret; - - ret = nxml_find_element(nxml, data, name, &element); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return element; -} - -char * -nxmle_find_attribute(nxml_data_t *data, char *name, nxml_error_t *err) -{ - nxml_attr_t *attribute; - nxml_error_t ret; - char *str; - - ret = nxml_find_attribute(data, name, &attribute); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - if (!attribute) - return NULL; - - str = strdup(attribute->value); - if (!str) - { - if (err) - *err = NXML_ERR_POSIX; - return NULL; - } - - return str; -} - -char * -nxmle_find_namespace(nxml_data_t *data, char *name, nxml_error_t *err) -{ - nxml_namespace_t *namespace; - nxml_error_t ret; - char *str; - - ret = nxml_find_namespace(data, name, &namespace); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - if (!namespace) - return NULL; - - str = strdup(namespace->ns); - if (!str) - { - if (err) - *err = NXML_ERR_POSIX; - return NULL; - } - - return str; -} - -char * -nxmle_get_string(nxml_data_t *data, nxml_error_t *err) -{ - nxml_error_t ret; - char *str = NULL; - - ret = nxml_get_string(data, &str); - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return str; -} - -char * -nxmle_write_buffer(nxml_t *nxml, nxml_error_t *err) -{ - char *buffer; - nxml_error_t ret; - - buffer = NULL; - ret = nxml_write_buffer(nxml, &buffer); - - if (err) - *err = ret; - - if (ret != NXML_OK) - return NULL; - - return buffer; -} - -int nxmle_line_error(nxml_t *nxml, nxml_error_t *err) -{ - int line; - nxml_error_t ret; - - ret = nxml_line_error(nxml, &line); - - if (err) - *err = ret; - - return line; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_edit.c b/plugins/backend/local/libnxml/nxml_edit.c deleted file mode 100644 index 597dcaa4..00000000 --- a/plugins/backend/local/libnxml/nxml_edit.c +++ /dev/null @@ -1,184 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -nxml_error_t -nxml_root_element(nxml_t *nxml, nxml_data_t **data) -{ - nxml_data_t *tmp; - - if (!data || !nxml) - return NXML_ERR_DATA; - - tmp = nxml->data; - while (tmp) - { - - if (tmp->type == NXML_TYPE_ELEMENT) - break; - - tmp = tmp->next; - } - - *data = tmp; - - return NXML_OK; -} - -nxml_error_t -nxml_doctype_element(nxml_t *nxml, nxml_doctype_t **data) -{ - if (!data || !nxml) - return NXML_ERR_DATA; - - *data = nxml->doctype; - return NXML_OK; -} - -nxml_error_t -nxml_get_string(nxml_data_t *data, char **string) -{ - if (!data || !string) - return NXML_ERR_DATA; - - if (data->type == NXML_TYPE_TEXT) - *string = strdup(data->value); - - else if (data->type == NXML_TYPE_ELEMENT) - { - nxml_data_t *tmp; - - tmp = data->children; - *string = NULL; - - while (tmp) - { - if (tmp->type == NXML_TYPE_TEXT) - { - *string = strdup(tmp->value); - break; - } - tmp = tmp->next; - } - } - else - *string = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_find_element(nxml_t *nxml, nxml_data_t *data, char *name, - nxml_data_t **element) -{ - nxml_data_t *tmp; - - if (!nxml || !name || !element) - return NXML_ERR_DATA; - - if (data && data->type != NXML_TYPE_ELEMENT) - { - *element = NULL; - return NXML_OK; - } - - if (data) - tmp = data->children; - else - tmp = nxml->data; - - while (tmp) - { - if (tmp->type == NXML_TYPE_ELEMENT && !strcmp(tmp->value, name)) - { - *element = tmp; - return NXML_OK; - } - - tmp = tmp->next; - } - - *element = NULL; - return NXML_OK; -} - -nxml_error_t -nxml_find_attribute(nxml_data_t *data, char *name, nxml_attr_t **attribute) -{ - nxml_attr_t *tmp; - - if (!data || !name || !attribute) - return NXML_ERR_DATA; - - if (data->type != NXML_TYPE_ELEMENT) - { - *attribute = NULL; - return NXML_OK; - } - - tmp = data->attributes; - - while (tmp) - { - if (!strcmp(tmp->name, name)) - { - *attribute = tmp; - return NXML_OK; - } - - tmp = tmp->next; - } - - *attribute = NULL; - return NXML_OK; -} - -nxml_error_t -nxml_find_namespace(nxml_data_t *data, char *name, - nxml_namespace_t **namespace) -{ - nxml_namespace_t *tmp; - - if (!data || !name || !namespace) - return NXML_ERR_DATA; - - if (data->type != NXML_TYPE_ELEMENT) - { - *namespace = NULL; - return NXML_OK; - } - - tmp = data->ns_list; - - while (tmp) - { - if (!strcmp(tmp->ns, name)) - { - *namespace = tmp; - return NXML_OK; - } - - tmp = tmp->next; - } - - *namespace = NULL; - return NXML_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_error.c b/plugins/backend/local/libnxml/nxml_error.c deleted file mode 100644 index 604fd640..00000000 --- a/plugins/backend/local/libnxml/nxml_error.c +++ /dev/null @@ -1,63 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -char * -nxml_strerror(nxml_t *nxml, nxml_error_t err) -{ - switch (err) - { - case NXML_OK: - return "Success"; - - case NXML_ERR_PARSER: - return "Parser error"; - - case NXML_ERR_DOWNLOAD: - return nxml && nxml->priv.curl_error ? (char *)curl_easy_strerror(nxml->priv.curl_error) : "Download error"; - - case NXML_ERR_DATA: - return "No correct paramenter in the function"; - - default: - return strerror(errno); - } -} - -CURLcode -nxml_curl_error(nxml_t *nxml, nxml_error_t err) -{ - if (!nxml || err != NXML_ERR_DOWNLOAD) - return CURLE_OK; - - return nxml->priv.curl_error; -} - -nxml_error_t -nxml_line_error(nxml_t *nxml, int *line) -{ - if (!nxml || !line) - return NXML_ERR_DATA; - - *line = nxml->priv.line; - - return NXML_OK; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_free.c b/plugins/backend/local/libnxml/nxml_free.c deleted file mode 100644 index ae4ee080..00000000 --- a/plugins/backend/local/libnxml/nxml_free.c +++ /dev/null @@ -1,233 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -static void __nxml_private_free(__nxml_private_t *priv); -static void __nxml_entity_free(__nxml_private_t *priv); - -nxml_error_t -nxml_free_data(nxml_data_t *data) -{ - nxml_namespace_t *namespace; - nxml_attr_t *attr; - nxml_data_t *tmp; - void *old; - - if (!data) - return NXML_ERR_DATA; - - if (data->value) - free(data->value); - - namespace = data->ns_list; - while (namespace) - { - old = namespace; - namespace = namespace->next; - - nxml_free_namespace(old); - } - - attr = data->attributes; - while (attr) - { - old = attr; - attr = attr->next; - - nxml_free_attribute(old); - } - - tmp = data->children; - while (tmp) - { - old = tmp; - tmp = tmp->next; - - nxml_free_data(old); - } - - free(data); - - return NXML_OK; -} - -nxml_error_t -nxml_free_attribute(nxml_attr_t *t) -{ - if (!t) - return NXML_ERR_DATA; - - if (t->name) - free(t->name); - - if (t->value) - free(t->value); - - free(t); - - return NXML_OK; -} - -nxml_error_t -nxml_free_namespace(nxml_namespace_t *t) -{ - if (!t) - return NXML_ERR_DATA; - - if (t->prefix) - free(t->prefix); - - if (t->ns) - free(t->ns); - - free(t); - - return NXML_OK; -} - -nxml_error_t -nxml_free_doctype(nxml_doctype_t *doctype) -{ - nxml_doctype_t *tmp; - - if (!doctype) - return NXML_ERR_DATA; - - while (doctype) - { - if (doctype->value) - free(doctype->value); - - if (doctype->name) - free(doctype->name); - - tmp = doctype; - doctype = doctype->next; - - free(tmp); - } - - return NXML_OK; -} - -nxml_error_t -nxml_free(nxml_t *data) -{ - if (!data) - return NXML_ERR_DATA; - - nxml_empty(data); - - __nxml_private_free(&data->priv); - - free(data); - - return NXML_OK; -} - -nxml_error_t -nxml_empty(nxml_t *data) -{ - nxml_data_t *t, *old; - __nxml_private_t priv; - - if (!data) - return NXML_ERR_DATA; - - if (data->file) - free(data->file); - - if (data->encoding) - free(data->encoding); - - /* I must free the doctype, I must not empty only! */ - if (data->doctype) - nxml_free_doctype(data->doctype); - - t = data->data; - while (t) - { - old = t; - t = t->next; - nxml_free_data(old); - } - - __nxml_entity_free(&data->priv); - - memcpy(&priv, &data->priv, sizeof(__nxml_private_t)); - memset(data, 0, sizeof(nxml_t)); - memcpy(&data->priv, &priv, sizeof(__nxml_private_t)); - - return NXML_OK; -} - -static void -__nxml_entity_free(__nxml_private_t *priv) -{ - __nxml_entity_t *entity; - - if (!priv) - return; - - while (priv->entities) - { - entity = priv->entities; - priv->entities = priv->entities->next; - - if (entity->entity) - free(entity->entity); - - if (entity->name) - free(entity->name); - - free(entity); - } -} - -static void -__nxml_private_free(__nxml_private_t *priv) -{ - if (!priv) - return; - - if (priv->proxy) - free(priv->proxy); - - if (priv->proxy_authentication) - free(priv->proxy_authentication); - - if (priv->certfile) - free(priv->certfile); - - if (priv->password) - free(priv->password); - - if (priv->cacert) - free(priv->cacert); - - if (priv->authentication) - free(priv->authentication); - - if (priv->user_agent) - free(priv->user_agent); - - __nxml_entity_free(priv); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_init.c b/plugins/backend/local/libnxml/nxml_init.c deleted file mode 100644 index e7789fa5..00000000 --- a/plugins/backend/local/libnxml/nxml_init.c +++ /dev/null @@ -1,400 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -nxml_error_t -nxml_new(nxml_t **nxml) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (!(*nxml = (nxml_t *)calloc(1, sizeof(nxml_t)))) - return NXML_ERR_POSIX; - - return NXML_OK; -} - -static void -nxml_add_rec(nxml_t *nxml, nxml_data_t *data) -{ - while (data) - { - data->doc = nxml; - if (data->children) - nxml_add_rec(nxml, data->children); - - data = data->next; - } -} - -nxml_error_t -nxml_add(nxml_t *nxml, nxml_data_t *parent, nxml_data_t **child) -{ - nxml_data_t *tmp; - - if (!nxml || !child) - return NXML_ERR_DATA; - - if (!*child && !(*child = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - (*child)->doc = nxml; - (*child)->parent = parent; - (*child)->next = NULL; - - if (parent) - { - if (!parent->children) - parent->children = *child; - - else - { - tmp = parent->children; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = *child; - } - } - else - { - if (!nxml->data) - nxml->data = *child; - - else - { - tmp = nxml->data; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = *child; - } - } - - nxml_add_rec(nxml, (*child)->children); - - return NXML_OK; -} - -nxml_error_t -nxml_remove(nxml_t *nxml, nxml_data_t *parent, nxml_data_t *child) -{ - nxml_data_t *tmp, *old; - - if (!nxml || !child) - return NXML_ERR_DATA; - - if (parent) - tmp = parent->children; - else - tmp = nxml->data; - - old = NULL; - - while (tmp) - { - if (tmp == child) - { - if (old) - old->next = child->next; - else if (parent) - parent->children = child->next; - else - nxml->data = child->next; - - break; - } - - old = tmp; - tmp = tmp->next; - } - - child->next = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_add_attribute(nxml_t *nxml, nxml_data_t *element, nxml_attr_t **attr) -{ - nxml_attr_t *tmp; - - if (!nxml || !element || !attr) - return NXML_ERR_DATA; - - if (!*attr && !(*attr = (nxml_attr_t *)calloc(1, sizeof(nxml_attr_t)))) - return NXML_ERR_POSIX; - - (*attr)->next = NULL; - - if (!element->attributes) - element->attributes = *attr; - - else - { - tmp = element->attributes; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = *attr; - } - - return NXML_OK; -} - -nxml_error_t -nxml_remove_attribute(nxml_t *nxml, nxml_data_t *element, - nxml_attr_t *attr) -{ - nxml_attr_t *tmp, *old; - - if (!nxml || !element || !attr) - return NXML_ERR_DATA; - - tmp = element->attributes; - - old = NULL; - - while (tmp) - { - if (tmp == attr) - { - if (old) - old->next = attr->next; - else - element->attributes = attr->next; - - break; - } - - old = tmp; - tmp = tmp->next; - } - - attr->next = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_add_namespace(nxml_t *nxml, nxml_data_t *element, - nxml_namespace_t **namespace) -{ - nxml_namespace_t *tmp; - - if (!nxml || !element || !namespace) - return NXML_ERR_DATA; - - if (!*namespace && !(*namespace = - (nxml_namespace_t *)calloc(1, sizeof(nxml_namespace_t)))) - return NXML_ERR_POSIX; - - (*namespace)->next = NULL; - - if (!element->ns_list) - element->ns_list = *namespace; - - else - { - tmp = element->ns_list; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = *namespace; - } - - return NXML_OK; -} - -nxml_error_t -nxml_remove_namespace(nxml_t *nxml, nxml_data_t *element, - nxml_namespace_t *namespace) -{ - nxml_namespace_t *tmp, *old; - - if (!nxml || !element || !namespace) - return NXML_ERR_DATA; - - tmp = element->ns_list; - - old = NULL; - - while (tmp) - { - if (tmp == namespace) - { - if (old) - old->next = namespace->next; - else - element->ns_list = namespace->next; - - break; - } - - old = tmp; - tmp = tmp->next; - } - - namespace->next = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_set_func(nxml_t *nxml, void (*func)(char *, ...)) -{ - if (!nxml) - return NXML_ERR_DATA; - - nxml->priv.func = func; - - return NXML_OK; -} - -nxml_error_t -nxml_set_timeout(nxml_t *nxml, int timeout) -{ - if (!nxml) - return NXML_ERR_DATA; - - nxml->priv.timeout = timeout; - - return NXML_OK; -} - -nxml_error_t -nxml_set_proxy(nxml_t *nxml, char *proxy, char *userpwd) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (nxml->priv.proxy) - free(nxml->priv.proxy); - - if (proxy) - nxml->priv.proxy = strdup(proxy); - else - nxml->priv.proxy = NULL; - - if (nxml->priv.proxy_authentication) - free(nxml->priv.proxy_authentication); - - if (userpwd) - nxml->priv.proxy_authentication = strdup(userpwd); - else - nxml->priv.proxy_authentication = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_set_authentication(nxml_t *nxml, char *userpwd) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (nxml->priv.authentication) - free(nxml->priv.authentication); - - if (userpwd) - nxml->priv.authentication = strdup(userpwd); - else - nxml->priv.authentication = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_set_textindent(nxml_t *nxml, char textindent) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (textindent) - nxml->priv.textindent = 1; - else - nxml->priv.textindent = 0; - - return NXML_OK; -} - -nxml_error_t -nxml_set_user_agent(nxml_t *nxml, char *user_agent) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (nxml->priv.user_agent) - free(nxml->priv.user_agent); - - if (user_agent) - nxml->priv.user_agent = strdup(user_agent); - else - nxml->priv.user_agent = NULL; - - return NXML_OK; -} - -nxml_error_t -nxml_set_certificate(nxml_t *nxml, char *certificate, char *password, - char *cacert, int verifypeer) -{ - if (!nxml) - return NXML_ERR_DATA; - - if (nxml->priv.certfile) - free(nxml->priv.certfile); - - if (certificate) - nxml->priv.certfile = strdup(certificate); - else - nxml->priv.certfile = NULL; - - if (nxml->priv.password) - free(nxml->priv.password); - - if (password) - nxml->priv.password = strdup(password); - else - nxml->priv.password = NULL; - - if (cacert) - nxml->priv.cacert = strdup(cacert); - else - nxml->priv.cacert = NULL; - - nxml->priv.verifypeer = !verifypeer; - - return NXML_OK; -} - -void nxml_print_generic(char *str, ...) -{ - va_list va; - - va_start(va, str); - vfprintf(stderr, str, va); - va_end(va); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_internal.h b/plugins/backend/local/libnxml/nxml_internal.h deleted file mode 100644 index 675b6654..00000000 --- a/plugins/backend/local/libnxml/nxml_internal.h +++ /dev/null @@ -1,84 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __N_XML_INTERNAL_H__ -#define __N_XML_INTERNAL_H__ - -/* Rule [4] */ -#define __NXML_NAMESTARTCHARS \ - ((ch = __NXML_U8()) == ':' || (ch >= 'a' && ch <= 'z') || ch == '_' || (ch >= 'A' && ch <= 'Z') || (ch >= 0xc0 && ch <= 0xd6) || (ch >= 0xd8 && ch <= 0xf6) || (ch >= 0xf8 && ch <= 0x2ff) || (ch >= 0x370 && ch <= 0x37d) || (ch >= 0x37f && ch <= 0x1fff) || (ch >= 0x200c && ch <= 0x200d) || (ch >= 0x2070 && ch <= 0x218f) || (ch >= 0x2c00 && ch <= 0x2fef) || (ch >= 0x3001 && ch <= 0xd7ff) || (ch >= 0xf900 && ch <= 0xfdcf) || (ch >= 0xfdf0 && ch <= 0xfffd) || (ch >= 0x10000 && ch <= 0xeffff)) - -/* Rule [4a] */ -#define __NXML_NAMECHARS \ - (__NXML_NAMESTARTCHARS || ch == '-' || ch == '.' || (ch >= '0' && ch <= '9') || ch == 0xb7 || (ch >= 0x0300 && ch <= 0x036f) || (ch >= 0x203f && ch <= 0x2040)) - -#define __NXML_U8() __nxml_utf8((unsigned char **)buffer, size, &byte) - -typedef struct __nxml_string_t__ __nxml_string_t; - -int64_t __nxml_utf8(unsigned char **buffer, - size_t *size, - int *byte); - -int64_t __nxml_int_charset(int i, - unsigned char *buffer, - char *charset); - -int __nxml_utf_detection(char *r_buffer, - size_t r_size, - char **buffer, - size_t *size, - nxml_charset_t *); - -int __nxml_escape_spaces(nxml_t *doc, - char **buffer, - size_t *size); - -char *__nxml_get_value(nxml_t *doc, - char **buffer, - size_t *size); - -char *__nxml_trim(char *tmp); - -/* nxml_string.c */ - -/** - * \brief - * For internal use only - */ -struct __nxml_string_t__ -{ - char *string; - size_t size; -}; - -__nxml_string_t *__nxml_string_new(void); - -int __nxml_string_add(__nxml_string_t *st, - char *what, - size_t size); - -char *__nxml_string_free(__nxml_string_t *st); - -void __nxml_namespace_parse(nxml_t *nxml); - -int __nxml_atoi(char *str); - -#endif - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_namespace.c b/plugins/backend/local/libnxml/nxml_namespace.c deleted file mode 100644 index 2f54670a..00000000 --- a/plugins/backend/local/libnxml/nxml_namespace.c +++ /dev/null @@ -1,354 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -struct __nxml_data_ns_t -{ - nxml_namespace_t *ns; - struct __nxml_data_ns_t *next; -}; - -static void -__nxml_namespace_free_item(nxml_data_t *e) -{ - nxml_namespace_t *ns; - nxml_data_t *child; - - while (e->ns_list) - { - ns = e->ns_list->next; - - if (e->ns_list->prefix) - free(e->ns_list->prefix); - - if (e->ns_list->ns) - free(e->ns_list->ns); - - free(e->ns_list); - - e->ns_list = ns; - } - - e->ns = NULL; - - child = e->children; - while (child) - { - __nxml_namespace_free_item(child); - child = child->next; - } -} - -static void -__nxml_namespace_free(nxml_t *nxml) -{ - nxml_data_t *e; - - e = nxml->data; - while (e) - { - __nxml_namespace_free_item(e); - - e = e->next; - } -} - -int __nxml_namespace_parse_add(nxml_data_t *data, char *prefix, char *namespace) -{ - nxml_namespace_t *ns; - - if (!(ns = (nxml_namespace_t *)calloc(1, sizeof(nxml_namespace_t)))) - return 1; - - if (prefix && !(ns->prefix = strdup(prefix))) - { - free(ns); - return 1; - } - - if (!(ns->ns = strdup(namespace))) - { - if (ns->prefix) - free(ns->prefix); - free(ns); - return 1; - } - - ns->next = data->ns_list; - data->ns_list = ns; - - return 0; -} - -static int -__nxml_namespace_find_item(nxml_t *nxml, nxml_data_t *e) -{ - nxml_data_t *child; - nxml_attr_t *att; - - att = e->attributes; - while (att) - { - if (!strcmp(att->name, "xmlns")) - { - if (__nxml_namespace_parse_add(e, NULL, att->value)) - { - __nxml_namespace_free(nxml); - return 1; - } - } - else if (!strncmp(att->name, "xmlns:", 6)) - { - if (__nxml_namespace_parse_add(e, att->name + 6, att->value)) - { - __nxml_namespace_free(nxml); - return 1; - } - } - - att = att->next; - } - - child = e->children; - while (child) - { - if (child->type == NXML_TYPE_ELEMENT) - __nxml_namespace_find_item(nxml, child); - child = child->next; - } - - return 0; -} - -static int -__nxml_namespace_find(nxml_t *nxml) -{ - nxml_data_t *e; - - e = nxml->data; - while (e) - { - if (e->type == NXML_TYPE_ELEMENT) - __nxml_namespace_find_item(nxml, e); - e = e->next; - } - - return 0; -} - -static void -__nxml_namespace_associate_attribute(struct __nxml_data_ns_t *list, - nxml_attr_t *e) -{ - int i; - int len = strlen(e->name); - int k; - - for (i = k = 0; i < len; i++) - if (e->name[i] == ':') - { - k = i; - break; - } - - if (!k) - { - while (list) - { - if (!list->ns->prefix) - { - e->ns = list->ns; - return; - } - list = list->next; - } - - return; - } - - else - { - while (list) - { - if (list->ns->prefix && !strncmp(list->ns->prefix, e->name, k)) - { - char *a = strdup(e->name + strlen(list->ns->prefix) + 1); - - if (!a) - return; - - free(e->name); - e->name = a; - - e->ns = list->ns; - return; - } - list = list->next; - } - } -} - -static void -__nxml_namespace_associate_item(struct __nxml_data_ns_t *list, - nxml_data_t *e) -{ - int i; - int len; - int k; - nxml_attr_t *attr; - - attr = e->attributes; - while (attr) - { - __nxml_namespace_associate_attribute(list, attr); - attr = attr->next; - } - - len = strlen(e->value); - - for (i = k = 0; i < len; i++) - if (e->value[i] == ':') - { - k = i; - break; - } - - if (!k) - { - while (list) - { - if (!list->ns->prefix) - { - e->ns = list->ns; - return; - } - list = list->next; - } - - return; - } - - else - { - while (list) - { - if (list->ns->prefix && !strncmp(list->ns->prefix, e->value, k)) - { - char *a = strdup(e->value + strlen(list->ns->prefix) + 1); - - if (!a) - return; - - free(e->value); - e->value = a; - - e->ns = list->ns; - return; - } - list = list->next; - } - } -} - -static void -__nxml_namespace_associate(struct __nxml_data_ns_t **list, - nxml_data_t *root) -{ - nxml_data_t *e; - nxml_namespace_t *ns; - struct __nxml_data_ns_t *tmp, *old; - - ns = root->ns_list; - while (ns) - { - if (!(tmp = calloc(1, sizeof(struct __nxml_data_ns_t)))) - return; - - tmp->ns = ns; - tmp->next = (*list); - (*list) = tmp; - - ns = ns->next; - } - - __nxml_namespace_associate_item(*list, root); - - e = root->children; - while (e) - { - if (e->type == NXML_TYPE_ELEMENT) - __nxml_namespace_associate(list, e); - - e = e->next; - } - - ns = root->ns_list; - while (ns) - { - tmp = *list; - old = NULL; - - while (tmp) - { - if (tmp->ns == ns) - { - if (old) - old->next = tmp->next; - else - *list = tmp->next; - - free(tmp); - break; - } - - old = tmp; - tmp = tmp->next; - } - - ns = ns->next; - } -} - -static void -__nxml_namespace_connect(nxml_t *nxml) -{ - nxml_data_t *e; - struct __nxml_data_ns_t *list = NULL; - - e = nxml->data; - while (e) - { - if (e->type == NXML_TYPE_ELEMENT) - __nxml_namespace_associate(&list, e); - - e = e->next; - } -} - -void __nxml_namespace_parse(nxml_t *nxml) -{ - __nxml_namespace_free(nxml); - - if (__nxml_namespace_find(nxml)) - return; - - __nxml_namespace_connect(nxml); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_parser.c b/plugins/backend/local/libnxml/nxml_parser.c deleted file mode 100644 index 8379aa01..00000000 --- a/plugins/backend/local/libnxml/nxml_parser.c +++ /dev/null @@ -1,1482 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -static int -__nxml_parse_unique_attribute(nxml_attr_t *attr, char *name) -{ - /* - * Rule [40] - Well-formedness contraint: Unique Att Spec - */ - - while (attr) - { - if (!strcmp(attr->name, name)) - return 1; - - attr = attr->next; - } - - return 0; -} - -static char * -__nxml_parse_string(nxml_t *doc, char *buffer, int size) -{ - char *real; - int i; - int q; - __nxml_string_t *ret; - - ret = __nxml_string_new(); - - for (q = i = 0; i < size; i++) - { - if (*(buffer + i) == 0xd) - continue; - - if (*(buffer + i) == 0xa || *(buffer + i) == 0x9 || *(buffer + i) == 0x20) - { - if (!q) - { - if (!doc->priv.textindent) - q = 1; - - __nxml_string_add(ret, buffer + i, 1); - } - } - - else if (*(buffer + i) == '&') - { - if (!strncmp(buffer + i, "<", 4)) - { - __nxml_string_add(ret, "<", 1); - i += 3; - q = 0; - } - - else if (!strncmp(buffer + i, ">", 4)) - { - __nxml_string_add(ret, ">", 1); - i += 3; - q = 0; - } - - else if (!strncmp(buffer + i, "&", 5)) - { - __nxml_string_add(ret, "&", 1); - i += 4; - q = 0; - } - - else if (!strncmp(buffer + i, "'", 6)) - { - __nxml_string_add(ret, "'", 1); - i += 5; - q = 0; - } - - else if (!strncmp(buffer + i, """, 6)) - { - __nxml_string_add(ret, "\"", 1); - i += 5; - q = 0; - } - - else if (*(buffer + i + 1) == '#') - { - char buf[2048]; - int k = i; - int last; - - while (*(buffer + k) != ';' && k < size) - k++; - - last = k - (i + 2) > sizeof(buf) ? sizeof(buf) : k - (i + 2); - strncpy(buf, buffer + i + 2, last); - buf[last] = 0; - - int value; - if (buf[0] != 'x') - value = atoi(buf); - else - value = __nxml_atoi(&buf[1]); - - int num_bytes; - if ((num_bytes = __nxml_int_charset(value, (unsigned char *)buf, doc->encoding)) > 0) - { - __nxml_string_add(ret, buf, num_bytes); - } - else - __nxml_string_add(ret, buffer + i, 1); - i += k - i; - q = 0; - } - - else - { - __nxml_entity_t *entity; - char buf[1024]; - int k = i; - int last; - - while (*(buffer + k) != ';' && k < size) - k++; - - last = k - (i + 1) > sizeof(buf) ? sizeof(buf) : k - (i + 1); - strncpy(buf, buffer + i + 1, last); - buf[last] = 0; - - for (entity = doc->priv.entities; entity; entity = entity->next) - { - if (!strcmp(entity->name, buf)) - { - __nxml_string_add(ret, entity->entity, - strlen(entity->entity)); - break; - } - } - - if (!entity) - __nxml_string_add(ret, buffer + i, 1); - else - i += strlen(entity->name) + 1; - - q = 0; - } - } - - else - { - q = 0; - __nxml_string_add(ret, buffer + i, 1); - } - } - - if (!(real = __nxml_string_free(ret))) - real = strdup(""); - - return real; -} - -static char * -__nxml_parse_get_attr(nxml_t *doc, char **buffer, size_t *size) -{ - char attr[1024]; - int i; - int byte; - int64_t ch; - - if (!*size) - return NULL; - - if (!__NXML_NAMESTARTCHARS) - return NULL; - - memcpy(&attr[0], *buffer, byte); - - i = byte; - (*buffer) += byte; - (*size) -= byte; - - while (__NXML_NAMECHARS && *size && i < sizeof(attr) - 1) - { - memcpy(&attr[i], *buffer, byte); - - i += byte; - (*buffer) += byte; - (*size) -= byte; - } - - if (**buffer != 0x20 && **buffer != 0x9 && **buffer != 0xa && **buffer != 0xd && **buffer != '=') - { - (*buffer) -= i; - (*size) += i; - return NULL; - } - - i += __nxml_escape_spaces(doc, buffer, size); - - if (**buffer != '=') - { - (*buffer) -= i; - (*size) += i; - return NULL; - } - - (*buffer)++; - (*size)--; - - __nxml_escape_spaces(doc, buffer, size); - - attr[i] = 0; - return strdup(attr); -} - -static nxml_error_t -__nxml_parse_get_attribute(nxml_t *doc, char **buffer, size_t *size, - nxml_attr_t **attr) -{ - /* - * Rule [41] - Attribute ::= Name Eq AttValue - * Rule [25] - Eq ::= S? '=' S? - * Rule [5] - Name ::= NameStartChar (NameChar)* - * Rule [4] - NameStartChar ::= ":" | [A-Z] | ["_"] | [a-z] | Unicode... - * Rule [4a] - NameChar ::= NameStarChar | "-" | "." | [0-9] | Unicode... - * Rule [10] - AttValue ::= '"' ([^<&"] | Reference)* '"' | - * "'" ([^<&'] | Reference)* "'" - */ - char *tag, *value, *v; - - if (!*size) - return NXML_OK; - - *attr = NULL; - - __nxml_escape_spaces(doc, buffer, size); - - if (!(tag = __nxml_parse_get_attr(doc, buffer, size))) - return NXML_OK; - - if (!(value = __nxml_get_value(doc, buffer, size))) - { - free(tag); - - if (doc->priv.func) - doc->priv.func("%s: expected value of attribute (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - return NXML_ERR_PARSER; - } - - if (!(v = __nxml_parse_string(doc, value, strlen(value)))) - { - free(tag); - return NXML_ERR_POSIX; - } - - free(value); - value = v; - - __nxml_escape_spaces(doc, buffer, size); - - if (!(*attr = (nxml_attr_t *)calloc(1, sizeof(nxml_attr_t)))) - { - free(tag); - free(value); - - return NXML_ERR_POSIX; - } - - (*attr)->name = tag; - (*attr)->value = value; - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_cdata(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data) -{ - /* - * Rule [18] - CDSect ::= CDStart CData CDEnd - * Rule [19] - CDStart ::= '<![CDATA[' - * Rule [20] - CData ::= (Char * - (Char * ']]>' Char *)) - * Rule [21] - CDEnd ::= ']]>' - */ - - int i = 0; - nxml_data_t *t; - char *value; - - while (i < *size) - { - if (!strncmp(*buffer + i, "]]>", 3)) - break; - - if (*(*buffer + i) == 0xa && doc->priv.func) - doc->priv.line++; - - i++; - } - - if (strncmp(*buffer + i, "]]>", 3)) - { - if (doc->priv.func) - doc->priv.func("%s: expected ']]>' as close of a CDATA (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - return NXML_ERR_PARSER; - } - - if (!(t = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - t->doc = doc; - - if (!(value = (char *)malloc(sizeof(char) * (i + 1)))) - { - free(t); - return NXML_ERR_POSIX; - } - - strncpy(value, *buffer, i); - value[i] = 0; - - t->value = value; - t->type = NXML_TYPE_TEXT; - - (*buffer) += i + 3; - (*size) -= i + 3; - - *data = t; - - return NXML_OK; -} - -static void -__nxml_parse_entity(nxml_t *doc, char **buffer, size_t *size) -{ - /* - * [70] EntityDecl ::= GEDecl | PEDecl - * [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' - * [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' - * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) - * [74] PEDef ::= EntityValue | ExternalID - */ - - int i; - char name[1024]; - char *entity; - int byte; - int64_t ch; - - __nxml_escape_spaces(doc, buffer, size); - - if (strncmp(*buffer, "<!ENTITY", 8)) - { - int q = i = 0; - - while ((*(*buffer + i) != '>' || q) && i < *size) - { - if (*(*buffer + i) == '<') - q++; - - else if (*(*buffer + i) == '>') - q--; - - i++; - } - - if (*(*buffer) == '>') - i++; - - (*buffer) += i; - (*size) -= i; - return; - } - - *buffer += 8; - *size -= 8; - - __nxml_escape_spaces(doc, buffer, size); - - /* Name */ - if (!__NXML_NAMESTARTCHARS) - { - int q = i = 0; - - while ((*(*buffer + i) != '>' || q) && i < *size) - { - if (*(*buffer + i) == '<') - q++; - - else if (*(*buffer + i) == '>') - q--; - - i++; - } - - if (*(*buffer) == '>') - i++; - - (*buffer) += i; - (*size) -= i; - return; - } - - memcpy(&name[0], *buffer, byte); - - i = byte; - (*buffer) += byte; - (*size) -= byte; - - while (__NXML_NAMECHARS && *size && i < sizeof(name) - 1) - { - memcpy(&name[i], *buffer, byte); - - i += byte; - (*buffer) += byte; - (*size) -= byte; - } - - name[i] = 0; - - if (!i || !strcmp(name, "%")) - { - int q = i = 0; - - while ((*(*buffer + i) != '>' || q) && i < *size) - { - if (*(*buffer + i) == '<') - q++; - - else if (*(*buffer + i) == '>') - q--; - - i++; - } - - if (*(*buffer) == '>') - i++; - - (*buffer) += i; - (*size) -= i; - return; - } - - __nxml_escape_spaces(doc, buffer, size); - - entity = __nxml_get_value(doc, buffer, size); - - __nxml_escape_spaces(doc, buffer, size); - - if (**buffer == '>') - { - (*buffer)++; - (*size)--; - } - - if (entity) - { - __nxml_entity_t *e; - - if (!(e = calloc(1, sizeof(__nxml_entity_t)))) - { - free(entity); - return; - } - - if (!(e->name = strdup(name))) - { - free(e); - free(entity); - return; - } - - e->entity = entity; - - if (!doc->priv.entities) - doc->priv.entities = e; - else - { - __nxml_entity_t *tmp = doc->priv.entities; - - while (tmp->next) - tmp = tmp->next; - - tmp->next = e; - } - } -} - -static nxml_error_t -__nxml_parse_doctype(nxml_t *doc, char **buffer, size_t *size, - int *doctype) -{ - /* - * Rule [28] - doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? - * ('[' intSubset '] S?)? '>' - */ - - nxml_doctype_t *t; - nxml_doctype_t *tmp; - char str[1024]; - char *value; - int i; - int byte; - int64_t ch; - int q = 0; - - __nxml_escape_spaces(doc, buffer, size); - - if (!__NXML_NAMESTARTCHARS) - { - if (doc->priv.func) - doc->priv.func("%s: abnormal char '%c' (line %d)\n", - doc->file ? doc->file : "", **buffer, doc->priv.line); - return NXML_ERR_PARSER; - } - - memcpy(&str[0], *buffer, byte); - - i = byte; - (*buffer) += byte; - (*size) -= byte; - - while (__NXML_NAMECHARS && *size && i < sizeof(str) - 1) - { - memcpy(&str[i], *buffer, byte); - - i += byte; - (*buffer) += byte; - (*size) -= byte; - } - - str[i] = 0; - - if (!(t = (nxml_doctype_t *)calloc(1, sizeof(nxml_doctype_t)))) - return NXML_ERR_POSIX; - - t->doc = doc; - - if (!(t->name = strdup(str))) - { - free(t); - return NXML_ERR_POSIX; - } - - __nxml_escape_spaces(doc, buffer, size); - - i = 0; - while ((*(*buffer + i) != '>' || q) && i < *size) - { - if (*(*buffer + i) == '<') - q++; - - else if (*(*buffer + i) == '>') - q--; - - if (*(*buffer + i) == 0xa && doc->priv.func) - doc->priv.line++; - - i++; - } - - if (*(*buffer + i) != '>') - { - if (doc->priv.func) - doc->priv.func("%s: expected '>' as close of a doctype (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - free(t->value); - free(t); - return NXML_ERR_PARSER; - } - - if (!(value = __nxml_parse_string(doc, *buffer, i))) - { - free(t->value); - free(t); - return NXML_ERR_POSIX; - } - - t->value = value; - - (*buffer) += i + 1; - (*size) -= i + 1; - - tmp = doc->doctype; - if (!tmp) - doc->doctype = t; - - else - { - while (tmp->next) - tmp = tmp->next; - - tmp->next = t; - } - - *doctype = 1; - - while (value && *value && *value != '[') - value++; - - if (value && *value == '[') - { - unsigned int size; - - value++; - size = strlen(value); - - while (size > 0 && value && *value) - __nxml_parse_entity(doc, &value, (size_t *)&size); - } - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_comment(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data) -{ - /* - * Rule [15] - Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' - */ - - int i = 0; - nxml_data_t *t; - char *value; - - while (strncmp(*buffer + i, "-->", 3) && i < *size) - { - if (*(*buffer + i) == 0xa && doc->priv.func) - doc->priv.line++; - i++; - } - - if (strncmp(*buffer + i, "-->", 3)) - { - if (doc->priv.func) - doc->priv.func("%s: expected '--' as close comment (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - return NXML_ERR_PARSER; - } - - if (!(t = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - t->doc = doc; - - if (!(value = __nxml_parse_string(doc, *buffer, i))) - { - free(t); - return NXML_ERR_POSIX; - } - - t->value = value; - - (*buffer) += i + 3; - (*size) -= i + 3; - - t->type = NXML_TYPE_COMMENT; - - *data = t; - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_pi(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data) -{ - /* - * Rule [16] - PI ::= '<?' PITarget (S (Char * - (Char * '?>' Char *)))? - * '?>' - * Rule [17] - PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) - */ - - int i = 0; - nxml_data_t *t; - char *value; - - if (!*size) - return NXML_OK; - - *data = NULL; - - (*buffer) += 1; - (*size) -= 1; - - while (strncmp(*buffer + i, "?>", 2) && i < *size) - { - if (*(*buffer + i) == 0xa && doc->priv.func) - doc->priv.line++; - i++; - } - - if (strncmp(*buffer + i, "?>", 2)) - { - if (doc->priv.func) - doc->priv.func("%s: expected '?' as close pi tag (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - return NXML_ERR_PARSER; - } - - if (!strncasecmp(*buffer, "?xml", 4)) - { - if (doc->priv.func) - doc->priv.func("%s: pi xml is reserved! (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - return NXML_ERR_PARSER; - } - - if (!(t = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - t->doc = doc; - - if (!(value = __nxml_parse_string(doc, *buffer, i))) - { - free(t); - return NXML_ERR_POSIX; - } - - t->value = value; - - (*buffer) += i + 2; - (*size) -= i + 2; - - t->type = NXML_TYPE_PI; - - *data = t; - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_other(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data, int *doctype) -{ - /* Tags '<!'... */ - - *data = NULL; - *doctype = 0; - - if (!*size) - return NXML_OK; - - (*buffer) += 1; - (*size) -= 1; - - __nxml_escape_spaces(doc, buffer, size); - - if (!strncmp(*buffer, "[CDATA[", 7)) - { - (*buffer) += 7; - (*size) -= 7; - - return __nxml_parse_cdata(doc, buffer, size, data); - } - - else if (!strncmp(*buffer, "--", 2)) - { - (*buffer) += 2; - (*size) -= 2; - - return __nxml_parse_comment(doc, buffer, size, data); - } - - else if (!strncmp(*buffer, "DOCTYPE", 7)) - { - (*buffer) += 7; - (*size) -= 7; - - return __nxml_parse_doctype(doc, buffer, size, doctype); - } - - else - { - if (doc->priv.func) - doc->priv.func("%s: abnormal tag (line %d)\n", - doc->file ? doc->file : "", doc->priv.line); - - return NXML_ERR_PARSER; - } -} - -static nxml_error_t -__nxml_parse_text(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data) -{ - int i = 0; - nxml_data_t *t; - char *value; - char *value_new; - - *data = NULL; - - if (!*size) - return NXML_OK; - - while (*(*buffer + i) != '<' && i < *size) - { - if (*(*buffer + i) == 0xa && doc->priv.func) - doc->priv.line++; - i++; - } - - if (!(t = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - t->doc = doc; - - if (!(value = __nxml_parse_string(doc, *buffer, i))) - { - free(t); - return NXML_ERR_POSIX; - } - - (*buffer) += i; - (*size) -= i; - - value_new = __nxml_trim(value); - free(value); - - if (!value_new) - { - free(t); - return NXML_ERR_POSIX; - } - - t->value = value_new; - t->type = NXML_TYPE_TEXT; - - *data = t; - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_close(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data) -{ - /* - * Rule [42] - ETag ::= '</' Name S? '>' - */ - - nxml_data_t *tag; - char str[1024]; - int i; - int byte; - int64_t ch; - - *data = NULL; - - if (!*size) - return NXML_OK; - - if (!__NXML_NAMESTARTCHARS) - { - if (doc->priv.func) - doc->priv.func("%s: abnormal char '%c' (line %d)\n", - doc->file ? doc->file : "", **buffer, doc->priv.line); - return NXML_ERR_PARSER; - } - - memcpy(&str[0], *buffer, byte); - - i = byte; - (*buffer) += byte; - (*size) -= byte; - - while (__NXML_NAMECHARS && *size && i < sizeof(str) - 1) - { - memcpy(&str[i], *buffer, byte); - - i += byte; - (*buffer) += byte; - (*size) -= byte; - } - - str[i] = 0; - - __nxml_escape_spaces(doc, buffer, size); - - if (**buffer != '>') - { - if (doc->priv.func) - doc->priv.func("%s: expected char '>' after tag %s (line %d)\n", - doc->file ? doc->file : "", str, doc->priv.line); - return NXML_ERR_PARSER; - } - - (*buffer) += 1; - (*size) -= 1; - - if (!(tag = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - tag->doc = doc; - - if (!(tag->value = strdup(str))) - { - free(tag); - return NXML_ERR_POSIX; - } - - tag->type = NXML_TYPE_ELEMENT_CLOSE; - - *data = tag; - - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_get_tag(nxml_t *doc, char **buffer, size_t *size, - nxml_data_t **data, int *doctype) -{ - /* Parse the element... */ - nxml_attr_t *attr, *last; - nxml_data_t *tag, *child, *child_last; - nxml_error_t err; - - char str[1024]; - int i; - int closed = 0; - int byte; - int64_t ch; - - *data = NULL; - *doctype = 0; - - if (!*size) - return NXML_OK; - - __nxml_escape_spaces(doc, buffer, size); - - /* Text */ - if (**buffer != '<') - return __nxml_parse_text(doc, buffer, size, data); - - (*buffer) += 1; - (*size) -= 1; - - /* Comment, CData, DocType or other elements */ - if (**buffer == '!') - return __nxml_parse_other(doc, buffer, size, data, doctype); - - /* PI */ - else if (**buffer == '?') - return __nxml_parse_pi(doc, buffer, size, data); - - /* Close tag */ - else if (**buffer == '/') - { - (*buffer) += 1; - (*size) -= 1; - return __nxml_parse_close(doc, buffer, size, data); - } - - __nxml_escape_spaces(doc, buffer, size); - - if (!__NXML_NAMESTARTCHARS) - { - if (doc->priv.func) - doc->priv.func("%s: abnormal char '%c' (line %d)\n", - doc->file ? doc->file : "", **buffer, doc->priv.line); - return NXML_ERR_PARSER; - } - - memcpy(&str[0], *buffer, byte); - - i = byte; - (*buffer) += byte; - (*size) -= byte; - - while (__NXML_NAMECHARS && *size && i < sizeof(str) - 1) - { - memcpy(&str[i], *buffer, byte); - - i += byte; - (*buffer) += byte; - (*size) -= byte; - } - - str[i] = 0; - - if (**buffer != 0x20 && **buffer != 0x9 && **buffer != 0xa && **buffer != 0xd && **buffer != '>' && **buffer != '/') - { - (*buffer) -= i; - (*size) += i; - - if (doc->priv.func) - doc->priv.func("%s: abnormal char '%c' after tag %s (line %d)\n", - doc->file ? doc->file : "", *(*buffer + i), str, - doc->priv.line); - - return NXML_ERR_PARSER; - } - - if (!(tag = (nxml_data_t *)calloc(1, sizeof(nxml_data_t)))) - return NXML_ERR_POSIX; - - tag->doc = doc; - - if (!(tag->value = strdup(str))) - { - free(tag); - return NXML_ERR_POSIX; - } - - last = NULL; - - /* Get attribute: */ - while (!(err = __nxml_parse_get_attribute(doc, buffer, size, &attr)) && attr) - { - if (!*size) - return NXML_ERR_PARSER; - - if (__nxml_parse_unique_attribute(tag->attributes, attr->name)) - { - if (doc->priv.func) - doc->priv.func("%s: Duplicate attribute '%s' in tag '%s' (line %d)\n", - doc->file ? doc->file : "", attr->name, tag->value, - doc->priv.line); - - nxml_free_attribute(attr); - nxml_free_data(tag); - - return NXML_ERR_PARSER; - } - - if (last) - last->next = attr; - else - tag->attributes = attr; - - last = attr; - } - - if (err) - { - nxml_free_data(tag); - return err; - } - - /* Closed element */ - if (**buffer == '/') - { - closed++; - (*buffer) += 1; - (*size) -= 1; - - __nxml_escape_spaces(doc, buffer, size); - } - - if (**buffer != '>') - { - if (doc->priv.func) - doc->priv.func("%s: expected char '>' after tag %s (line %d)\n", - doc->file ? doc->file : "", tag->value, - doc->priv.line); - - nxml_free_data(tag); - return NXML_ERR_PARSER; - } - - (*buffer) += 1; - (*size) -= 1; - - if (!closed) - { - child_last = NULL; - - /* Search children: */ - while (!(err = __nxml_parse_get_tag(doc, buffer, size, &child, doctype)) && (*doctype || child)) - { - if (*doctype) - continue; - - /* If the current child, break: */ - if (child->type == NXML_TYPE_ELEMENT_CLOSE) - { - if (!strcmp(child->value, tag->value)) - { - closed = 1; - nxml_free_data(child); - break; - } - - else - { - if (doc->priv.func) - doc->priv.func("%s: expected tag '/%s' and not '%s' (line %d)\n", - doc->file ? doc->file : "", tag->value, - child->value, doc->priv.line); - - nxml_free_data(child); - nxml_free_data(tag); - - return NXML_ERR_PARSER; - } - } - - /* Set the parent */ - child->parent = tag; - - if (child_last) - child_last->next = child; - else - tag->children = child; - - child_last = child; - } - - if (err) - { - nxml_free_data(tag); - return err; - } - } - - tag->type = NXML_TYPE_ELEMENT; - - if (!closed) - { - if (doc->priv.func) - doc->priv.func("%s: expected tag '/%s' (line %d)\n", - doc->file ? doc->file : "", tag->value, - doc->priv.line); - - nxml_free_data(tag); - return NXML_ERR_PARSER; - } - - *data = tag; - return NXML_OK; -} - -static nxml_error_t -__nxml_parse_buffer(nxml_t *nxml, char *r_buffer, size_t r_size) -{ - /* - * Rule [1] - Document ::= prolog element Misc* - Char* RestrictedChar Char* - */ - - nxml_attr_t *attr; - nxml_error_t err; - nxml_charset_t charset; - nxml_data_t *tag, *last, *root; - int doctype; - - int freed; - - char *buffer = NULL; - size_t size; - - if (!r_buffer || !nxml) - return NXML_ERR_DATA; - - if (!r_size) - r_size = strlen(r_buffer); - - switch ((freed = - __nxml_utf_detection(r_buffer, r_size, &buffer, &size, &charset))) - { - case 0: - buffer = r_buffer; - size = r_size; - break; - - case -1: - return NXML_ERR_POSIX; - } - - nxml->priv.line = 1; - nxml->version = NXML_VERSION_1_0; - nxml->standalone = 1; - - /* - * Rule [22] - prolog ::= XMLDecl Misc* (doctypedecl Misc*)? - * Rule [23] - XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' - */ - if (!strncmp(buffer, "<?xml ", 6)) - { - buffer += 6; - size -= 6; - - if ((err = - __nxml_parse_get_attribute(nxml, &buffer, &size, - &attr)) != NXML_OK) - { - nxml_empty(nxml); - - if (freed) - free(buffer); - - return err; - } - - if (!attr) - { - if (nxml->priv.func) - nxml->priv.func("%s: expected 'version' attribute (line %d)\n", - nxml->file ? nxml->file : "", nxml->priv.line); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - if (!strcmp(attr->value, "1.0")) - nxml->version = NXML_VERSION_1_0; - - else if (!strcmp(attr->value, "1.1")) - nxml->version = NXML_VERSION_1_1; - - else - { - if (nxml->priv.func) - nxml->priv.func("libnxml 0.18.3 suports only xml 1.1 or 1.0 (line %d)\n", - nxml->priv.line); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - nxml_free_attribute(attr); - - while (!(err = __nxml_parse_get_attribute(nxml, &buffer, &size, &attr)) && attr) - { - if (!strcmp(attr->name, "standalone")) - { - if (!strcmp(attr->value, "yes")) - nxml->standalone = 1; - - else - nxml->standalone = 0; - } - - else if (!strcmp(attr->name, "encoding")) - { - nxml->encoding = strdup(attr->value); - - if (!nxml->encoding) - { - nxml_empty(nxml); - nxml_free_attribute(attr); - - if (freed) - free(buffer); - - return NXML_ERR_POSIX; - } - } - - else - { - - if (nxml->priv.func) - nxml->priv.func("%s: unexpected attribute '%s' (line %d)\n", - nxml->file ? nxml->file : "", attr->name, - nxml->priv.line); - - nxml_empty(nxml); - nxml_free_attribute(attr); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - nxml_free_attribute(attr); - } - - if (err || strncmp(buffer, "?>", 2)) - { - if (nxml->priv.func) - nxml->priv.func("%s expected '?>' (line %d)\n", - nxml->file ? nxml->file : "", nxml->priv.line); - - nxml_empty(nxml); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - buffer += 2; - size -= 2; - } - - root = last = NULL; - while (!(err = __nxml_parse_get_tag(nxml, &buffer, &size, &tag, &doctype)) && (doctype || tag)) - { - if (doctype) - continue; - - if (tag->type == NXML_TYPE_ELEMENT && !root) - root = tag; - - if (last) - last->next = tag; - else - nxml->data = tag; - - last = tag; - } - - if (err) - { - nxml_empty(nxml); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - if (!root) - { - if (nxml->priv.func) - nxml->priv.func("%s: No root element founded!\n", - nxml->file ? nxml->file : ""); - - nxml_empty(nxml); - - if (freed) - free(buffer); - - return NXML_ERR_PARSER; - } - - if (freed) - free(buffer); - - nxml->charset_detected = charset; - - __nxml_namespace_parse(nxml); - - return NXML_OK; -} - -/* EXTERNAL FUNCTIONS *******************************************************/ - -nxml_error_t -nxml_parse_url(nxml_t *nxml, char *url) -{ - nxml_error_t err; - char *buffer; - size_t size; - - if (!url || !nxml) - return NXML_ERR_DATA; - - if ((err = nxml_download_file(nxml, url, &buffer, &size)) != NXML_OK) - return err; - - if (nxml->file) - free(nxml->file); - - if (!(nxml->file = strdup(url))) - { - nxml_empty(nxml); - return NXML_ERR_POSIX; - } - - nxml->size = size; - - nxml_empty(nxml); - - err = __nxml_parse_buffer(nxml, buffer, size); - - free(buffer); - - return err; -} - -nxml_error_t -nxml_parse_file(nxml_t *nxml, char *file) -{ - nxml_error_t err; - char *buffer; - struct stat st; - int fd, len, ret; - - if (!file || !nxml) - return NXML_ERR_DATA; - - if (stat(file, &st)) - return NXML_ERR_POSIX; - - if ((fd = open(file, O_RDONLY)) < 0) - return NXML_ERR_POSIX; - - if (!(buffer = (char *)malloc(sizeof(char) * (st.st_size + 1)))) - return NXML_ERR_POSIX; - - len = 0; - - while (len < st.st_size) - { - if ((ret = read(fd, buffer + len, st.st_size - len)) <= 0) - { - free(buffer); - close(fd); - return NXML_ERR_POSIX; - } - - len += ret; - } - - buffer[len] = 0; - close(fd); - - nxml_empty(nxml); - - if (nxml->file) - free(nxml->file); - - if (!(nxml->file = strdup(file))) - { - nxml_empty(nxml); - free(buffer); - return NXML_ERR_POSIX; - } - - nxml->size = st.st_size; - - err = __nxml_parse_buffer(nxml, buffer, st.st_size); - - free(buffer); - return err; -} - -nxml_error_t -nxml_parse_buffer(nxml_t *nxml, char *buffer, size_t size) -{ - if (!buffer || !nxml) - return NXML_ERR_DATA; - - nxml_empty(nxml); - - if (nxml->file) - free(nxml->file); - - if (!(nxml->file = strdup("buffer"))) - { - nxml_empty(nxml); - return NXML_ERR_POSIX; - } - - nxml->size = size; - - return __nxml_parse_buffer(nxml, buffer, size); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_string.c b/plugins/backend/local/libnxml/nxml_string.c deleted file mode 100644 index f5d4fd49..00000000 --- a/plugins/backend/local/libnxml/nxml_string.c +++ /dev/null @@ -1,116 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -char * -__nxml_string_no_space(char *str) -{ - char *ret; - int i, j; - int q; - int size; - - if (!str) - return NULL; - - size = strlen(str); - - if (!(ret = (char *)malloc(sizeof(char) * (size + 1)))) - return NULL; - - for (q = i = j = 0; i < size; i++) - { - if (*(str + i) == 0xd) - continue; - - if (*(str + i) == 0xa || *(str + i) == 0x9 || *(str + i) == 0x20) - { - if (!q) - { - q = 1; - ret[j++] = *(str + i); - } - } - - else - { - q = 0; - ret[j++] = *(str + i); - } - } - - ret[j] = 0; - - return ret; -} - -__nxml_string_t * -__nxml_string_new(void) -{ - __nxml_string_t *st; - - if (!(st = (__nxml_string_t *)calloc(1, sizeof(__nxml_string_t)))) - return NULL; - - return st; -} - -char * -__nxml_string_free(__nxml_string_t *st) -{ - char *ret; - - if (!st) - return NULL; - - ret = st->string; - free(st); - - return ret; -} - -int __nxml_string_add(__nxml_string_t *st, char *what, size_t size) -{ - if (!st || !*what) - return 1; - - if (size <= 0) - size = strlen(what); - - if (!st->size) - { - if (!(st->string = (char *)malloc(sizeof(char) * (size + 1)))) - return 1; - } - else - { - if (!(st->string = - (char *)realloc(st->string, - sizeof(char) * (size + st->size + 1)))) - return 1; - } - - memcpy(st->string + st->size, what, size); - st->size += size; - st->string[st->size] = 0; - - return 0; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_tools.c b/plugins/backend/local/libnxml/nxml_tools.c deleted file mode 100644 index 9f075acf..00000000 --- a/plugins/backend/local/libnxml/nxml_tools.c +++ /dev/null @@ -1,122 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -int __nxml_atoi(char *str) -{ - int ret; - sscanf(str, "%x", (unsigned int *)&ret); - return ret; -} - -int __nxml_escape_spaces(nxml_t *doc, char **buffer, size_t *size) -{ - /* - * Rule [3] - S ::= (#x20 | #x9 | #xD | #xA)+ - */ - - int k = 0; - - if (!*size) - return 0; - - while ((**buffer == 0x20 || **buffer == 0x9 || **buffer == 0xd || **buffer == 0xa) && *size) - { - if (**buffer == 0xa && doc->priv.func) - doc->priv.line++; - - (*buffer)++; - (*size)--; - k++; - } - - return k; -} - -char * -__nxml_get_value(nxml_t *doc, char **buffer, size_t *size) -{ - char *attr; - int i; - int quot; - - if (!*size) - return NULL; - - if (**buffer == '"') - quot = 1; - - else if (**buffer == '\'') - quot = 0; - - else - return NULL; - - (*buffer)++; - (*size)--; - - i = 0; - while (((quot && *(*buffer + i) != '"') || (!quot && *(*buffer + i) != '\''))) - { - if (*(*buffer + i) == '\n' && doc->priv.func) - doc->priv.line++; - - i++; - } - - if (quot && *(*buffer + i) != '"') - return NULL; - - else if (!quot && *(*buffer + i) != '\'') - return NULL; - - if (!(attr = (char *)malloc(sizeof(char) * (i + 1)))) - return NULL; - - memcpy(attr, *buffer, i); - - attr[i] = 0; - - i++; - (*buffer) += i; - (*size) -= i; - - return attr; -} - -char * -__nxml_trim(char *tmp) -{ - /* Trim function: */ - int i = 0; - while (tmp[i] == 0x20 || tmp[i] == 0x9 || tmp[i] == 0xd || tmp[i] == 0xa) - tmp++; - - i = strlen(tmp); - i--; - - while (tmp[i] == 0x20 || tmp[i] == 0x9 || tmp[i] == 0xd || tmp[i] == 0xa) - i--; - - tmp[i + 1] = 0; - - return strdup(tmp); -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_utf.c b/plugins/backend/local/libnxml/nxml_utf.c deleted file mode 100644 index 9d8f9fbd..00000000 --- a/plugins/backend/local/libnxml/nxml_utf.c +++ /dev/null @@ -1,515 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -/* - * UTF-8 - * 7bits: 0xxxxxxx - * 11bits: 110xxxxx 10xxxxxx - * 16bits: 1110xxxx 10xxxxxx 10xxxxxx - * 21bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 26bits: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 31bits: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - */ - -int64_t -__nxml_utf8(unsigned char **buffer, size_t *size, int *byte) -{ - int64_t ret; - unsigned char c0 = **buffer, c1, c2, c3, c4; - - if (c0 < 0x80 || *size < 2) - { - *byte = 1; - ret = (int64_t)c0; - return ret; - } - - c1 = *(*buffer + 1); - - if ((c0 & 0xe0) == 0xc0 || *size < 3) - { - *byte = 2; - ret = (((c0 & 0x1f) << 6) | (c1 & 0x3f)); - return ret; - } - - c2 = *(*buffer + 2); - - if ((c0 & 0xf0) == 0xe0 || *size < 4) - { - *byte = 3; - ret = (((c0 & 0x0f) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f)); - return ret; - } - - c3 = *(*buffer + 3); - - if ((c0 & 0xf8) == 0xf0 || *size < 5) - { - *byte = 4; - ret = - (((c0 & 0x7) << 18) | ((c1 & 0x3f) << 12) | ((c2 & 0x3f) << 6) | - (c3 & 0x3f)); - return ret; - } - - c4 = *(*buffer + 4); - - if ((c0 & 0xfc) == 0xf8) - { - *byte = 5; - ret = - (((c0 & 0x3) << 24) | ((c1 & 0x3f) << 18) | ((c2 & 0x3f) << 12) | - ((c3 & 0x3f) << 6) | (c4 & 0x3f)); - return ret; - } - - *byte = 1; - ret = (int64_t)c0; - return ret; -} - -#define __NXML_XTO8(x, b) \ - if (byte >= 1023 - b) \ - { \ - if (!(ret = realloc(ret, (j + b) * sizeof(char)))) \ - return -1; \ - byte = 0; \ - } \ - memcpy(&ret[j], x, b); \ - j += b; \ - byte += b; - -static size_t -__nxml_utf16to8(int le, unsigned char *buffer, size_t size, - unsigned char **ret_buffer) -{ - int64_t ch; - int j = 0; - int byte = 0; - unsigned char *ret; - - if (!(ret = (unsigned char *)malloc(sizeof(unsigned char) * 1024))) - return -1; - - while (size > 0) - { - if (le) - { - if ((*buffer & 0xfc) == 0xd8 && (*(buffer + 2) & 0xfc) == 0xdc) - { - ch = ((*buffer & 0x03) << 18) + (*(buffer + 1) << 10) + - ((*(buffer + 2) & 0x03) << 8) + *(buffer + 3); - - buffer += 4; - size -= 4; - } - - else - { - - ch = (*buffer << 8) + *(buffer + 1); - buffer += 2; - size -= 2; - } - } - - else if ((*(buffer + 1) & 0xfc) == 0xd8 && (*(buffer + 3) & 0xfc) == 0xdc) - { - ch = ((*(buffer + 1) & 0x03) << 18) + (*buffer << 10) + - ((*(buffer + 3) & 0x03) << 8) + *(buffer + 2); - - buffer += 4; - size -= 4; - } - - else - { - - ch = (*(buffer + 1) << 8) + *buffer; - buffer += 2; - size -= 2; - } - - /* 8bit: 1000000 */ - if (ch < 0x80) - { - __NXML_XTO8((void *)&ch, 1); - } - - /* 11bit: xx100000 xx000000 - * 1000 0000 0000 - * 0x 8 0 0 - */ - else if (ch < 0x800) - { - /* 11bits: 110xxxxx 10xxxxxx */ - char a[2]; - a[0] = (ch >> 6) | 0xc0; - a[1] = (ch & 0x3f) | 0x80; - __NXML_XTO8((void *)a, 2); - } - - /* 16bit: xxx10000 xx000000 xx000000 - * 1 0000 0000 0000 0000 - * 0x 1 0 0 0 0 - */ - else if (ch < 0x10000) - { - /* 16bits: 1110xxxx 10xxxxxx 10xxxxxx */ - char a[3]; - a[0] = (ch >> 12) | 0xe0; - a[1] = ((ch >> 6) & 0x3f) | 0x80; - a[2] = (ch & 0x3f) | 0x80; - __NXML_XTO8((void *)a, 3); - } - - /* 21bit: xxxx1000 xx000000 xx000000 xx000000 - * 10 0000 0000 0000 0000 0000 - * 0x 2 0 0 0 0 0 - */ - else if (ch < 0x200000) - { - /* 21bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - char a[4]; - a[0] = (ch >> 18) | 0xf0; - a[1] = ((ch >> 12) & 0x3f); - a[2] = ((ch >> 6) & 0x3f); - a[3] = (ch & 0x3f); - __NXML_XTO8((void *)a, 4); - } - - /* 26bit: xxxxx100 xx000000 xx000000 xx000000 xx000000 - * 100 0000 0000 0000 0000 0000 0000 - * 0x 4 0 0 0 0 0 0 - */ - else if (ch < 0x4000000) - { - /* 21bits: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ - char a[5]; - a[0] = (ch >> 24) | 0xf8; - a[1] = ((ch >> 18) & 0x3f); - a[2] = ((ch >> 12) & 0x3f); - a[3] = ((ch >> 6) & 0x3f); - a[4] = (ch & 0x3f); - __NXML_XTO8((void *)a, 5); - } - } - - ret[j] = 0; - (*ret_buffer) = ret; - - return (size_t)j; -} - -static size_t -__nxml_ucs4to8(int type, unsigned char *buffer, size_t size, - unsigned char **ret_buffer) -{ - int64_t ch; - int j = 0; - int byte = 0; - unsigned char *ret; - - if (!(ret = (unsigned char *)malloc(sizeof(unsigned char) * 1024))) - return -1; - - while (size > 0) - { - switch (type) - { - case 0: /* 1234 */ - ch = - (*buffer << 18) + (*(buffer + 1) << 12) + (*(buffer + 2) << 6) + - (*(buffer + 3)); - break; - - case 1: /* 4321 */ - ch = - (*buffer) + (*(buffer + 1) << 6) + (*(buffer + 2) << 12) + - (*(buffer + 3) << 18); - break; - - case 2: /* 2143 */ - ch = - ((*buffer) << 12) + (*(buffer + 1) << 18) + (*(buffer + 2)) + - (*(buffer + 3) << 6); - break; - - case 3: /* 3412 */ - ch = - ((*buffer) << 6) + (*(buffer + 1)) + (*(buffer + 2) << 18) + - (*(buffer + 3) << 12); - break; - } - - buffer += 4; - size -= 4; - - /* 8bit: 1000000 */ - if (ch < 0x80) - { - __NXML_XTO8((void *)&ch, 1); - } - - /* 11bit: xx100000 xx000000 - * 1000 0000 0000 - * 0x 8 0 0 - */ - else if (ch < 0x800) - { - /* 11bits: 110xxxxx 10xxxxxx */ - char a[2]; - a[0] = (ch >> 6) | 0xc0; - a[1] = (ch & 0x3f) | 0x80; - __NXML_XTO8((void *)a, 2); - } - - /* 16bit: xxx10000 xx000000 xx000000 - * 1 0000 0000 0000 0000 - * 0x 1 0 0 0 0 - */ - else if (ch < 0x10000) - { - /* 16bits: 1110xxxx 10xxxxxx 10xxxxxx */ - char a[3]; - a[0] = (ch >> 12) | 0xe0; - a[1] = ((ch >> 6) & 0x3f) | 0x80; - a[2] = (ch & 0x3f) | 0x80; - __NXML_XTO8((void *)a, 3); - } - - /* 21bit: xxxx1000 xx000000 xx000000 xx000000 - * 10 0000 0000 0000 0000 0000 - * 0x 2 0 0 0 0 0 - */ - else if (ch < 0x200000) - { - /* 21bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - char a[4]; - a[0] = (ch >> 18) | 0xf0; - a[1] = ((ch >> 12) & 0x3f); - a[2] = ((ch >> 6) & 0x3f); - a[3] = (ch & 0x3f); - __NXML_XTO8((void *)a, 4); - } - - /* 26bit: xxxxx100 xx000000 xx000000 xx000000 xx000000 - * 100 0000 0000 0000 0000 0000 0000 - * 0x 4 0 0 0 0 0 0 - */ - else if (ch < 0x4000000) - { - /* 21bits: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ - char a[5]; - a[0] = (ch >> 24) | 0xf8; - a[1] = ((ch >> 18) & 0x3f); - a[2] = ((ch >> 12) & 0x3f); - a[3] = ((ch >> 6) & 0x3f); - a[4] = (ch & 0x3f); - __NXML_XTO8((void *)a, 5); - } - } - - ret[j] = 0; - (*ret_buffer) = ret; - - return (size_t)j; -} - -int __nxml_utf_detection(char *r_buffer, size_t r_size, char **buffer, - size_t *size, nxml_charset_t *charset) -{ - /* Utf-8: 0x3c 0x3f 0x78 0x6d */ - if (strncmp(r_buffer, "<?xml", 5)) - { - *charset = NXML_CHARSET_UTF8; - return 0; - } - - /* Utf-16LE: 0x00 0x3c 0x00 0x3f */ - if (*r_buffer == 0x00 && *(r_buffer + 1) == 0x3c && *(r_buffer + 2) == 0x00 && *(r_buffer + 3) == 0x3f) - { - (*size) = - __nxml_utf16to8(1, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UTF16LE; - - return 1; - } - - /* Utf-16BE: 0x3c 0x00 0x3f 0x00 */ - if (*r_buffer == 0x3c && *(r_buffer + 1) == 0x00 && *(r_buffer + 2) == 0x3f && *(r_buffer + 3) == 0x00) - { - (*size) = - __nxml_utf16to8(0, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UTF16BE; - - return 1; - } - - /* UCS-4 (1234): 0x00 0x00 0x00 0x3c */ - if (*r_buffer == 0x00 && *(r_buffer + 1) == 0x00 && *(r_buffer + 2) == 0x00 && *(r_buffer + 3) == 0x3c) - { - (*size) = - __nxml_ucs4to8(0, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UCS4_1234; - - return 1; - } - - /* UCS-4 (4321): 0x3c 0x00 0x00 0x00 */ - if (*r_buffer == 0x3c && *(r_buffer + 1) == 0x00 && *(r_buffer + 2) == 0x00 && *(r_buffer + 3) == 0x00) - { - (*size) = - __nxml_ucs4to8(1, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UCS4_4321; - - return 1; - } - - /* UCS-4 (2143): 0x00 0x00 0x3c 0x00 */ - if (*r_buffer == 0x00 && *(r_buffer + 1) == 0x00 && *(r_buffer + 2) == 0x3c && *(r_buffer + 3) == 0x00) - { - (*size) = - __nxml_ucs4to8(2, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UCS4_2143; - - return 1; - } - - /* UCS-4 (3412): 0x00 0x3c 0x00 0x00 */ - if (*r_buffer == 0x00 && *(r_buffer + 1) == 0x3c && *(r_buffer + 2) == 0x00 && *(r_buffer + 3) == 0x00) - { - (*size) = - __nxml_ucs4to8(3, (unsigned char *)r_buffer, r_size, - (unsigned char **)buffer); - - if (*size < 0) - return -1; - - *charset = NXML_CHARSET_UCS4_3412; - - return 1; - } - - *charset = NXML_CHARSET_UNKNOWN; - - return 0; -} - -int64_t -__nxml_int_charset(int ch, unsigned char *str, char *charset) -{ - if (!charset || strcasecmp(charset, "utf-8")) - { - str[0] = ch; - return 1; - } - - /* 8bit: 1000000 */ - if (ch < 0x80) - { - str[0] = ch; - return 1; - } - - /* 11bit: xx100000 xx000000 - * 1000 0000 0000 - * 0x 8 0 0 - */ - else if (ch < 0x800) - { - /* 11bits: 110xxxxx 10xxxxxx */ - str[0] = (ch >> 6) | 0xc0; - str[1] = (ch & 0x3f) | 0x80; - return 2; - } - - /* 16bit: xxx10000 xx000000 xx000000 - * 1 0000 0000 0000 0000 - * 0x 1 0 0 0 0 - */ - else if (ch < 0x10000) - { - /* 16bits: 1110xxxx 10xxxxxx 10xxxxxx */ - str[0] = (ch >> 12) | 0xe0; - str[1] = ((ch >> 6) & 0x3f) | 0x80; - str[2] = (ch & 0x3f) | 0x80; - return 3; - } - - /* 21bit: xxxx1000 xx000000 xx000000 xx000000 - * 10 0000 0000 0000 0000 0000 - * 0x 2 0 0 0 0 0 - */ - else if (ch < 0x200000) - { - /* 21bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - str[0] = (ch >> 18) | 0xf0; - str[1] = ((ch >> 12) & 0x3f); - str[2] = ((ch >> 6) & 0x3f); - str[3] = (ch & 0x3f); - return 4; - } - - /* 26bit: xxxxx100 xx000000 xx000000 xx000000 xx000000 - * 100 0000 0000 0000 0000 0000 0000 - * 0x 4 0 0 0 0 0 0 - */ - else if (ch < 0x4000000) - { - /* 21bits: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ - str[0] = (ch >> 24) | 0xf8; - str[1] = ((ch >> 18) & 0x3f); - str[2] = ((ch >> 12) & 0x3f); - str[3] = ((ch >> 6) & 0x3f); - str[4] = (ch & 0x3f); - return 5; - } - - return 0; -} - -/* EOF */ diff --git a/plugins/backend/local/libnxml/nxml_write.c b/plugins/backend/local/libnxml/nxml_write.c deleted file mode 100644 index f1c658c7..00000000 --- a/plugins/backend/local/libnxml/nxml_write.c +++ /dev/null @@ -1,410 +0,0 @@ -/* nXml - Copyright (C) 2005-2007 bakunin - Andrea Marchesini - * <bakunin@autistici.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "nxml.h" - -static void -__nxml_write_escape_string(void (*func)(void *, char *, ...), void *obj, - char *str) -{ - int i; - int len; - char buf[1024]; - int j; - -#define __NXML_CHECK_BUF \ - if (j == sizeof(buf) - 1) \ - { \ - buf[j] = 0; \ - func(obj, "%s", buf); \ - j = 0; \ - } - - if (!str) - return; - - len = strlen(str); - - for (j = i = 0; i < len; i++) - { - if (str[i] == '\r') - continue; - - else if (str[i] == '<') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'l'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '>') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'g'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '&') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'a'; - __NXML_CHECK_BUF; - buf[j++] = 'm'; - __NXML_CHECK_BUF; - buf[j++] = 'p'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '\'') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'a'; - __NXML_CHECK_BUF; - buf[j++] = 'p'; - __NXML_CHECK_BUF; - buf[j++] = 'o'; - __NXML_CHECK_BUF; - buf[j++] = 's'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else if (str[i] == '\"') - { - buf[j++] = '&'; - __NXML_CHECK_BUF; - buf[j++] = 'q'; - __NXML_CHECK_BUF; - buf[j++] = 'u'; - __NXML_CHECK_BUF; - buf[j++] = 'o'; - __NXML_CHECK_BUF; - buf[j++] = 't'; - __NXML_CHECK_BUF; - buf[j++] = ';'; - __NXML_CHECK_BUF; - } - - else - { - buf[j++] = str[i]; - __NXML_CHECK_BUF; - } - } - - if (j) - { - buf[j] = 0; - func(obj, "%s", buf); - j = 0; - } -} - -static int -__nxml_write_haslines(char *what) -{ - while (what && *what) - { - if (*what == '\n') - return 1; - what++; - } - - return 0; -} - -static void -__nxml_write_indent(void (*func)(void *, char *, ...), void *obj, - int indent) -{ - int i; - for (i = 0; i < indent; i++) - func(obj, " "); -} - -static void -__nxml_write_newline(void (*func)(void *, char *, ...), void *obj) -{ - func(obj, "\n"); -} - -static void -__nxml_write_data_text(nxml_data_t *data, - void (*func)(void *, char *, ...), void *obj) -{ - __nxml_write_escape_string(func, obj, data->value); -} - -static void -__nxml_write_data_comment(nxml_data_t *data, - void (*func)(void *, char *, ...), void *obj) -{ - func(obj, "<!--%s-->", data->value); -} - -static void -__nxml_write_data_pi(nxml_data_t *data, void (*func)(void *, char *, ...), - void *obj) -{ - func(obj, "<?%s?>", data->value); -} - -static void -__nxml_write_data_doctype(nxml_doctype_t *data, - void (*func)(void *, char *, ...), void *obj) -{ - func(obj, "<!DOCTYPE %s %s>", data->name, data->value); -} - -static void -__nxml_write_data_element(nxml_data_t *data, - void (*func)(void *, char *, ...), void *obj) -{ - nxml_attr_t *attr; - - func(obj, "<"); - if (data->ns && data->ns->prefix) - func(obj, "%s:", data->ns->prefix); - func(obj, "%s", data->value); - - attr = data->attributes; - while (attr) - { - func(obj, " "); - - if (attr->ns && attr->ns->prefix) - func(obj, "%s:", attr->ns->prefix); - func(obj, "%s=\"", attr->name); - - __nxml_write_escape_string(func, obj, attr->value); - func(obj, "\""); - attr = attr->next; - } - - if (!data->children) - func(obj, " /"); - - func(obj, ">"); -} - -static void -__nxml_write_data(nxml_t *nxml, nxml_data_t *data, - void (*func)(void *, char *, ...), void *obj, int indent) -{ - nxml_data_t *tmp; - int i; - - switch (data->type) - { - case NXML_TYPE_TEXT: - if (data->children || data->next || __nxml_write_haslines(data->value) || (data->parent && data->parent->children != data)) - { - i = 1; - __nxml_write_indent(func, obj, indent); - } - else - i = 0; - - __nxml_write_data_text(data, func, obj); - - if (i) - __nxml_write_newline(func, obj); - break; - - case NXML_TYPE_COMMENT: - __nxml_write_indent(func, obj, indent); - __nxml_write_data_comment(data, func, obj); - __nxml_write_newline(func, obj); - break; - - case NXML_TYPE_PI: - __nxml_write_indent(func, obj, indent); - __nxml_write_data_pi(data, func, obj); - __nxml_write_newline(func, obj); - break; - - default: - __nxml_write_indent(func, obj, indent); - __nxml_write_data_element(data, func, obj); - - if (!data->children || data->children->type != NXML_TYPE_TEXT || data->children->next || __nxml_write_haslines(data->children->value)) - __nxml_write_newline(func, obj); - - break; - } - - if (data->children) - { - tmp = data->children; - - while (tmp) - { - __nxml_write_data(nxml, tmp, func, obj, indent + 1); - tmp = tmp->next; - } - - if (data->type == NXML_TYPE_ELEMENT) - { - if (!data->children || data->children->type != NXML_TYPE_TEXT || data->children->next || data->children->children || __nxml_write_haslines(data->children->value)) - __nxml_write_indent(func, obj, indent); - - func(obj, "</"); - if (data->ns && data->ns->prefix) - func(obj, "%s:", data->ns->prefix); - func(obj, "%s>", data->value); - - __nxml_write_newline(func, obj); - } - } -} - -static nxml_error_t -__nxml_write_real(nxml_t *nxml, void (*func)(void *, char *, ...), - void *obj) -{ - nxml_data_t *data; - nxml_doctype_t *doctype; - - func(obj, "<?xml"); - - func(obj, " version=\""); - - switch (nxml->version) - { - case NXML_VERSION_1_0: - func(obj, "1.0"); - break; - default: - func(obj, "1.1"); - } - - func(obj, "\""); - - if (nxml->encoding) - func(obj, " encoding=\"%s\"", nxml->encoding); - - func(obj, " standalone=\"%s\"?>\n\n", nxml->standalone ? "yes" : "no"); - - doctype = nxml->doctype; - - while (doctype) - { - __nxml_write_indent(func, obj, 0); - __nxml_write_data_doctype(doctype, func, obj); - __nxml_write_newline(func, obj); - - doctype = doctype->next; - } - - data = nxml->data; - - while (data) - { - __nxml_write_data(nxml, data, func, obj, 0); - - data = data->next; - } - - return NXML_OK; -} - -static void -__nxml_file_write(void *obj, char *str, ...) -{ - va_list va; - - va_start(va, str); - vfprintf((FILE *)obj, str, va); - va_end(va); -} - -static void -__nxml_buffer_write(void *obj, char *str, ...) -{ - va_list va; - char s[4096]; - int len; - char **buffer = (char **)obj; - - va_start(va, str); - len = vsnprintf(s, sizeof(s), str, va); - va_end(va); - - if (!*buffer) - { - if (!(*buffer = (char *)malloc(sizeof(char) * (len + 1)))) - return; - - strcpy(*buffer, s); - } - else - { - if (!(*buffer = (char *)realloc(*buffer, - sizeof(char) * (strlen(*buffer) + - len + 1)))) - return; - - strcat(*buffer, s); - } -} - -/*************************** EXTERNAL FUNCTION ******************************/ - -nxml_error_t -nxml_write_file(nxml_t *nxml, char *file) -{ - FILE *fl; - nxml_error_t ret; - - if (!nxml || !file) - return NXML_ERR_DATA; - - if (!(fl = fopen(file, "wb"))) - return NXML_ERR_POSIX; - - ret = __nxml_write_real(nxml, __nxml_file_write, fl); - fclose(fl); - - return ret; -} - -nxml_error_t -nxml_write_buffer(nxml_t *nxml, char **buffer) -{ - if (!nxml || !buffer) - return NXML_ERR_DATA; - - return __nxml_write_real(nxml, __nxml_buffer_write, buffer); -} - -/* EOF */ diff --git a/plugins/backend/local/meson.build b/plugins/backend/local/meson.build index 6a51f8a0..3fefecff 100644 --- a/plugins/backend/local/meson.build +++ b/plugins/backend/local/meson.build @@ -3,25 +3,11 @@ local_resources = gnome.compile_resources( 'local.gresource.xml' ) -subdir('libnxml') -subdir('libmrss') -subdir('rss-glib') - - -rss_glib_dir = join_paths(meson.current_source_dir(), 'rss-glib/') -rss_glib_vapi = vala_compiler.find_library('rss-glib-1.0', dirs: rss_glib_dir) -lib_rss_glib = declare_dependency( - link_with: rss_glib_lib, - include_directories: rss_glib_inc, - dependencies: rss_glib_vapi -) - plugin_lib = shared_library( 'local', [ 'localInterface.vala', 'localUtils.vala', - 'Rfc822.vala', 'SuggestedFeedRow.vala' ], local_resources, diff --git a/plugins/backend/local/rss-glib/meson.build b/plugins/backend/local/rss-glib/meson.build deleted file mode 100644 index 05c5be84..00000000 --- a/plugins/backend/local/rss-glib/meson.build +++ /dev/null @@ -1,12 +0,0 @@ -rss_glib_inc = include_directories(['.', '../libmrss']) -rss_glib_lib = static_library( - 'rss-glib', - [ - 'rss-document.c', - 'rss-marshal.c', - 'rss-item.c', - 'rss-parser.c' - ], - include_directories: rss_glib_inc, - dependencies: glib -) diff --git a/plugins/backend/local/rss-glib/rss-document-private.h b/plugins/backend/local/rss-glib/rss-document-private.h deleted file mode 100644 index 84889e93..00000000 --- a/plugins/backend/local/rss-glib/rss-document-private.h +++ /dev/null @@ -1,58 +0,0 @@ -/* rss-document-private.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_DOCUMENT_PRIVATE_H__ -#define __RSS_DOCUMENT_PRIVATE_H__ - -#include <mrss.h> - -struct _RssDocumentPrivate -{ - gchar *encoding; - gchar *guid; - gchar *title; - gchar *description; - gchar *link; - gchar *language; - gchar *rating; - gchar *copyright; - gchar *pub_date; - gchar *editor; - gchar *editor_email; - gchar *editor_uri; - gint ttl; - gchar *about; - gchar *contributor; - gchar *contributor_email; - gchar *contributor_uri; - gchar *generator; - gchar *generator_uri; - gchar *generator_version; - gchar *image_title; - gchar *image_url; - gchar *image_link; - - GList *items; - GList *categories; -}; - -#endif /* __RSS_DOCUMENT_PRIVATE_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-document.c b/plugins/backend/local/rss-glib/rss-document.c deleted file mode 100644 index c98a2f13..00000000 --- a/plugins/backend/local/rss-glib/rss-document.c +++ /dev/null @@ -1,1085 +0,0 @@ -/* rss-document.c - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -/** - * SECTION:rss-document - * @short_description: a RSS document representation - * @see_also: rss_parser_get_document() - * - * #RssDocument is the representation of the resource that was parsed. It - * contains a list of #RssItem<!-- -->s which in turn contain article information. - */ - -#include "rss-document.h" -#include "rss-document-private.h" - -G_DEFINE_TYPE (RssDocument, rss_document, G_TYPE_OBJECT); - -enum { - PROP_0, - - PROP_ENCODING, - PROP_GUID, - PROP_TITLE, - PROP_DESCRIPTION, - PROP_LINK, - PROP_LANGUAGE, - PROP_RATING, - PROP_COPYRIGHT, - PROP_PUB_DATE, - PROP_PUB_DATE_PARSED, - PROP_EDITOR, - PROP_EDITOR_EMAIL, - PROP_EDITOR_URI, - PROP_TTL, - PROP_ABOUT, - PROP_CONTRIBUTOR, - PROP_CONTRIBUTOR_EMAIL, - PROP_CONTRIBUTOR_URI, - PROP_GENERATOR, - PROP_GENERATOR_URI, - PROP_GENERATOR_VERSION, - PROP_IMAGE_TITLE, - PROP_IMAGE_URL, - PROP_IMAGE_LINK -}; - -static void -rss_document_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - RssDocumentPrivate *priv = RSS_DOCUMENT (object)->priv; - - switch (property_id) { - case PROP_ENCODING: - g_value_set_string (value, priv->encoding); - break; - case PROP_GUID: - g_value_set_string (value, priv->guid); - break; - case PROP_TITLE: - g_value_set_string (value, priv->title); - break; - case PROP_DESCRIPTION: - g_value_set_string (value, priv->description); - break; - case PROP_LINK: - g_value_set_string (value, priv->link); - break; - case PROP_LANGUAGE: - g_value_set_string (value, priv->language); - break; - case PROP_RATING: - g_value_set_string (value, priv->rating); - break; - case PROP_COPYRIGHT: - g_value_set_string (value, priv->copyright); - break; - case PROP_PUB_DATE: - g_value_set_string (value, priv->pub_date); - break; - case PROP_EDITOR: - g_value_set_string (value, priv->editor); - break; - case PROP_EDITOR_EMAIL: - g_value_set_string (value, priv->editor_email); - break; - case PROP_EDITOR_URI: - g_value_set_string (value, priv->editor_uri); - break; - case PROP_ABOUT: - g_value_set_string (value, priv->about); - break; - case PROP_CONTRIBUTOR: - g_value_set_string (value, priv->contributor); - break; - case PROP_CONTRIBUTOR_EMAIL: - g_value_set_string (value, priv->contributor_email); - break; - case PROP_CONTRIBUTOR_URI: - g_value_set_string (value, priv->contributor_uri); - break; - case PROP_GENERATOR: - g_value_set_string (value, priv->generator); - break; - case PROP_GENERATOR_URI: - g_value_set_string (value, priv->generator_uri); - break; - case PROP_GENERATOR_VERSION: - g_value_set_string (value, priv->generator_version); - break; - case PROP_IMAGE_TITLE: - g_value_set_string (value, priv->image_title); - break; - case PROP_IMAGE_URL: - g_value_set_string (value, priv->image_url); - break; - case PROP_IMAGE_LINK: - g_value_set_string (value, priv->image_link); - break; - case PROP_TTL: - g_value_set_int (value, priv->ttl); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -rss_document_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - RssDocumentPrivate *priv = RSS_DOCUMENT (object)->priv; - - switch (property_id) { - case PROP_ENCODING: - g_free (priv->encoding); - priv->encoding = g_value_dup_string (value); - break; - case PROP_GUID: - g_free (priv->guid); - priv->guid = g_value_dup_string (value); - break; - case PROP_TITLE: - g_free (priv->title); - priv->title = g_value_dup_string (value); - break; - case PROP_DESCRIPTION: - g_free (priv->description); - priv->description = g_value_dup_string (value); - break; - case PROP_LINK: - g_free (priv->link); - priv->link = g_value_dup_string (value); - break; - case PROP_LANGUAGE: - g_free (priv->language); - priv->language = g_value_dup_string (value); - break; - case PROP_RATING: - g_free (priv->rating); - priv->rating = g_value_dup_string (value); - break; - case PROP_COPYRIGHT: - g_free (priv->copyright); - priv->copyright = g_value_dup_string (value); - break; - case PROP_PUB_DATE: - g_free (priv->pub_date); - priv->pub_date = g_value_dup_string (value); - break; - case PROP_EDITOR: - g_free (priv->editor); - priv->editor = g_value_dup_string (value); - break; - case PROP_EDITOR_EMAIL: - g_free (priv->editor_email); - priv->editor_email = g_value_dup_string (value); - break; - case PROP_EDITOR_URI: - g_free (priv->editor_uri); - priv->editor_uri = g_value_dup_string (value); - break; - case PROP_ABOUT: - g_free (priv->about); - priv->about = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR: - g_free (priv->contributor); - priv->contributor = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR_EMAIL: - g_free (priv->contributor_email); - priv->contributor_email = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR_URI: - g_free (priv->contributor_uri); - priv->contributor_uri = g_value_dup_string (value); - break; - case PROP_GENERATOR: - g_free (priv->generator); - priv->generator = g_value_dup_string (value); - break; - case PROP_GENERATOR_URI: - g_free (priv->generator_uri); - priv->generator_uri = g_value_dup_string (value); - break; - case PROP_GENERATOR_VERSION: - g_free (priv->generator_version); - priv->generator_version = g_value_dup_string (value); - break; - case PROP_IMAGE_TITLE: - g_free (priv->image_title); - priv->image_title = g_value_dup_string (value); - break; - case PROP_IMAGE_URL: - g_free (priv->image_url); - priv->image_url = g_value_dup_string (value); - break; - case PROP_IMAGE_LINK: - g_free (priv->image_link); - priv->image_link = g_value_dup_string (value); - break; - case PROP_TTL: - priv->ttl = g_value_get_int (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -rss_document_dispose (GObject *object) -{ - RssDocumentPrivate *priv = RSS_DOCUMENT (object)->priv; - - g_free (priv->encoding); - g_free (priv->guid); - g_free (priv->title); - g_free (priv->description); - g_free (priv->link); - g_free (priv->language); - g_free (priv->rating); - g_free (priv->copyright); - g_free (priv->pub_date); - g_free (priv->editor); - g_free (priv->editor_email); - g_free (priv->editor_uri); - g_free (priv->about); - g_free (priv->contributor); - g_free (priv->contributor_email); - g_free (priv->contributor_uri); - g_free (priv->generator); - g_free (priv->generator_uri); - g_free (priv->generator_version); - g_free (priv->image_title); - g_free (priv->image_url); - g_free (priv->image_link); - - /* free the items */ - g_list_foreach (priv->items, (GFunc) g_object_unref, NULL); - g_list_free (priv->items); - - /* free the category strings */ - g_list_foreach (priv->categories, (GFunc) g_free, NULL); - g_list_free (priv->categories); - - G_OBJECT_CLASS (rss_document_parent_class)->dispose (object); -} - -static void -rss_document_class_init (RssDocumentClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (RssDocumentPrivate)); - - gobject_class->get_property = rss_document_get_property; - gobject_class->set_property = rss_document_set_property; - gobject_class->dispose = rss_document_dispose; - - /** - * RssDocument:encoding: - * - * The encoding of the #RssDocument. - */ - pspec = g_param_spec_string ("encoding", - "Encoding", - "Encoding of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_ENCODING, - pspec); - - /** - * RssDocument:guid: - * - * The guid associated with the feed. This is often the url of the - * feed. - */ - pspec = g_param_spec_string ("guid", - "GUID", - "The GUID of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_GUID, - pspec); - - /** - * RssDocument:title: - * - * The title of the #RssDocument. - */ - pspec = g_param_spec_string ("title", - "Title", - "Title of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_TITLE, - pspec); - - /** - * RssDocument:description: - * - * The description of the #RssDocument. - */ - pspec = g_param_spec_string ("description", - "Description", - "Description of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_DESCRIPTION, - pspec); - - /** - * RssDocument:link: - * - * The link to the source document. This is parsed from the actual - * document and can point to whatever the source publisher choses. - */ - pspec = g_param_spec_string ("link", - "Link", - "The link to the source document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_LINK, - pspec); - - /** - * RssDocument:language: - * - * The language the #RssDocument was published in. - */ - pspec = g_param_spec_string ("language", - "Language", - "Language of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_LANGUAGE, - pspec); - - /** - * RssDocument:rating: - * - * The rating associated with the #RssDocument. - */ - pspec = g_param_spec_string ("rating", - "Rating", - "Rating of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_RATING, - pspec); - - /** - * RssDocument:copyright: - * - * The copyright of the #RssDocument. - */ - pspec = g_param_spec_string ("copyright", - "Copyright", - "Copyright of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_COPYRIGHT, - pspec); - - /** - * RssDocument:pub-date: - * - * The string representation of the date the document was published. - */ - pspec = g_param_spec_string ("pub-date", - "Publication Date", - "Publication date of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_PUB_DATE, - pspec); - - /** - * RssDocument:editor: - * - * The name of the editor. - */ - pspec = g_param_spec_string ("editor", - "Editor", - "Editor of the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_EDITOR, - pspec); - - /** - * RssDocument:editor-email: - * - * The email address of the editor. - */ - pspec = g_param_spec_string ("editor-email", - "Editor Email", - "Email of the editor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_EDITOR_EMAIL, - pspec); - - /** - * RssDocument:editor-uri: - * - * The uri for more information about the editor. - */ - pspec = g_param_spec_string ("editor-uri", - "Editor URI", - "The URI of the editor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_EDITOR_URI, - pspec); - - /** - * RssDocument:about: - * - * Information about the #RssDocument. - */ - pspec = g_param_spec_string ("about", - "About", - "Information about the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_ABOUT, - pspec); - - /** - * RssDocument:contributor: - * - * The name of the particular contributor. - */ - pspec = g_param_spec_string ("contributor", - "Contributor", - "Name of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR, - pspec); - - /** - * RssDocument:contributor-email: - * - * The email of the particular contributor. - */ - pspec = g_param_spec_string ("contributor-email", - "Contributor Email", - "Email of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR_EMAIL, - pspec); - - /** - * RssDocument:contributor-uri: - * - * The uri to more information on the particular contributer. - */ - pspec = g_param_spec_string ("contributor-uri", - "Contributor URI", - "URI of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR_URI, - pspec); - - /** - * RssDocument:generator: - * - * The name of the generator on the server side. - */ - pspec = g_param_spec_string ("generator", - "Generator", - "Name of the document generator", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_GENERATOR, - pspec); - - /** - * RssDocument:generator-uri: - * - * Url to more information about the generator on the server side. - */ - pspec = g_param_spec_string ("generator-uri", - "Generator URI", - "URI of the document generator", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_GENERATOR_URI, - pspec); - - /** - * RssDocument:generator-version: - * - * The version of the server side generator. - */ - pspec = g_param_spec_string ("generator-version", - "Generator Version", - "Version of the document generator", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_GENERATOR_VERSION, - pspec); - - /** - * RssDocument:image-title: - * - * The title for the image. This is often the alt="" tag in HTML. - */ - pspec = g_param_spec_string ("image-title", - "Image Title", - "Title of the image for the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_IMAGE_TITLE, - pspec); - - /** - * RssDocument:image-url: - * - * A url to the image for the RssDocument. Use this before checking - * for a favicon.ico. - */ - pspec = g_param_spec_string ("image-url", - "Image URL", - "URL of the image for the document", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_IMAGE_URL, - pspec); - - /** - * RssDocument:image-link: - * - * The url a user should be redirected to when clicking on the image - * for the #RssDocument. Of course, its up to UI designers if they - * wish to implement this in any sort of way. - */ - pspec = g_param_spec_string ("image-link", - "Image Link", - "URL for document image link", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_IMAGE_LINK, - pspec); - - /** - * RssDocument:ttl: - * - * The publisher determined TTL for the source. Readers should try - * to respect this value and not update feeds any more often than - * necessary. - */ - pspec = g_param_spec_int ("ttl", - "TTL", - "Time to live for the document", - 0, G_MAXINT32, 0, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_TTL, - pspec); -} - -static void -rss_document_init (RssDocument *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RSS_TYPE_DOCUMENT, - RssDocumentPrivate); -} - -/** - * rss_document_new: - * - * Creates a new instance of #RssDocument. This isn't incredibly useful - * currently, but is here none-the-less. The desire is to create an - * RSS generator that will allow for building RSS streams out of the - * document hierarchy. - * - * Returns: a new #RssDocument. Use g_object_unref() when you are done. - */ -RssDocument* -rss_document_new (void) -{ - return g_object_new (RSS_TYPE_DOCUMENT, NULL); -} - -/** - * rss_document_get_items: - * @self: a #RssDocument - * - * Creates a #GList of #RssItem<!-- -->s that were found in the syndication. The objects - * in the list are weak references. Consumers of those objects should ref - * them with g_object_ref. - * - * Returns: a new #GList owned by the caller. - */ -GList* -rss_document_get_items (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return g_list_copy (self->priv->items); -} - -/** - * rss_document_get_categories: - * @self: a #RssDocument - * - * Creates a #GList of categories found in the syndication. The strings - * in the list are weak references. Consumers should duplicate them - * with g_strdup(). - * - * Returns: a new #GList owned by the caller - */ -GList* -rss_document_get_categories (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return g_list_copy (self->priv->categories); -} - -/** - * rss_document_get_guid: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:guid field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_guid (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->guid; -} - -/** - * rss_document_get_about: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:about field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_about (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->about; -} - -/** - * rss_document_get_title: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:title field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_title (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->title; -} - -/** - * rss_document_get_description: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:description field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_description (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->description; -} - -/** - * rss_document_get_link: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:link field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_link (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->link; -} - -/** - * rss_document_get_encoding: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:encoding field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_encoding (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->encoding; -} - -/** - * rss_document_get_language: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:language field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_language (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->language; -} - -/** - * rss_document_get_rating: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:rating field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_rating (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->rating; -} - -/** - * rss_document_get_copyright: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:copyright field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_copyright (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->copyright; -} - -/** - * rss_document_get_pub_date: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:pub-date field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_pub_date (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->pub_date; -} - -/** - * rss_document_get_editor_name: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:editor field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_editor_name (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->editor; -} - -/** - * rss_document_get_editor_email: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:editor-email field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_editor_email (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->editor_email; -} - -/** - * rss_document_get_editor_uri: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:editor-uri field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_editor_uri (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->editor_uri; -} - -/** - * rss_document_get_contributor: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:contributor field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_contributor_name (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->contributor; -} - -/** - * rss_document_get_contributor_email: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:contributor-email field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_contributor_email (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->contributor_email; -} - -/** - * rss_document_get_contributor_uri: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:contributor-uri field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_contributor_uri (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->contributor_uri; -} - -/** - * rss_document_get_generator_name: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:generator-name field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_generator_name (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->generator; -} - -/** - * rss_document_get_generator_uri: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:generator-uri field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_generator_uri (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->generator_uri; -} - -/** - * rss_document_get_generator_version: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:generator-version field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_generator_version (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->generator_version; -} - -/** - * rss_document_get_image_title: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:image-title field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_image_title (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->image_title; -} - -/** - * rss_document_get_image_url: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:image-url field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_image_url (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->image_url; -} - -/** - * rss_document_get_image_link: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:image-link field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -const gchar * -rss_document_get_image_link (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), NULL); - - return self->priv->image_link; -} - -/** - * rss_document_get_ttl: - * @self: a #RssDocument - * - * Retrieves the #RssDocument:ttl field. - * - * Return value: the contents of the field. The returned string is - * owned by the #RssDocument and should never be modified of freed - */ -gint -rss_document_get_ttl (RssDocument *self) -{ - g_return_val_if_fail (RSS_IS_DOCUMENT (self), 0); - - return self->priv->ttl; -} diff --git a/plugins/backend/local/rss-glib/rss-document.h b/plugins/backend/local/rss-glib/rss-document.h deleted file mode 100644 index 58c995ab..00000000 --- a/plugins/backend/local/rss-glib/rss-document.h +++ /dev/null @@ -1,105 +0,0 @@ -/* rss-document.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_DOCUMENT_H__ -#define __RSS_DOCUMENT_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -#define RSS_TYPE_DOCUMENT rss_document_get_type() - -#define RSS_DOCUMENT(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - RSS_TYPE_DOCUMENT, \ - RssDocument)) - -#define RSS_DOCUMENT_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - RSS_TYPE_DOCUMENT, \ - RssDocumentClass)) - -#define RSS_IS_DOCUMENT(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - RSS_TYPE_DOCUMENT)) - -#define RSS_IS_DOCUMENT_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - RSS_TYPE_DOCUMENT)) - -#define RSS_DOCUMENT_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - RSS_TYPE_DOCUMENT, \ - RssDocumentClass)) - -typedef struct _RssDocument RssDocument; -typedef struct _RssDocumentPrivate RssDocumentPrivate; -typedef struct _RssDocumentClass RssDocumentClass; - -struct _RssDocument -{ - /*< private >*/ - GObject parent_instance; - - RssDocumentPrivate *priv; -}; - -struct _RssDocumentClass -{ - /*< private >*/ - GObjectClass parent_class; -}; - -GType rss_document_get_type (void); -RssDocument* rss_document_new (void); - -const gchar *rss_document_get_guid (RssDocument *self); -const gchar *rss_document_get_about (RssDocument *self); -const gchar *rss_document_get_title (RssDocument *self); -const gchar *rss_document_get_description (RssDocument *self); -const gchar *rss_document_get_link (RssDocument *self); -const gchar *rss_document_get_encoding (RssDocument *self); -const gchar *rss_document_get_language (RssDocument *self); -const gchar *rss_document_get_rating (RssDocument *self); -const gchar *rss_document_get_copyright (RssDocument *self); -const gchar *rss_document_get_pub_date (RssDocument *self); -const gchar *rss_document_get_editor_name (RssDocument *self); -const gchar *rss_document_get_editor_email (RssDocument *self); -const gchar *rss_document_get_editor_uri (RssDocument *self); -const gchar *rss_document_get_contributor_name (RssDocument *self); -const gchar *rss_document_get_contributor_email (RssDocument *self); -const gchar *rss_document_get_contributor_uri (RssDocument *self); -const gchar *rss_document_get_generator_name (RssDocument *self); -const gchar *rss_document_get_generator_uri (RssDocument *self); -const gchar *rss_document_get_generator_version (RssDocument *self); -const gchar *rss_document_get_image_title (RssDocument *self); -const gchar *rss_document_get_image_url (RssDocument *self); -const gchar *rss_document_get_image_link (RssDocument *self); -gint rss_document_get_ttl (RssDocument *self); - -GList * rss_document_get_items (RssDocument *self); -GList * rss_document_get_categories (RssDocument *self); - -G_END_DECLS - -#endif /* __RSS_DOCUMENT_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-glib-1.0.vapi b/plugins/backend/local/rss-glib/rss-glib-1.0.vapi deleted file mode 100644 index 2a571cb4..00000000 --- a/plugins/backend/local/rss-glib/rss-glib-1.0.vapi +++ /dev/null @@ -1,126 +0,0 @@ -/* rss-glib-1.0.vapi - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -[CCode (cprefix = "Rss", lower_case_cprefix = "rss_", cheader_filename = "rss-glib.h")] -namespace Rss { - public errordomain ParserError { - INVALID_DATA - } - - public class Parser : GLib.Object { - public Parser (); - public bool load_from_data (string data, ulong length) throws Rss.ParserError; - public bool load_from_file (string filename) throws Rss.ParserError; - public Rss.Document get_document (); - } - - public class Document : GLib.Object { - [NoAccessorMethod] - public string encoding { owned get; set; } - [NoAccessorMethod] - public string guid { owned get; set; } - [NoAccessorMethod] - public string title { owned get; set; } - [NoAccessorMethod] - public string description { owned get; set; } - [NoAccessorMethod] - public string link { owned get; set; } - [NoAccessorMethod] - public string language { owned get; set; } - [NoAccessorMethod] - public string rating { owned get; set; } - [NoAccessorMethod] - public string copyright { owned get; set; } - [NoAccessorMethod] - public string pub_date { owned get; set; } - [NoAccessorMethod] - public string editor { owned get; set; } - [NoAccessorMethod] - public string editor_email { owned get; set; } - [NoAccessorMethod] - public string editor_uri { owned get; set; } - [NoAccessorMethod] - public int ttl { owned get; set; } - [NoAccessorMethod] - public string about { owned get; set; } - [NoAccessorMethod] - public string contributor { owned get; set; } - [NoAccessorMethod] - public string contributor_email { owned get; set; } - [NoAccessorMethod] - public string contributor_uri { owned get; set; } - [NoAccessorMethod] - public string generator { owned get; set; } - [NoAccessorMethod] - public string generator_uri { owned get; set; } - [NoAccessorMethod] - public string generator_version { owned get; set; } - [NoAccessorMethod] - public string image_title { owned get; set; } - [NoAccessorMethod] - public string image_url { owned get; set; } - [NoAccessorMethod] - public string image_link { owned get; set; } - public Document (); - public GLib.List<weak Rss.Item> get_items (); - public GLib.List<string> get_categories (); - } - - public class Item : GLib.Object { - [NoAccessorMethod] - public string guid { owned get; set; } - [NoAccessorMethod] - public string title { owned get; set; } - [NoAccessorMethod] - public string link { owned get; set; } - [NoAccessorMethod] - public string description { owned get; set; } - [NoAccessorMethod] - public string copyright{ owned get; set; } - [NoAccessorMethod] - public string author { owned get; set; } - [NoAccessorMethod] - public string author_uri { owned get; set; } - [NoAccessorMethod] - public string author_email { owned get; set; } - [NoAccessorMethod] - public string contributor { owned get; set; } - [NoAccessorMethod] - public string contributor_uri { owned get; set; } - [NoAccessorMethod] - public string contributor_email { owned get; set; } - [NoAccessorMethod] - public string comments { owned get; set; } - [NoAccessorMethod] - public string pub_date { owned get; set; } - [NoAccessorMethod] - public string source { owned get; set; } - [NoAccessorMethod] - public string source_url { owned get; set; } - [NoAccessorMethod] - public string enclosure { owned get; set; } - [NoAccessorMethod] - public string enclosure_url { owned get; set; } - public Item (); - public GLib.List<string> get_categories (); - } -} diff --git a/plugins/backend/local/rss-glib/rss-glib.h b/plugins/backend/local/rss-glib/rss-glib.h deleted file mode 100644 index 1595d64c..00000000 --- a/plugins/backend/local/rss-glib/rss-glib.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __RSS_GLIB_H__ -#define __RSS_GLIB_H__ - -#include <rss-parser.h> -#include <rss-document.h> -#include <rss-item.h> -#include <rss-version.h> - -#endif /* __RSS_GLIB_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-item-private.h b/plugins/backend/local/rss-glib/rss-item-private.h deleted file mode 100644 index d4951a38..00000000 --- a/plugins/backend/local/rss-glib/rss-item-private.h +++ /dev/null @@ -1,48 +0,0 @@ -/* rss-item-private.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_ITEM_PRIVATE_H__ -#define __RSS_ITEM_PRIVATE_H__ - -struct _RssItemPrivate { - gchar *guid; - gchar *title; - gchar *link; - gchar *description; - gchar *copyright; - gchar *author; - gchar *author_uri; - gchar *author_email; - gchar *contributor; - gchar *contributor_uri; - gchar *contributor_email; - gchar *comments; - gchar *pub_date; - gchar *source; - gchar *source_url; - gchar *enclosure; - gchar *enclosure_url; - - GList *categories; -}; - -#endif /* __RSS_ITEM_PRIVATE_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-item.c b/plugins/backend/local/rss-glib/rss-item.c deleted file mode 100644 index fb39cbb9..00000000 --- a/plugins/backend/local/rss-glib/rss-item.c +++ /dev/null @@ -1,819 +0,0 @@ -/* rss-item.c - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -/** - * SECTION:rss-item - * @short_description: a RSS entry representation - * - * #RssItem is the representation of an individual item parsed from a - * #RssDocument. This would mean an individual article, or note within - * the source feed. - */ - -#include "rss-item.h" -#include "rss-item-private.h" - -G_DEFINE_TYPE (RssItem, rss_item, G_TYPE_OBJECT); - -enum { - PROP_0, - - PROP_TITLE, - PROP_LINK, - PROP_DESCRIPTION, - PROP_COPYRIGHT, - PROP_AUTHOR, - PROP_AUTHOR_URI, - PROP_AUTHOR_EMAIL, - PROP_CONTRIBUTOR, - PROP_CONTRIBUTOR_URI, - PROP_CONTRIBUTOR_EMAIL, - PROP_COMMENTS, - PROP_PUB_DATE, - PROP_GUID, - PROP_SOURCE, - PROP_SOURCE_URL, - PROP_ENCLOSURE, - PROP_ENCLOSURE_URL -}; - -static void -rss_item_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - RssItemPrivate *priv = RSS_ITEM (object)->priv; - - switch (property_id) { - case PROP_ENCLOSURE: - g_value_set_string (value, priv->enclosure); - break; - case PROP_ENCLOSURE_URL: - g_value_set_string (value, priv->enclosure_url); - break; - case PROP_TITLE: - g_value_set_string (value, priv->title); - break; - case PROP_LINK: - g_value_set_string (value, priv->link); - break; - case PROP_DESCRIPTION: - g_value_set_string (value, priv->description); - break; - case PROP_COPYRIGHT: - g_value_set_string (value, priv->copyright); - break; - case PROP_AUTHOR: - g_value_set_string (value, priv->author); - break; - case PROP_AUTHOR_URI: - g_value_set_string (value, priv->author_uri); - break; - case PROP_AUTHOR_EMAIL: - g_value_set_string (value, priv->author_email); - break; - case PROP_CONTRIBUTOR: - g_value_set_string (value, priv->contributor); - break; - case PROP_CONTRIBUTOR_URI: - g_value_set_string (value, priv->contributor_uri); - break; - case PROP_CONTRIBUTOR_EMAIL: - g_value_set_string (value, priv->contributor_email); - break; - case PROP_COMMENTS: - g_value_set_string (value, priv->comments); - break; - case PROP_PUB_DATE: - g_value_set_string (value, priv->pub_date); - break; - case PROP_GUID: - g_value_set_string (value, priv->guid); - break; - case PROP_SOURCE: - g_value_set_string (value, priv->source); - break; - case PROP_SOURCE_URL: - g_value_set_string (value, priv->source_url); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -rss_item_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - RssItemPrivate *priv = RSS_ITEM (object)->priv; - - switch (property_id) { - case PROP_ENCLOSURE: - g_free (priv->enclosure); - priv->enclosure = g_value_dup_string (value); - break; - case PROP_ENCLOSURE_URL: - g_free (priv->enclosure_url); - priv->enclosure_url = g_value_dup_string (value); - break; - case PROP_TITLE: - g_free (priv->title); - priv->title = g_value_dup_string (value); - break; - case PROP_LINK: - g_free (priv->link); - priv->link = g_value_dup_string (value); - break; - case PROP_DESCRIPTION: - g_free (priv->description); - priv->description = g_value_dup_string (value); - break; - case PROP_COPYRIGHT: - g_free (priv->copyright); - priv->copyright = g_value_dup_string (value); - break; - case PROP_AUTHOR: - g_free (priv->author); - priv->author = g_value_dup_string (value); - break; - case PROP_AUTHOR_URI: - g_free (priv->author_uri); - priv->author_uri = g_value_dup_string (value); - break; - case PROP_AUTHOR_EMAIL: - g_free (priv->author_email); - priv->author_email = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR: - g_free (priv->contributor); - priv->contributor = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR_URI: - g_free (priv->contributor_uri); - priv->contributor_uri = g_value_dup_string (value); - break; - case PROP_CONTRIBUTOR_EMAIL: - g_free (priv->contributor_email); - priv->contributor_email = g_value_dup_string (value); - break; - case PROP_COMMENTS: - g_free (priv->comments); - priv->comments = g_value_dup_string (value); - break; - case PROP_PUB_DATE: - g_free (priv->pub_date); - priv->pub_date = g_value_dup_string (value); - break; - case PROP_GUID: - g_free (priv->guid); - priv->guid = g_value_dup_string (value); - break; - case PROP_SOURCE: - g_free (priv->source); - priv->source = g_value_dup_string (value); - break; - case PROP_SOURCE_URL: - g_free (priv->source_url); - priv->source_url = g_value_dup_string (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -rss_item_finalize (GObject *object) -{ - RssItemPrivate *priv = RSS_ITEM (object)->priv; - - g_free (priv->guid); - g_free (priv->title); - g_free (priv->link); - g_free (priv->description); - g_free (priv->copyright); - g_free (priv->author); - g_free (priv->author_uri); - g_free (priv->author_email); - g_free (priv->contributor); - g_free (priv->contributor_uri); - g_free (priv->contributor_email); - g_free (priv->comments); - g_free (priv->pub_date); - g_free (priv->source); - g_free (priv->source_url); - g_free (priv->enclosure); - g_free (priv->enclosure_url); - - g_list_foreach (priv->categories, (GFunc) g_free, NULL); - g_list_free (priv->categories); - - G_OBJECT_CLASS (rss_item_parent_class)->finalize (object); -} - -static void -rss_item_class_init (RssItemClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (RssItemPrivate)); - - gobject_class->get_property = rss_item_get_property; - gobject_class->set_property = rss_item_set_property; - gobject_class->finalize = rss_item_finalize; - - /** - * RssItem:enclosure: - * - * The enclosure of the item. - */ - pspec = g_param_spec_string ("enclosure", - "Enclosure", - "Enclosure of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_ENCLOSURE, - pspec); - - - /** - * RssItem:enclosure_url: - * - * The enclosure_url of the item. - */ - pspec = g_param_spec_string ("enclosure-url", - "Enclosure URL", - "Enclosure URL of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_ENCLOSURE_URL, - pspec); - - /** - * RssItem:title: - * - * The title of the item. - */ - pspec = g_param_spec_string ("title", - "Title", - "Title of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_TITLE, - pspec); - - /** - * RssItem:link: - * - * The link to the upstream source of the item. - */ - pspec = g_param_spec_string ("link", - "Link", - "Link to the upstream source", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_LINK, - pspec); - - /** - * RssItem:description: - * - * The description of the item. This is often where the actual - * content for the item is stored. - */ - pspec = g_param_spec_string ("description", - "Description", - "Description of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_DESCRIPTION, - pspec); - - /** - * RssItem:copyright: - * - * Any associated copyright that may exist for the content. - */ - pspec = g_param_spec_string ("copyright", - "Copyright", - "Any associated copyright for " - "the content", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_COPYRIGHT, - pspec); - - /** - * RssItem:author: - * - * The author's name. - */ - pspec = g_param_spec_string ("author", - "Author", - "The name of the author", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_AUTHOR, - pspec); - - /** - * RssItem:author-uri: - * - * The authors uri, often a website. - */ - pspec = g_param_spec_string ("author-uri", - "Author URI", - "The URI of the author", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_AUTHOR_URI, - pspec); - - /** - * RssItem:author-email: - * - * The authors email. - */ - pspec = g_param_spec_string ("author-email", - "Author Email", - "The email address of the author", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_AUTHOR_EMAIL, - pspec); - - /** - * RssItem:contributor: - * - * The contributors name. - */ - pspec = g_param_spec_string ("contributor", - "Contributor", - "The name of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR, - pspec); - - /** - * RssItem:contributor-uri: - * - * The contributors uri, often a website. - */ - pspec = g_param_spec_string ("contributor-uri", - "Contributor URI", - "The URI of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR_URI, - pspec); - - /** - * RssItem:contributor-email: - * - * The contributors email. - */ - pspec = g_param_spec_string ("contributor-email", - "Contributor Email", - "The email of the contributor", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_CONTRIBUTOR_EMAIL, - pspec); - - /** - * RssItem:comments: - * - * Any comments that may have been associated with the item. - */ - pspec = g_param_spec_string ("comments", - "Comments", - "Any comment associated to the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_COMMENTS, - pspec); - - /** - * RssItem:pub-date: - * - * The string representation of the publish date. - */ - pspec = g_param_spec_string ("pub-date", - "Publication Date", - "The date of publication", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_PUB_DATE, - pspec); - - /** - * RssItem:guid: - * - * The guid of the item. Many feed engines will use the url here - * plus some tag metadata. - */ - pspec = g_param_spec_string ("guid", - "GUID", - "The guid of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_GUID, - pspec); - - /** - * RssItem:source: - * - * The name of the source of the item. - */ - pspec = g_param_spec_string ("source", - "Source", - "Source of the item", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_SOURCE, - pspec); - - /** - * RssItem:source-url: - * - * The url of the source of the item. - */ - pspec = g_param_spec_string ("source-url", - "Source URL", - "URL of the source", - NULL, - G_PARAM_READWRITE); - g_object_class_install_property (gobject_class, - PROP_SOURCE_URL, - pspec); -} - -static void -rss_item_init (RssItem *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RSS_TYPE_ITEM, RssItemPrivate); -} - -/** - * rss_item_new: - * - * Creates a new #RssItem. This isn't incredibly useful yet as we do not - * have an RssGenerator written. However, that will come eventuall and - * make creating feeds much simpler. - * - * Returns: a new #RssItem which should be unref'd with g_object_unref(). - */ -RssItem* -rss_item_new (void) -{ - return g_object_new (RSS_TYPE_ITEM, NULL); -} - -/** - * rss_item_get_guid: - * @self: a #RssItem - * - * Retrieves the #RssItem:guid field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_guid (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->guid; -} - -/** - * rss_item_get_enclosure: - * @self: a #RssItem - * - * Retrieves the #RssItem:enclosure field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_enclosure (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->enclosure; -} - -/** - * rss_item_get_enclosure_url: - * @self: a #RssItem - * - * Retrieves the #RssItem:enclosure_url field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_enclosure_url (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->enclosure_url; -} - -/** - * rss_item_get_title: - * @self: a #RssItem - * - * Retrieves the #RssItem:title field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_title (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->title; -} - -/** - * rss_item_get_link: - * @self: a #RssItem - * - * Retrieves the #RssItem:link field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_link (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->link; -} - -/** - * rss_item_get_description: - * @self: a #RssItem - * - * Retrieves the #RssItem:description field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_description (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->description; -} - -/** - * rss_item_get_copyright: - * @self: a #RssItem - * - * Retrieves the #RssItem:copyright field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_copyright (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->copyright; -} - -/** - * rss_item_get_author_name: - * @self: a #RssItem - * - * Retrieves the #RssItem:author field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_author_name (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->author; -} - -/** - * rss_item_get_author_uri: - * @self: a #RssItem - * - * Retrieves the #RssItem:author-uri field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_author_uri (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->author_uri; -} - -/** - * rss_item_get_author_email: - * @self: a #RssItem - * - * Retrieves the #RssItem:author-email field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_author_email (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->author_email; -} - -/** - * rss_item_get_contributor_name: - * @self: a #RssItem - * - * Retrieves the #RssItem:contributor field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_contributor_name (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->contributor; -} - -/** - * rss_item_get_contributor_uri: - * @self: a #RssItem - * - * Retrieves the #RssItem:contributor-uri field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_contributor_uri (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->contributor_uri; -} - -/** - * rss_item_get_contributor_email: - * @self: a #RssItem - * - * Retrieves the #RssItem:contributor-email field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_contributor_email (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->contributor_email; -} - -/** - * rss_item_get_comments: - * @self: a #RssItem - * - * Retrieves the #RssItem:comments field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_comments (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->comments; -} - -/** - * rss_item_get_pub_date: - * @self: a #RssItem - * - * Retrieves the #RssItem:pub-date field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_pub_date (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->pub_date; -} - -/** - * rss_item_get_source: - * @self: a #RssItem - * - * Retrieves the #RssItem:source field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_source (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->source; -} - -/** - * rss_item_get_source_url: - * @self: a #RssItem - * - * Retrieves the #RssItem:source-url field. - * - * Return value: the value of the field. The returned string is - * owned by the #RssItem and should never be modified or freed. - */ -const gchar * -rss_item_get_source_url (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return self->priv->source_url; -} - -/** - * rss_item_get_categories: - * @self: a #RssItem - * - * Returns a copy of the list of categories for the #RssItem. The data - * in the linked list are pointers to strings (char*). They are owned - * by the #RssItem and should not be modified. Use g_strdup() to copy - * the individual strings. - * - * Returns: a new #GList which should be freed with g_list_free(). - */ -GList* -rss_item_get_categories (RssItem *self) -{ - g_return_val_if_fail (RSS_IS_ITEM (self), NULL); - - return g_list_copy (self->priv->categories); -} diff --git a/plugins/backend/local/rss-glib/rss-item.h b/plugins/backend/local/rss-glib/rss-item.h deleted file mode 100644 index 1bbe041c..00000000 --- a/plugins/backend/local/rss-glib/rss-item.h +++ /dev/null @@ -1,97 +0,0 @@ -/* rss-item.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_ITEM_H__ -#define __RSS_ITEM_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -#define RSS_TYPE_ITEM rss_item_get_type() - -#define RSS_ITEM(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - RSS_TYPE_ITEM, \ - RssItem)) - -#define RSS_ITEM_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - RSS_TYPE_ITEM, \ - RssItemClass)) - -#define RSS_IS_ITEM(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - RSS_TYPE_ITEM)) - -#define RSS_IS_ITEM_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - RSS_TYPE_ITEM)) - -#define RSS_ITEM_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - RSS_TYPE_ITEM, \ - RssItemClass)) - -typedef struct _RssItem RssItem; -typedef struct _RssItemPrivate RssItemPrivate; -typedef struct _RssItemClass RssItemClass; - -struct _RssItem -{ - /*< private >*/ - GObject parent_instance; - - RssItemPrivate *priv; -}; - -struct _RssItemClass -{ - /*< private >*/ - GObjectClass parent_class; -}; - -GType rss_item_get_type (void); -RssItem* rss_item_new (void); - -const gchar *rss_item_get_guid (RssItem *self); -const gchar *rss_item_get_title (RssItem *self); -const gchar *rss_item_get_link (RssItem *self); -const gchar *rss_item_get_description (RssItem *self); -const gchar *rss_item_get_copyright (RssItem *self); -const gchar *rss_item_get_author_name (RssItem *self); -const gchar *rss_item_get_author_uri (RssItem *self); -const gchar *rss_item_get_author_email (RssItem *self); -const gchar *rss_item_get_contributor_name (RssItem *self); -const gchar *rss_item_get_contributor_uri (RssItem *self); -const gchar *rss_item_get_contributor_email (RssItem *self); -const gchar *rss_item_get_comments (RssItem *self); -const gchar *rss_item_get_pub_date (RssItem *self); -const gchar *rss_item_get_source (RssItem *self); -const gchar *rss_item_get_source_url (RssItem *self); -const gchar *rss_item_get_enclosure (RssItem *self); -const gchar *rss_item_get_enclosure_url (RssItem *self); -GList* rss_item_get_categories (RssItem *self); - -G_END_DECLS - -#endif /* __RSS_ITEM_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-marshal.c b/plugins/backend/local/rss-glib/rss-marshal.c deleted file mode 100644 index 84e4a2dc..00000000 --- a/plugins/backend/local/rss-glib/rss-marshal.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "rss-marshal.h" - -#include <glib-object.h> - - -#ifdef G_ENABLE_DEBUG -#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_schar (v) -#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) -#define g_marshal_value_peek_int(v) g_value_get_int (v) -#define g_marshal_value_peek_uint(v) g_value_get_uint (v) -#define g_marshal_value_peek_long(v) g_value_get_long (v) -#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) -#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) -#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) -#define g_marshal_value_peek_enum(v) g_value_get_enum (v) -#define g_marshal_value_peek_flags(v) g_value_get_flags (v) -#define g_marshal_value_peek_float(v) g_value_get_float (v) -#define g_marshal_value_peek_double(v) g_value_get_double (v) -#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) -#define g_marshal_value_peek_param(v) g_value_get_param (v) -#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) -#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) -#define g_marshal_value_peek_object(v) g_value_get_object (v) -#define g_marshal_value_peek_variant(v) g_value_get_variant (v) -#else /* !G_ENABLE_DEBUG */ -/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. - * Do not access GValues directly in your code. Instead, use the - * g_value_get_*() functions - */ -#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int -#define g_marshal_value_peek_char(v) (v)->data[0].v_int -#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint -#define g_marshal_value_peek_int(v) (v)->data[0].v_int -#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint -#define g_marshal_value_peek_long(v) (v)->data[0].v_long -#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 -#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 -#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_float(v) (v)->data[0].v_float -#define g_marshal_value_peek_double(v) (v)->data[0].v_double -#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer -#endif /* !G_ENABLE_DEBUG */ - - -/* VOID:VOID (./rss-marshal.list:1) */ - diff --git a/plugins/backend/local/rss-glib/rss-marshal.h b/plugins/backend/local/rss-glib/rss-marshal.h deleted file mode 100644 index 159a0ac6..00000000 --- a/plugins/backend/local/rss-glib/rss-marshal.h +++ /dev/null @@ -1,15 +0,0 @@ - -#ifndef ___rss_marshal_MARSHAL_H__ -#define ___rss_marshal_MARSHAL_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -/* VOID:VOID (./rss-marshal.list:1) */ -#define _rss_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID - -G_END_DECLS - -#endif /* ___rss_marshal_MARSHAL_H__ */ - diff --git a/plugins/backend/local/rss-glib/rss-parser-private.h b/plugins/backend/local/rss-glib/rss-parser-private.h deleted file mode 100644 index eaddb9e4..00000000 --- a/plugins/backend/local/rss-glib/rss-parser-private.h +++ /dev/null @@ -1,45 +0,0 @@ -/* rss-parser-private.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_PARSER_PRIVATE_H__ -#define __RSS_PARSER_PRIVATE_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -struct _RssParserPrivate -{ - RssDocument *document; -}; - -typedef enum -{ - RSS_PARSER_ERROR_INVALID_DATA, -} RssParserError; - -#define RSS_PARSER_ERROR rss_parser_error_quark() -GQuark rss_parser_error_quark (void); - -G_END_DECLS - -#endif /* __RSS_PARSER_PRIVATE_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-parser.c b/plugins/backend/local/rss-glib/rss-parser.c deleted file mode 100644 index 451a7f9f..00000000 --- a/plugins/backend/local/rss-glib/rss-parser.c +++ /dev/null @@ -1,338 +0,0 @@ -/* rss-generator.c - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -/** - * SECTION:rss-parser - * @short_description: Parse RSS data streams - * - * #RssParser provides an object for parsing a RSS data stream, either - * inside a file or inside a static buffer. - */ - -#include "rss-parser.h" -#include "rss-parser-private.h" - -#include "rss-item.h" -#include "rss-item-private.h" - -#include "rss-document.h" -#include "rss-document-private.h" - -#include "rss-marshal.h" - -GQuark -rss_parser_error_quark (void) -{ - return g_quark_from_static_string ("rss_parser_error"); -} - -enum -{ - PARSE_START, - PARSE_END, - - LAST_SIGNAL -}; - -static guint parser_signals[LAST_SIGNAL] = { 0, }; - -G_DEFINE_TYPE (RssParser, rss_parser, G_TYPE_OBJECT); - -static void -rss_parser_dispose (GObject *object) -{ - RssParserPrivate *priv = RSS_PARSER (object)->priv; - - if (priv->document) { - g_object_unref (priv->document); - priv->document = NULL; - } - - G_OBJECT_CLASS (rss_parser_parent_class)->dispose (object); -} - -static void -rss_parser_class_init (RssParserClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (RssParserPrivate)); - object_class->dispose = rss_parser_dispose; - - /** - * RssParser::parse-start: - * @parser: the #RssParser that received the signal - * - * The ::parse-signal is emitted when the parser began parsing - * a RSS data stream. - */ - parser_signals[PARSE_START] = - g_signal_new ("parse-start", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (RssParserClass, parse_start), - NULL, NULL, - _rss_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - /** - * RssParser::parse-end: - * @parser: the #RssParser that received the signal - * - * The ::parse-end signal is emitted when the parser successfully - * finished parsing a RSS data stream. - */ - parser_signals[PARSE_END] = - g_signal_new ("parse-end", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (RssParserClass, parse_end), - NULL, NULL, - _rss_marshal_VOID__VOID, - G_TYPE_NONE, 0); -} - -static void -rss_parser_init (RssParser *self) -{ - self->priv = - G_TYPE_INSTANCE_GET_PRIVATE (self, RSS_TYPE_PARSER, - RssParserPrivate); -} - -/** - * rss_parser_new: - * - * Creates a new #RssParser instance. You can use the #RssParser to - * load a RSS stream from either a file or a buffer and then walk the - * items discovered through the resulting RssDocument. - * - * Return value: the new created #RssParser. Use g_object_unref() to - * release all the memory it allocates. - */ -RssParser* -rss_parser_new (void) -{ - return g_object_new (RSS_TYPE_PARSER, NULL); -} - -static RssDocument* -rss_parser_parse (RssParser *self, mrss_t *mrss) -{ - RssDocument *document; - RssItem *rss_item; - GList *list, *list2; - mrss_category_t *cat; - mrss_item_t *item; - - g_return_val_if_fail (RSS_IS_PARSER (self), NULL); - g_return_val_if_fail (mrss != NULL, NULL); - - /* create our document object */ - document = rss_document_new (); - - /* set our document level properties */ - g_object_set (document, - "encoding", mrss->encoding, - "guid", mrss->id, - "title", mrss->title, - "description", mrss->description, - "link", mrss->link, - "language", mrss->language, - "rating", mrss->rating, - "copyright", mrss->copyright, - "pub-date", mrss->pubDate, - "ttl", mrss->ttl, - "about", mrss->about, - "contributor", mrss->contributor, - "contributor-email", mrss->contributor_email, - "contributor-uri", mrss->contributor_uri, - "generator", mrss->generator, - "generator-uri", mrss->generator_uri, - "generator-version", mrss->generator_version, - "image-title", mrss->image_title, - "image-url", mrss->image_url, - "image-link", mrss->image_link, - NULL); - - /* build the list of categories */ - if (NULL != (cat = mrss->category)) { - list = NULL; - do { - list = g_list_prepend (list, g_strdup (cat->category)); - } while (NULL != (cat = cat->next)); - document->priv->categories = list; - } - - /* build the list of items */ - if (NULL != (item = mrss->item)) { - list = NULL; - do { - rss_item = rss_item_new (); - - /* set the rss item properties */ - g_object_set (rss_item, - "guid", item->guid, - "title", item->title, - "link", item->link, - "description", item->description, - "copyright", item->copyright, - "author", item->author, - "author-uri", item->author_uri, - "author-email", item->author_email, - "contributor", item->contributor, - "contributor-uri", item->contributor_uri, - "contributor-email", item->contributor_email, - "comments", item->comments, - "pub-date", item->pubDate, - "source", item->source, - "source-url", item->source_url, - "enclosure", item->enclosure, - "enclosure-url", item->enclosure_url, - NULL); - - /* parse the items categories */ - if (NULL != (cat = item->category)) { - list2 = NULL; - do { - list2 = g_list_prepend (list2, g_strdup (cat->category)); - } while (NULL != (cat = cat->next)); - rss_item->priv->categories = list2; - } - - list = g_list_prepend (list, rss_item); - } while (NULL != (item = item->next)); - document->priv->items = list; - } - - return document; -} - -/** - * rss_parser_load_from_data: - * @self: a #RssParser - * @data: a buffer containing the syndication data - * @length: the length of the buffer - * @error: a location to place a newly created GError in case of error - * - * Parses the contents found at @data as an rss file. You can retrieve - * the parsed document with rss_parser_get_document(). - * - * Returns: TRUE on success. - */ -gboolean -rss_parser_load_from_data (RssParser *self, - const gchar *data, - gsize length, - GError **error) -{ - mrss_t *mrss; - mrss_error_t res; - - g_signal_emit (self, parser_signals[PARSE_START], 0); - - /* parse the buffer */ - res = mrss_parse_buffer ((char*)data, length, &mrss); - - /* if there was an error parsing, set the error and return false */ - if (MRSS_OK != res) { - if (error) { - g_set_error (error, RSS_PARSER_ERROR, - RSS_PARSER_ERROR_INVALID_DATA, - "Could not parse data contents"); - } - return FALSE; - } - - /* keep a copy of our parsed document */ - self->priv->document = rss_parser_parse (self, mrss); - - /* free our mrss data */ - mrss_free (mrss); - - g_signal_emit (self, parser_signals[PARSE_END], 0); - - return TRUE; -} - -/** - * rss_parser_load_from_file: - * @self: a #RssParser - * @filename: the path to the file to parse - * @error: a location for a newly created #GError - * - * Parses the file found at @filename as an rss file. You can retrieve - * the parsed document with rss_parser_get_document(). - * - * Returns: TRUE if the parse was successful - */ -gboolean -rss_parser_load_from_file (RssParser *self, - gchar *filename, - GError **error) -{ - mrss_t *mrss; - mrss_error_t res; - - g_signal_emit (self, parser_signals[PARSE_START], 0); - - /* parse the buffer */ - res = mrss_parse_file (filename, &mrss); - - /* if there was an error parsing, set the error and return false */ - if (MRSS_OK != res) { - if (error) { - g_set_error (error, RSS_PARSER_ERROR, - RSS_PARSER_ERROR_INVALID_DATA, - "Could not parse file contents"); - } - return FALSE; - } - - /* keep a copy of our parsed document */ - self->priv->document = rss_parser_parse (self, mrss); - - /* free our mrss data */ - mrss_free (mrss); - - g_signal_emit (self, parser_signals[PARSE_END], 0); - - return TRUE; -} - -/** - * rss_parser_get_document: - * @self: a #RssParser - * - * Retreives the document result from parsing rss data from either - * a buffer or a file. The document's ref-count is increased, so - * call g_object_unref when you are done. - * - * Returns: a #RssDocument - */ -RssDocument* -rss_parser_get_document (RssParser *self) -{ - g_return_val_if_fail (RSS_IS_PARSER (self), NULL); - - return g_object_ref (self->priv->document); -} diff --git a/plugins/backend/local/rss-glib/rss-parser.h b/plugins/backend/local/rss-glib/rss-parser.h deleted file mode 100644 index 6ab95a3d..00000000 --- a/plugins/backend/local/rss-glib/rss-parser.h +++ /dev/null @@ -1,102 +0,0 @@ -/* rss-parser.h - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_PARSER_H__ -#define __RSS_PARSER_H__ - -#include <glib-object.h> -#include "rss-document.h" - -G_BEGIN_DECLS - -#define RSS_TYPE_PARSER rss_parser_get_type() - -#define RSS_PARSER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - RSS_TYPE_PARSER, \ - RssParser)) - -#define RSS_PARSER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - RSS_TYPE_PARSER, \ - RssParserClass)) - -#define RSS_IS_PARSER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - RSS_TYPE_PARSER)) - -#define RSS_IS_PARSER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - RSS_TYPE_PARSER)) - -#define RSS_PARSER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - RSS_TYPE_PARSER, \ - RssParserClass)) - -typedef struct _RssParser RssParser; -typedef struct _RssParserPrivate RssParserPrivate; -typedef struct _RssParserClass RssParserClass; - -struct _RssParser -{ - /*< private >*/ - GObject parent_instance; - - RssParserPrivate *priv; -}; - -struct _RssParserClass -{ - /*< private >*/ - GObjectClass parent_class; - - /*< public >*/ - void (* parse_start) (RssParser *parser); - void (* parse_end) (RssParser *parser); - - /*< private >*/ - /* padding for future expansion */ - void (* _rss_reserved1) (void); - void (* _rss_reserved2) (void); - void (* _rss_reserved3) (void); - void (* _rss_reserved4) (void); - void (* _rss_reserved5) (void); - void (* _rss_reserved6) (void); - void (* _rss_reserved7) (void); - void (* _rss_reserved8) (void); -}; - -GType rss_parser_get_type (void); -RssParser* rss_parser_new (void); -gboolean rss_parser_load_from_data (RssParser * self, - const gchar *data, - gsize length, - GError **error); -gboolean rss_parser_load_from_file (RssParser *self, - gchar *filename, - GError **error); -RssDocument* rss_parser_get_document (RssParser *self); - -G_END_DECLS - -#endif /* __RSS_PARSER_H__ */ diff --git a/plugins/backend/local/rss-glib/rss-version.h b/plugins/backend/local/rss-glib/rss-version.h deleted file mode 100644 index 6a618529..00000000 --- a/plugins/backend/local/rss-glib/rss-version.h +++ /dev/null @@ -1,96 +0,0 @@ -/* rss-version.h - RSS-GLib versioning information - * - * This file is part of RSS-GLib. - * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com> - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Author: - * Christian Hergert <chris@dronelabs.com> - */ - -#ifndef __RSS_VERSION_H__ -#define __RSS_VERSION_H__ - -/** - * SECTION:rss-version - * @title: Versioning - * @short_description: RSS-GLib version checking - * - * RSS-GLib provides macros to check the version of the library - * at compile-time - */ - -/** - * RSS_MAJOR_VERSION: - * - * Rss major version component (e.g. 1 if %RSS_VERSION is 1.2.3) - */ -#define RSS_MAJOR_VERSION (0) - -/** - * RSS_MINOR_VERSION: - * - * Rss minor version component (e.g. 2 if %RSS_VERSION is 1.2.3) - */ -#define RSS_MINOR_VERSION (2) - -/** - * RSS_MICRO_VERSION: - * - * Rss micro version component (e.g. 3 if %RSS_VERSION is 1.2.3) - */ -#define RSS_MICRO_VERSION (3) - -/** - * RSS_VERSION - * - * Rss version. - */ -#define RSS_VERSION (0.2.3) - -/** - * RSS_VERSION_S: - * - * Rss version, encoded as a string, useful for printing and - * concatenation. - */ -#define RSS_VERSION_S "0.2.3" - -/** - * RSS_VERSION_HEX: - * - * Rss version, encoded as an hexadecimal number, useful for - * integer comparisons. - */ -#define RSS_VERSION_HEX (RSS_MAJOR_VERSION << 24 | \ - RSS_MINOR_VERSION << 16 | \ - RSS_MICRO_VERSION << 8) - -/** - * RSS_CHECK_VERSION: - * @major: required major version - * @minor: required minor version - * @micro: required micro version - * - * Compile-time version checking. Evaluates to %TRUE if the version - * of Rss is greater than the required one. - */ -#define RSS_CHECK_VERSION(major,minor,micro) \ - (RSS_MAJOR_VERSION > (major) || \ - (RSS_MAJOR_VERSION == (major) && RSS_MINOR_VERSION > (minor)) || \ - (RSS_MAJOR_VERSION == (major) && RSS_MINOR_VERSION == (minor) && \ - RSS_MICRO_VERSION >= (micro))) - -#endif /* __RSS_VERSION_H__ */ diff --git a/plugins/backend/decsync/Rfc822.vala b/src/Rfc822.vala index 368c6987..368c6987 100644 --- a/plugins/backend/decsync/Rfc822.vala +++ b/src/Rfc822.vala diff --git a/plugins/backend/decsync/rss-glib/rss-glib-1.0.vapi b/vapi/rss-glib-1.0.vapi index 2a571cb4..2a571cb4 100644 --- a/plugins/backend/decsync/rss-glib/rss-glib-1.0.vapi +++ b/vapi/rss-glib-1.0.vapi |