]> git.ipfire.org Git - thirdparty/HylaFAX.git/commitdiff
This applies most of the fixes Paulo caught with the faxinfo changes:
authorAidan Van Dyk <aidan@ifax.com>
Mon, 26 Jun 2006 20:44:02 +0000 (20:44 +0000)
committerAidan Van Dyk <aidan@ifax.com>
Mon, 26 Jun 2006 20:44:02 +0000 (20:44 +0000)
1) Off by one in the malloc (NULL termination needed) in escapedSequence
2) smash %n in the format
3) Add a -b for file basename (not using libgen.h though)
4) Add a -D for debug to print the formats being used

CONTRIBUTORS
util/faxinfo.c++

index ef927751bc9a796fe3c8c726c4b70c67d19930ab..f38744fbaa779b6c987484147765565ac25ccbc2 100644 (file)
@@ -119,6 +119,7 @@ for his help in making a working Class 1 driver.
   Giulio Orsero
   Dave Packer
   Davide Pagnin
+  Paolo Panizza
   Chris Parsons
   Michael Pedersen
   John Perkins
index 652cb2b00c4e1cc5f6843981e91cfdf941167f69..ff97245a3fe8aab992f57501c1fdb45aa21eea87 100644 (file)
@@ -82,7 +82,7 @@ sanitize(fxStr& s)
 static void
 usage (const char* app)
 {
-    printf("usage: %s [-n] [-S fmt] [-s fmt] [-e fmt] [-E fmt]\n\n", app);
+    printf("usage: %s [-n] [-S fmt] [-s fmt] [-e fmt] [-E fmt] [-D]\n\n", app);
 }
 
 static const char*
@@ -91,27 +91,41 @@ escapedString (const char*src)
     char* res;
     int len;
     len = strlen(src);
-    res = (char*)malloc(len);
+    res = (char*)malloc(len+1);
     if (res)
     {
        char* dst = res;
-       for (int i = 0; i < len; i++)
+       for (int i = 0; i <= len; i++)
        {
-           if (src[i] == '\\')
+           switch (src[i])
            {
-               switch (src[++i])
-               {
-                   case 'n':   *dst++ = '\n';  break;
-                   case 'r':   *dst++ = '\r';  break;
-                   case 't':   *dst++ = '\t';  break;
-                   default:
-                       *dst++ = src[i];
-               }
-           } else
-           {
-               *dst++ = src[i];
+               case '\\':
+                   switch (src[++i])
+                   {
+                       case 'n':       *dst++ = '\n';  break;
+                       case 'r':       *dst++ = '\r';  break;
+                       case 't':       *dst++ = '\t';  break;
+                       default:
+                           *dst++ = src[i];
+                   }
+                   break;
+               case '%':
+                   *dst++ = src[i];
+                   switch (src[++i])
+                   {
+                       case 'n':       *dst++ = '%';   break;
+                       default:
+                           *dst++ = src[i];
+                   }
+                   break;
+
+               default:
+                   *dst++ = src[i];
            }
        }
+    } else
+    {
+       exit(ENOMEM);
     }
     return res;
 }
@@ -149,9 +163,11 @@ int
 main(int argc, char** argv)
 {
     const char* appName = argv[0];
+    bool debug = false;
+    bool baseName = false;
     int c;
 
-    while ((c = getopt(argc, argv, "nS:s:e:E:")) != -1)
+    while ((c = getopt(argc, argv, "nbS:s:e:E:D")) != -1)
        switch (c) {
            case '?':
                usage(appName);
@@ -159,6 +175,9 @@ main(int argc, char** argv)
            case 'n':
                faxStart = "%s:\n";
                break;
+           case 'b':
+               baseName = true;
+               break;
            case 'S':
                faxStart = escapedString(optarg);
                break;
@@ -171,10 +190,25 @@ main(int argc, char** argv)
            case 'E':
                faxEnd = escapedString(optarg);
                break;
+           case 'D':
+               debug = true;
+               break;
        }
 
+    if (debug)
+       fprintf(stderr, "faxStart='%s'\nfieldStart='%s'\nfieldEnd='%s'\nfaxEnd'%s'\n",
+               faxStart,fieldStart,fieldEnd,faxEnd);
+
     while (optind < argc) {
-       printStart(argv[optind]);
+       const char* name = argv[optind];
+
+       if (baseName) {
+           const char* r = strrchr(name, '/');
+           if (r)
+               name = r+1;
+       }
+
+       printStart(name);
        TIFFSetErrorHandler(NULL);
        TIFFSetWarningHandler(NULL);
        TIFF* tif = TIFFOpen(argv[optind], "r");
@@ -343,7 +377,7 @@ main(int argc, char** argv)
            fxStr fmt(fxStr::format("CallID%u", i+1));
            printField("%s", (const char*)fmt, (const char*) callid.id(i));
        }
-       printEnd(argv[optind]);
+       printEnd(name);
        optind++;
     }
     return (0);