mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
gst/gstregistryxml.c: Allow empty strings for some of the plugin fields so we don't drop valid plugin entries that we...
Original commit message from CVS: * gst/gstregistryxml.c: (read_string), (load_pad_template), (load_feature), (load_plugin): Allow empty strings for some of the plugin fields so we don't drop valid plugin entries that were written out correctly.
This commit is contained in:
parent
31a3c51ccf
commit
5b6611acdd
2 changed files with 55 additions and 27 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,16 +1,25 @@
|
||||||
|
2006-05-17 Jan Schmidt <thaytan@mad.scientist.com>
|
||||||
|
|
||||||
|
* gst/gstregistryxml.c: (read_string), (load_pad_template),
|
||||||
|
(load_feature), (load_plugin):
|
||||||
|
Allow empty strings for some of the plugin fields so we don't
|
||||||
|
drop valid plugin entries that were written out correctly.
|
||||||
|
|
||||||
2006-05-17 Sebastien Moutte <sebastien@moutte.net>
|
2006-05-17 Sebastien Moutte <sebastien@moutte.net>
|
||||||
|
|
||||||
* gst/gstregistryxml.c: (gst_registry_xml_write_cache):
|
* gst/gstregistryxml.c: (gst_registry_xml_write_cache):
|
||||||
Use g_remove and g_rename instead of remove and rename that don't
|
Use g_remove and g_rename instead of remove and rename that don't
|
||||||
handle utf8 characters. rename was failing for users who had specific
|
handle utf8 characters. rename was failing for users who had specific
|
||||||
characters in their name then the registry was built at each gstreamer init.
|
characters in their name then the registry was built at each
|
||||||
|
gstreamer init.
|
||||||
* win32/vs6/gst_inspect.dsp:
|
* win32/vs6/gst_inspect.dsp:
|
||||||
* win32/vs6/gst_launch.dsp:
|
* win32/vs6/gst_launch.dsp:
|
||||||
* win32/vs6/libgstbase.dsp:
|
* win32/vs6/libgstbase.dsp:
|
||||||
* win32/vs6/libgstcoreelements.dsp:
|
* win32/vs6/libgstcoreelements.dsp:
|
||||||
* win32/vs6/libgstreamer.dsp:
|
* win32/vs6/libgstreamer.dsp:
|
||||||
Use a debug version of libxml2 (libxml2D.lib,libxml2D.dll) for DEBUG build
|
Use a debug version of libxml2 (libxml2D.lib,libxml2D.dll) for DEBUG
|
||||||
of libgstreamer and clean unused libraries in projects link settings.
|
build of libgstreamer and clean unused libraries in projects link
|
||||||
|
settings.
|
||||||
|
|
||||||
2006-05-17 Edward Hervey <edward@fluendo.com>
|
2006-05-17 Edward Hervey <edward@fluendo.com>
|
||||||
|
|
||||||
|
|
|
@ -107,14 +107,21 @@ add_to_char_array (gchar *** array, gchar * value)
|
||||||
|
|
||||||
/* read a string and copy it into the given location */
|
/* read a string and copy it into the given location */
|
||||||
static gboolean
|
static gboolean
|
||||||
read_string (xmlTextReaderPtr reader, gchar ** write_to)
|
read_string (xmlTextReaderPtr reader, gchar ** write_to, gboolean allow_blank)
|
||||||
{
|
{
|
||||||
int depth = xmlTextReaderDepth (reader);
|
int depth = xmlTextReaderDepth (reader);
|
||||||
gboolean found = FALSE;
|
gboolean found = FALSE;
|
||||||
|
|
||||||
while (xmlTextReaderRead (reader) == 1) {
|
while (xmlTextReaderRead (reader) == 1) {
|
||||||
if (xmlTextReaderDepth (reader) == depth)
|
if (xmlTextReaderDepth (reader) == depth) {
|
||||||
|
if (allow_blank && !found &&
|
||||||
|
xmlTextReaderNodeType (reader) == XML_READER_TYPE_END_ELEMENT) {
|
||||||
|
/* Allow blank strings */
|
||||||
|
*write_to = g_strdup ("");
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
return found;
|
return found;
|
||||||
|
}
|
||||||
if (xmlTextReaderNodeType (reader) == XML_READER_TYPE_TEXT) {
|
if (xmlTextReaderNodeType (reader) == XML_READER_TYPE_TEXT) {
|
||||||
if (found)
|
if (found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -213,13 +220,13 @@ load_pad_template (xmlTextReaderPtr reader)
|
||||||
const gchar *tag = (gchar *) xmlTextReaderConstName (reader);
|
const gchar *tag = (gchar *) xmlTextReaderConstName (reader);
|
||||||
|
|
||||||
if (g_str_equal (tag, "nametemplate")) {
|
if (g_str_equal (tag, "nametemplate")) {
|
||||||
read_string (reader, &name);
|
read_string (reader, &name, FALSE);
|
||||||
} else if (g_str_equal (tag, "direction")) {
|
} else if (g_str_equal (tag, "direction")) {
|
||||||
read_enum (reader, GST_TYPE_PAD_DIRECTION, &direction);
|
read_enum (reader, GST_TYPE_PAD_DIRECTION, &direction);
|
||||||
} else if (g_str_equal (tag, "presence")) {
|
} else if (g_str_equal (tag, "presence")) {
|
||||||
read_enum (reader, GST_TYPE_PAD_PRESENCE, &presence);
|
read_enum (reader, GST_TYPE_PAD_PRESENCE, &presence);
|
||||||
} else if (!strncmp (tag, "caps", 4)) {
|
} else if (!strncmp (tag, "caps", 4)) {
|
||||||
read_string (reader, &caps_str);
|
read_string (reader, &caps_str, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -276,7 +283,7 @@ load_feature (xmlTextReaderPtr reader)
|
||||||
const gchar *tag = (gchar *) xmlTextReaderConstName (reader);
|
const gchar *tag = (gchar *) xmlTextReaderConstName (reader);
|
||||||
|
|
||||||
if (g_str_equal (tag, "name"))
|
if (g_str_equal (tag, "name"))
|
||||||
read_string (reader, &feature->name);
|
read_string (reader, &feature->name, FALSE);
|
||||||
if (g_str_equal (tag, "rank"))
|
if (g_str_equal (tag, "rank"))
|
||||||
read_uint (reader, &feature->rank);
|
read_uint (reader, &feature->rank);
|
||||||
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
if (GST_IS_ELEMENT_FACTORY (feature)) {
|
||||||
|
@ -285,19 +292,19 @@ load_feature (xmlTextReaderPtr reader)
|
||||||
if (g_str_equal (tag, "longname")) {
|
if (g_str_equal (tag, "longname")) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = read_string (reader, &factory->details.longname);
|
ret = read_string (reader, &factory->details.longname, TRUE);
|
||||||
GST_DEBUG ("longname ret=%d, name=%s",
|
GST_DEBUG ("longname ret=%d, name=%s",
|
||||||
ret, factory->details.longname);
|
ret, factory->details.longname);
|
||||||
} else if (g_str_equal (tag, "class")) {
|
} else if (g_str_equal (tag, "class")) {
|
||||||
read_string (reader, &factory->details.klass);
|
read_string (reader, &factory->details.klass, TRUE);
|
||||||
} else if (g_str_equal (tag, "description")) {
|
} else if (g_str_equal (tag, "description")) {
|
||||||
read_string (reader, &factory->details.description);
|
read_string (reader, &factory->details.description, TRUE);
|
||||||
} else if (g_str_equal (tag, "author")) {
|
} else if (g_str_equal (tag, "author")) {
|
||||||
read_string (reader, &factory->details.author);
|
read_string (reader, &factory->details.author, TRUE);
|
||||||
} else if (g_str_equal (tag, "uri_type")) {
|
} else if (g_str_equal (tag, "uri_type")) {
|
||||||
gchar *s = NULL;
|
gchar *s = NULL;
|
||||||
|
|
||||||
if (read_string (reader, &s)) {
|
if (read_string (reader, &s, FALSE)) {
|
||||||
if (g_ascii_strncasecmp (s, "sink", 4) == 0) {
|
if (g_ascii_strncasecmp (s, "sink", 4) == 0) {
|
||||||
factory->uri_type = GST_URI_SINK;
|
factory->uri_type = GST_URI_SINK;
|
||||||
} else if (g_ascii_strncasecmp (s, "source", 5) == 0) {
|
} else if (g_ascii_strncasecmp (s, "source", 5) == 0) {
|
||||||
|
@ -308,12 +315,12 @@ load_feature (xmlTextReaderPtr reader)
|
||||||
} else if (g_str_equal (tag, "uri_protocol")) {
|
} else if (g_str_equal (tag, "uri_protocol")) {
|
||||||
gchar *s = NULL;
|
gchar *s = NULL;
|
||||||
|
|
||||||
if (read_string (reader, &s))
|
if (read_string (reader, &s, FALSE))
|
||||||
add_to_char_array (&factory->uri_protocols, s);
|
add_to_char_array (&factory->uri_protocols, s);
|
||||||
} else if (g_str_equal (tag, "interface")) {
|
} else if (g_str_equal (tag, "interface")) {
|
||||||
gchar *s = NULL;
|
gchar *s = NULL;
|
||||||
|
|
||||||
if (read_string (reader, &s)) {
|
if (read_string (reader, &s, FALSE)) {
|
||||||
__gst_element_factory_add_interface (factory, s);
|
__gst_element_factory_add_interface (factory, s);
|
||||||
/* add_interface strdup's s */
|
/* add_interface strdup's s */
|
||||||
g_free (s);
|
g_free (s);
|
||||||
|
@ -334,12 +341,12 @@ load_feature (xmlTextReaderPtr reader)
|
||||||
if (g_str_equal (tag, "extension")) {
|
if (g_str_equal (tag, "extension")) {
|
||||||
gchar *s = NULL;
|
gchar *s = NULL;
|
||||||
|
|
||||||
if (read_string (reader, &s))
|
if (read_string (reader, &s, TRUE))
|
||||||
add_to_char_array (&factory->extensions, s);
|
add_to_char_array (&factory->extensions, s);
|
||||||
} else if (g_str_equal (tag, "caps")) {
|
} else if (g_str_equal (tag, "caps")) {
|
||||||
gchar *s = NULL;
|
gchar *s = NULL;
|
||||||
|
|
||||||
if (read_string (reader, &s)) {
|
if (read_string (reader, &s, FALSE)) {
|
||||||
factory->caps = gst_caps_from_string (s);
|
factory->caps = gst_caps_from_string (s);
|
||||||
g_free (s);
|
g_free (s);
|
||||||
}
|
}
|
||||||
|
@ -348,7 +355,7 @@ load_feature (xmlTextReaderPtr reader)
|
||||||
GstIndexFactory *factory = GST_INDEX_FACTORY (feature);
|
GstIndexFactory *factory = GST_INDEX_FACTORY (feature);
|
||||||
|
|
||||||
if (g_str_equal (tag, "longdesc"))
|
if (g_str_equal (tag, "longdesc"))
|
||||||
read_string (reader, &factory->longdesc);
|
read_string (reader, &factory->longdesc, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,44 +388,56 @@ load_plugin (xmlTextReaderPtr reader, GList ** feature_list)
|
||||||
if (g_str_equal (tag, "name")) {
|
if (g_str_equal (tag, "name")) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = read_string (reader, &plugin->desc.name);
|
ret = read_string (reader, &plugin->desc.name, FALSE);
|
||||||
GST_DEBUG ("name ret=%d, name=%s", ret, plugin->desc.name);
|
GST_DEBUG ("name ret=%d, name=%s", ret, plugin->desc.name);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
} else if (g_str_equal (tag, "description")) {
|
} else if (g_str_equal (tag, "description")) {
|
||||||
if (!read_string (reader, &plugin->desc.description))
|
if (!read_string (reader, &plugin->desc.description, TRUE)) {
|
||||||
|
GST_DEBUG ("description field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("description %s", plugin->desc.description);
|
GST_DEBUG ("description %s", plugin->desc.description);
|
||||||
} else if (g_str_equal (tag, "filename")) {
|
} else if (g_str_equal (tag, "filename")) {
|
||||||
if (!read_string (reader, &plugin->filename))
|
if (!read_string (reader, &plugin->filename, FALSE)) {
|
||||||
|
GST_DEBUG ("filename field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("filename %s", plugin->filename);
|
GST_DEBUG ("filename %s", plugin->filename);
|
||||||
plugin->basename = g_path_get_basename (plugin->filename);
|
plugin->basename = g_path_get_basename (plugin->filename);
|
||||||
} else if (g_str_equal (tag, "version")) {
|
} else if (g_str_equal (tag, "version")) {
|
||||||
if (!read_string (reader, &plugin->desc.version))
|
if (!read_string (reader, &plugin->desc.version, TRUE)) {
|
||||||
|
GST_DEBUG ("version field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("version %s", plugin->desc.version);
|
GST_DEBUG ("version %s", plugin->desc.version);
|
||||||
} else if (g_str_equal (tag, "license")) {
|
} else if (g_str_equal (tag, "license")) {
|
||||||
if (!read_string (reader, &plugin->desc.license))
|
if (!read_string (reader, &plugin->desc.license, TRUE)) {
|
||||||
|
GST_DEBUG ("license field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("license %s", plugin->desc.license);
|
GST_DEBUG ("license %s", plugin->desc.license);
|
||||||
} else if (g_str_equal (tag, "source")) {
|
} else if (g_str_equal (tag, "source")) {
|
||||||
if (!read_string (reader, &plugin->desc.source))
|
if (!read_string (reader, &plugin->desc.source, TRUE)) {
|
||||||
|
GST_DEBUG ("source field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("source %s", plugin->desc.source);
|
GST_DEBUG ("source %s", plugin->desc.source);
|
||||||
} else if (g_str_equal (tag, "package")) {
|
} else if (g_str_equal (tag, "package")) {
|
||||||
if (!read_string (reader, &plugin->desc.package))
|
if (!read_string (reader, &plugin->desc.package, TRUE)) {
|
||||||
|
GST_DEBUG ("package field was invalid in registry");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
GST_DEBUG ("package %s", plugin->desc.package);
|
GST_DEBUG ("package %s", plugin->desc.package);
|
||||||
} else if (g_str_equal (tag, "origin")) {
|
} else if (g_str_equal (tag, "origin")) {
|
||||||
if (!read_string (reader, &plugin->desc.origin)) {
|
if (!read_string (reader, &plugin->desc.origin, TRUE)) {
|
||||||
GST_DEBUG ("failed to read origin");
|
GST_DEBUG ("failed to read origin");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (g_str_equal (tag, "m32p")) {
|
} else if (g_str_equal (tag, "m32p")) {
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
if (!read_string (reader, &s)) {
|
if (!read_string (reader, &s, FALSE)) {
|
||||||
GST_DEBUG ("failed to read mtime");
|
GST_DEBUG ("failed to read mtime");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue