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:
Jan Schmidt 2006-05-17 14:01:33 +00:00
parent 31a3c51ccf
commit 5b6611acdd
2 changed files with 55 additions and 27 deletions

View file

@ -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>

View file

@ -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;
} }