mrss_error_t mrss_parse_url (char *url, mrss_t ** ret) { __mrss_download_t *download; nxml_t *doc; mrss_error_t err; if (!url || !ret) return MRSS_ERR_DATA; if (!(download = __mrss_download_file (url, __mrss_timeout))) return MRSS_ERR_POSIX; if (nxml_new (&doc) != NXML_OK) return MRSS_ERR_POSIX; if (nxml_parse_buffer (doc, download->mm, download->size) != NXML_OK) { free (download->mm); free (download); nxml_free (doc); return MRSS_ERR_PARSER; } if (!(err = __mrss_parser (doc, ret))) { if (!((*ret)->file = strdup (url))) { free (download->mm); free (download); mrss_free (*ret); nxml_free (doc); return MRSS_ERR_POSIX; } (*ret)->size = download->size; } free (download->mm); free (download); nxml_free (doc); return err; }
mrss_error_t mrss_parse_url_with_options_and_error (char *url, mrss_t ** ret, mrss_options_t * options, CURLcode * code) { nxml_t *doc; mrss_error_t err; char *buffer; size_t size; 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))) { free (buffer); mrss_free (*ret); nxml_free (doc); return MRSS_ERR_POSIX; } (*ret)->size = size; } free (buffer); nxml_free (doc); return err; }