gst/gstregistrybinary.c: In win32 codepath, if we fail to write the registry, create...
authorMichael Smith <msmith@xiph.org>
Thu, 20 Nov 2008 20:44:56 +0000 (20:44 +0000)
committerMichael Smith <msmith@xiph.org>
Thu, 20 Nov 2008 20:44:56 +0000 (20:44 +0000)
Original commit message from CVS:
* gst/gstregistrybinary.c:
In win32 codepath, if we fail to write the registry, create the
directory for it and try again, matching the behaviour in non-win32
codepaths.

ChangeLog
gst/gstregistrybinary.c

index dff4966..91bec7c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-11-20  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/gstregistrybinary.c:
+         In win32 codepath, if we fail to write the registry, create the
+         directory for it and try again, matching the behaviour in non-win32
+         codepaths.
+
 2008-11-20  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * libs/gst/base/gstbasesink.c: (gst_base_sink_set_render_delay):
index 53dbacf..75dbc3a 100644 (file)
@@ -134,9 +134,21 @@ gst_registry_binary_cache_finish (GstRegistry * registry,
   GError *error = NULL;
   if (!g_file_set_contents (cache->location, (const gchar *) cache->mem,
           cache->len, &error)) {
-    GST_ERROR ("Failed to write to cache file: %s", error->message);
+    /* Probably the directory didn't exist; create it */
+    gchar *dir;
+    dir = g_path_get_dirname (cache->location);
+    g_mkdir_with_parents (dir, 0777);
+    g_free (dir);
+
     g_error_free (error);
-    ret = FALSE;
+    error = NULL;
+
+    if (!g_file_set_contents (cache->location, (const gchar *) cache->mem,
+            cache->len, &error)) {
+      GST_ERROR ("Failed to write to cache file: %s", error->message);
+      g_error_free (error);
+      ret = FALSE;
+    }
   }
 
   g_free (cache->mem);