diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2012-08-03 14:59:22 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2012-08-03 14:59:22 +0200 |
commit | 50d0bc170c2b7c783e09d81d38a824422712b6e5 (patch) | |
tree | 992cc8881872888e649e2e4146455ec447290cfa /sfeed_opml_config.c | |
parent | 6df391bcd6dc4cd03349907400d98e6445211f66 (diff) |
Rename sfeed_opml_config to sfeed_opml_import
Because I'm adding a sfeed_opml_export script.
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
Diffstat (limited to 'sfeed_opml_config.c')
-rw-r--r-- | sfeed_opml_config.c | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/sfeed_opml_config.c b/sfeed_opml_config.c deleted file mode 100644 index 0d74820..0000000 --- a/sfeed_opml_config.c +++ /dev/null @@ -1,87 +0,0 @@ -/* convert an opml file to sfeedrc file */ -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <strings.h> -#include <expat.h> /* libexpat */ - -XML_Parser parser; /* expat XML parser state */ - -char * /* search for attr value by attr name in attributes list */ -getattrvalue(const char **atts, const char *name) { - const char **attr = NULL, *key, *value; - if(!atts || !(*atts)) - return NULL; - for(attr = atts; *attr; ) { - key = *(attr++); - value = *(attr++); - if(key && value && !strcasecmp(key, name)) - return (char *)value; - } - return NULL; -} - -void XMLCALL -xml_handler_start_element(void *data, const char *name, const char **atts) { - char *feedurl = NULL, *feedname = NULL;; - - if(!strcasecmp(name, "outline")) { - if(!(feedname = getattrvalue(atts, "text")) && - !(feedname = getattrvalue(atts, "title"))) - feedname = "unnamed"; - if(!(feedurl = getattrvalue(atts, "xmlurl"))) - feedurl = ""; - printf("\tfeed \"%s\" \"%s\"\n", feedname, feedurl); - } -} - -void XMLCALL -xml_handler_end_element(void *data, const char *name) { -} - -int /* parse XML from stream using setup parser, return 1 on success, 0 on failure. */ -xml_parse_stream(XML_Parser parser, FILE *fp) { - char buffer[BUFSIZ]; - int done = 0, len = 0; - - while(!feof(fp)) { - len = fread(buffer, 1, sizeof(buffer), fp); - done = (feof(fp) || ferror(fp)); - if(XML_Parse(parser, buffer, len, done) == XML_STATUS_ERROR && (len > 0)) { - if(XML_GetErrorCode(parser) == XML_ERROR_NO_ELEMENTS) - return 1; /* Ignore "no elements found" / empty document as an error */ - fprintf(stderr, "sfeed_opml_config: error parsing xml %s at line %lu column %lu\n", - XML_ErrorString(XML_GetErrorCode(parser)), (unsigned long)XML_GetCurrentLineNumber(parser), - (unsigned long)XML_GetCurrentColumnNumber(parser)); - return 0; - } - } while(!done); - return 1; -} - -int main(void) { - int status; - - if(!(parser = XML_ParserCreate("UTF-8"))) { - fputs("sfeed_opml_config: can't create parser", stderr); - exit(EXIT_FAILURE); - } - XML_SetElementHandler(parser, xml_handler_start_element, xml_handler_end_element); - - fputs( - "# paths\n" - "# NOTE: make sure to uncomment all these if you change it.\n" - "#sfeedpath=\"$HOME/.sfeed\"\n" - "#sfeedfile=\"$sfeedpath/feeds\"\n" - "#sfeedfilenew=\"$sfeedfile.new\"\n" - "\n" - "# list of feeds to fetch:\n" - "feeds() {\n" - " # feed <name> <url> [encoding]\n", stdout); - status = xml_parse_stream(parser, stdin); - fputs("}\n", stdout); - - XML_ParserFree(parser); - - return status ? EXIT_SUCCESS : EXIT_FAILURE; -} |