]> git.sesse.net Git - vlc/commitdiff
update: allow update_Download to accept: directory, filename, NULL
authorDerk-Jan Hartman <hartman@videolan.org>
Thu, 2 Oct 2008 14:32:14 +0000 (16:32 +0200)
committerDerk-Jan Hartman <hartman@videolan.org>
Thu, 2 Oct 2008 14:32:14 +0000 (16:32 +0200)
directory: accepts any existing directory and will use the filename component of the update URL (old behaviour). This option no longer requires you to provide a string that ends with the pathsep.

filename: write directly to this filename. Existing files will be overwritten.

NULL: will write to filename component of the update URL. likely in the CWD.

src/misc/update.c

index c9559ea4edd9e5a2282b9cbef4a2df13da86a1a5..2eac20adfc945686502a1aecad4ffafdeb00ea7f 100644 (file)
@@ -35,6 +35,9 @@
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
+#ifdef HAVE_SYS_STAT_H
+#   include <sys/stat.h>
+#endif
 
 #include <vlc_common.h>
 #include <vlc_update.h>
@@ -1517,6 +1520,7 @@ static void* update_DownloadReal( vlc_object_t *p_this )
     char *psz_tmpdestfile = NULL;
 
     FILE *p_file = NULL;
+    struct stat p_stat;
     stream_t *p_stream = NULL;
     void* p_buffer = NULL;
     int i_read;
@@ -1548,13 +1552,24 @@ static void* update_DownloadReal( vlc_object_t *p_this )
         goto end;
     }
     psz_tmpdestfile++;
-    if( asprintf( &psz_destfile, "%s%s", psz_destdir, psz_tmpdestfile ) == -1 )
-        goto end;
+
+    if( utf8_stat( psz_destdir, &p_stat) == 0 && (p_stat.st_mode & S_IFDIR) )
+    {
+        if( asprintf( &psz_destfile, "%s%c%s", psz_destdir, DIR_SEP_CHAR, psz_tmpdestfile ) == -1 )
+            goto end;
+    }
+    else if( psz_destdir )
+        psz_destfile = strdup( psz_destdir );
+    else
+        psz_destfile = strdup( psz_tmpdestfile );
 
     p_file = utf8_fopen( psz_destfile, "w" );
     if( !p_file )
     {
         msg_Err( p_udt, "Failed to open %s for writing", psz_destfile );
+        intf_UserFatal( p_udt, true, _("Saving file failed"),
+            _("Failed to open \"%s\" for writing"),
+             psz_destfile );
         goto end;
     }