]> git.draconx.ca Git - liblbx.git/blobdiff - src/lbximg.c
lbximg: Return failure if there was a decoding error.
[liblbx.git] / src / lbximg.c
index e4eb461e5d7d5189317caea584071cd722059912..0fd3693d9e56ca5e620b6e045dbeba93fe2b557b 100644 (file)
@@ -38,6 +38,10 @@ static int verbose = 0;
 static char *outname = "out";
 static int usepalette = 1;
 
+enum {
+       OPT_PREFIX = UCHAR_MAX+1,
+};
+
 static void printusage(void)
 {
        puts("usage: lbximg [-i|-d] [-v] [-p palette_file] [-O override_file]"
@@ -259,6 +263,7 @@ decode(struct lbx_image *img, FILE *palf, FILE *override, int fmt, char **argv)
        unsigned char *framebits;
        struct lbx_colour palette[256];
        struct lbx_imginfo info;
+       int ret = EXIT_SUCCESS;
        int extracted = 0;
        unsigned int i;
 
@@ -283,6 +288,7 @@ decode(struct lbx_image *img, FILE *palf, FILE *override, int fmt, char **argv)
 
        if (usepalette) {
                if (loadpalette(img, &info, palf, override, palette) == -1) {
+                       ret = EXIT_FAILURE;
                        goto err;
                }
        }
@@ -298,6 +304,7 @@ decode(struct lbx_image *img, FILE *palf, FILE *override, int fmt, char **argv)
                data = lbx_img_getframe(img, i);
                if (!data) {
                        tool_err(-1, "error in frame %u: %s", i, lbx_errmsg());
+                       ret = EXIT_FAILURE;
                        continue;
                }
 
@@ -312,14 +319,11 @@ decode(struct lbx_image *img, FILE *palf, FILE *override, int fmt, char **argv)
 
        if (!extracted) {
                tool_err(-1, "no frames extracted.");
-               goto err;
+               ret = EXIT_FAILURE;
        }
-
-       free(framebits);
-       return EXIT_SUCCESS;
 err:
        free(framebits);
-       return EXIT_FAILURE;
+       return ret;
 }
 
 int main(int argc, char **argv)
@@ -332,19 +336,20 @@ int main(int argc, char **argv)
 
        static const char sopts[] = "idnvF:f:p:O:VH";
        static const struct option lopts[] = {
-               { "ident",      0, NULL, 'i' },
-               { "decode",     0, NULL, 'd' },
-               { "verbose",    0, NULL, 'v' },
-               { "file",       1, NULL, 'f' },
-               { "format",     1, NULL, 'F' },
-               { "palette",    1, NULL, 'p' },
-               { "override",   1, NULL, 'O' },
+               { "identify",      0, NULL, 'i' },
+               { "decode",        0, NULL, 'd' },
+               { "verbose",       0, NULL, 'v' },
+               { "file",          1, NULL, 'f' },
+               { "format",        1, NULL, 'F' },
+               { "palette",       1, NULL, 'p' },
+               { "override",      1, NULL, 'O' },
+               { "no-palette",    0, NULL, 'n' },
 
-               { "version",    0, NULL, 'V' },
-               { "usage",      0, NULL, 'U' },
-               { "help",       0, NULL, 'H' },
+               { "output-prefix", 1, NULL,  OPT_PREFIX },
 
-               { "no-palette", 0, NULL, 'n' },
+               { "version",       0, NULL, 'V' },
+               { "usage",         0, NULL, 'U' },
+               { "help",          0, NULL, 'H' },
 
                { 0 }
        };
@@ -385,6 +390,9 @@ int main(int argc, char **argv)
                                return EXIT_FAILURE;
                        }
                        break;
+               case OPT_PREFIX:
+                       outname = optarg;
+                       break;
                case 'V':
                        tool_version();
                        return EXIT_SUCCESS;