Search /usr(/local)/share for preset files as well.
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 8 Jun 2008 10:48:23 +0000 (10:48 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 8 Jun 2008 10:48:23 +0000 (10:48 +0000)
This also fixed a null pointer dereference if HOME isnt set.

Originally committed as revision 13708 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffmpeg.c

index 98973acaa799055f1b03df2aa1ae0e7a3af2cd15..c0741956c73af0f8140165ed7952f7d1c7f9aa3d 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3638,19 +3638,25 @@ static int opt_bsf(const char *opt, const char *arg)
 
 static int opt_preset(const char *opt, const char *arg)
 {
-    FILE *f;
+    FILE *f=NULL;
     char tmp[100], tmp2[100];
-    char *home= getenv("HOME");
+    int i;
+    const char *base[3]= { getenv("HOME"),
+                           "/usr/local/share",
+                           "/usr/share",
+                         };
 
-    snprintf(tmp, sizeof(tmp), "%s/.ffmpeg/%s.ffpreset", home, arg);
+    for(i=!base[0]; i<3 && !f; i++){
+        snprintf(tmp, sizeof(tmp), "%s/%sffmpeg/%s.ffpreset", base[i], i ? "" : ".", arg);
     f= fopen(tmp, "r");
     if(!f){
         char *codec_name= *opt == 'v' ? video_codec_name :
                           *opt == 'a' ? audio_codec_name :
                                         subtitle_codec_name;
-        snprintf(tmp, sizeof(tmp), "%s/.ffmpeg/%s-%s.ffpreset", home, codec_name, arg);
+            snprintf(tmp, sizeof(tmp), "%s/%sffmpeg/%s-%s.ffpreset", base[i],  i ? "" : ".", codec_name, arg);
         f= fopen(tmp, "r");
     }
+    }
 
     if(!f){
         fprintf(stderr, "Preset file not found\n");