X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fxml.c;h=1748bfc9f69a2729a1c2185fc60d477152793f07;hb=c12acbd7d48431d7b5029d765e69e87378aca7a2;hp=f5e2fec74b51d427cf39706e6f7c6ea9ad63b1b6;hpb=354f70c527ff183d34f0432b3611ef762fbc84b9;p=vlc diff --git a/src/misc/xml.c b/src/misc/xml.c index f5e2fec74b..1748bfc9f6 100644 --- a/src/misc/xml.c +++ b/src/misc/xml.c @@ -98,6 +98,36 @@ xml_reader_t *xml_ReaderCreate(vlc_object_t *obj, stream_t *stream) */ void xml_ReaderDelete(xml_reader_t *reader) { - module_unneed(reader, reader->p_module); + if (reader->p_stream) + module_stop(reader, reader->p_module); + module_release(reader->p_module); vlc_object_release(reader); } + + +/** + * Resets an existing XML reader. + * If you need to parse several XML files, this function is much faster than + * xml_ReaderCreate() and xml_ReaderDelete() combined. + * If the stream parameter is NULL, the XML reader will be stopped, but + * not restarted until the next xml_ReaderReset() call with a non-NULL stream. + * + * @param reader XML reader to reinitialize + * @param stream new stream to read XML data from (or NULL) + * @return reader on success, + * NULL on error (in that case, the reader is destroyed). + */ +xml_reader_t *xml_ReaderReset(xml_reader_t *reader, stream_t *stream) +{ + if (reader->p_stream) + module_stop(reader, reader->p_module); + + reader->p_stream = stream; + if ((stream != NULL) && module_start(reader, reader->p_module)) + { + module_release(reader->p_module); + vlc_object_release(reader); + return NULL; + } + return reader; +}