fate: avoid freopen(NULL) in videogen/rotozoom
authorMans Rullgard <mans@mansr.com>
Wed, 6 Jun 2012 16:12:29 +0000 (17:12 +0100)
committerMans Rullgard <mans@mansr.com>
Thu, 7 Jun 2012 10:28:39 +0000 (11:28 +0100)
A number of systems do not implement freopen() with a NULL filename
correctly.  This changes these programs to output individual images
if opening a named output argument as a file fails, in this case
assuming it is a directory.

Signed-off-by: Mans Rullgard <mans@mansr.com>
tests/Makefile
tests/rotozoom.c
tests/videogen.c

index 5ed1e5e..01ff711 100644 (file)
@@ -16,10 +16,10 @@ tests/data/asynth-%.wav: tests/audiogen$(HOSTEXESUF) | tests/data
        $(M)./$< $@ $(subst -, ,$*)
 
 tests/data/vsynth1.yuv: tests/videogen$(HOSTEXESUF) | tests/data
-       $(M)$< >$@
+       $(M)$< $@
 
 tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
-       $(M)$< $(SRC_PATH)/tests/lena.pnm >$@
+       $(M)$< $(SRC_PATH)/tests/lena.pnm $@
 
 tests/data/asynth% tests/data/vsynth%.yuv tests/vsynth%/00.pgm: TAG = GEN
 
index 683e070..69c88c2 100644 (file)
@@ -158,15 +158,16 @@ int main(int argc, char **argv)
 {
     int w, h, i;
     char buf[1024];
+    int isdir = 0;
 
-    if (argc > 3) {
-        printf("usage: %s image.pnm [directory/]\n"
+    if (argc != 3) {
+        printf("usage: %s image.pnm file|dir\n"
                "generate a test video stream\n", argv[0]);
         return 1;
     }
 
-    if (argc < 3)
-        err_if(!freopen(NULL, "wb", stdout));
+    if (!freopen(argv[2], "wb", stdout))
+        isdir = 1;
 
     w = DEFAULT_WIDTH;
     h = DEFAULT_HEIGHT;
@@ -181,7 +182,7 @@ int main(int argc, char **argv)
 
     for (i = 0; i < DEFAULT_NB_PICT; i++) {
         gen_image(i, w, h);
-        if (argc > 2) {
+        if (isdir) {
             snprintf(buf, sizeof(buf), "%s%02d.pgm", argv[2], i);
             pgmyuv_save(buf, w, h, rgb_tab);
         } else {
index 7228bd5..0b7f67e 100644 (file)
@@ -145,15 +145,16 @@ int main(int argc, char **argv)
 {
     int w, h, i;
     char buf[1024];
+    int isdir = 0;
 
-    if (argc > 2) {
-        printf("usage: %s [file]\n"
+    if (argc != 2) {
+        printf("usage: %s file|dir\n"
                "generate a test video stream\n", argv[0]);
         exit(1);
     }
 
-    if (argc < 2)
-        err_if(!freopen(NULL, "wb", stdout));
+    if (!freopen(argv[1], "wb", stdout))
+        isdir = 1;
 
     w = DEFAULT_WIDTH;
     h = DEFAULT_HEIGHT;
@@ -165,7 +166,7 @@ int main(int argc, char **argv)
 
     for (i = 0; i < DEFAULT_NB_PICT; i++) {
         gen_image(i, w, h);
-        if (argc > 1) {
+        if (isdir) {
             snprintf(buf, sizeof(buf), "%s%02d.pgm", argv[1], i);
             pgmyuv_save(buf, w, h, rgb_tab);
         } else {