[poppler] utils/parseargs.cc utils/parseargs.h utils/pdftocairo.cc

Adrian Johnson ajohnson at kemper.freedesktop.org
Mon Oct 17 03:46:27 PDT 2011


 utils/parseargs.cc  |   12 ++++++++++++
 utils/parseargs.h   |    2 ++
 utils/pdftocairo.cc |   17 ++++++++---------
 3 files changed, 22 insertions(+), 9 deletions(-)

New commits:
commit 40b56994dda79653c902977423f349efa55cf21e
Author: Adrian Johnson <ajohnson at redneon.com>
Date:   Mon Oct 17 20:33:03 2011 +1030

    utils: Add GooString arg to parseargs and use for paths in pdftocairo
    
    <sys/param.h> and MAXPATHLEN is not available on windows. Avoid the
    need to know the max path length by using GooString for the path.

diff --git a/utils/parseargs.cc b/utils/parseargs.cc
index c5f3007..ef971a5 100644
--- a/utils/parseargs.cc
+++ b/utils/parseargs.cc
@@ -30,6 +30,7 @@
 #include "parseargs.h"
 
 #include "goo/gstrtod.h"
+#include "goo/GooString.h"
 
 static const ArgDesc *findArg(const ArgDesc *args, char *arg);
 static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]);
@@ -87,6 +88,7 @@ void printUsage(char *program, char *otherArgs, const ArgDesc *args) {
       break;
     case argString:
     case argStringDummy:
+    case argGooString:
       typ = " <string>";
       break;
     case argFlag:
@@ -152,6 +154,16 @@ static GBool grabArg(const ArgDesc *arg, int i, int *argc, char *argv[]) {
       n = 1;
     }
     break;
+  case argGooString:
+    if (i + 1 < *argc) {
+      ((GooString*)arg->val)->Set(argv[i+1], arg->size - 1);
+      ((GooString*)arg->val)->append('\0');
+      n = 2;
+    } else {
+      ok = gFalse;
+      n = 1;
+    }
+    break;
   default:
     fprintf(stderr, "Internal error in arg table\n");
     n = 1;
diff --git a/utils/parseargs.h b/utils/parseargs.h
index 410dcc4..a2ec1d7 100644
--- a/utils/parseargs.h
+++ b/utils/parseargs.h
@@ -41,6 +41,8 @@ typedef enum {
 				/*   [val: double *]  */
   argString,			/* string arg      */
 				/*   [val: char *] */
+  argGooString,			/* string arg      */
+				/*   [val: GooString *] */
   /* dummy entries -- these show up in the usage listing only; */
   /* useful for X args, for example                            */
   argFlagDummy,
diff --git a/utils/pdftocairo.cc b/utils/pdftocairo.cc
index fb3ca30..e458ee5 100644
--- a/utils/pdftocairo.cc
+++ b/utils/pdftocairo.cc
@@ -32,7 +32,6 @@
 
 #include "config.h"
 #include <poppler-config.h>
-#include <sys/param.h> // for MAXPATHLEN
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
@@ -91,7 +90,7 @@ static GBool useCropBox = gFalse;
 static GBool mono = gFalse;
 static GBool gray = gFalse;
 static GBool transp = gFalse;
-static char icc[MAXPATHLEN] = "";
+static GooString icc;
 
 static GBool level2 = gFalse;
 static GBool level3 = gFalse;
@@ -179,7 +178,7 @@ static const ArgDesc argDesc[] = {
   {"-transp",   argFlag,     &transp,          0,
    "use a transparent background instead of white (PNG)"},
 #if USE_CMS
-  {"-icc",   argString,     &icc,          sizeof(icc),
+  {"-icc",   argGooString,     &icc,          0,
    "ICC color profile to use"},
 #endif
 
@@ -756,7 +755,7 @@ int main(int argc, char *argv[]) {
     checkInvalidPrintOption(mono, "-mono");
     checkInvalidPrintOption(gray, "-gray");
     checkInvalidPrintOption(transp, "-transp");
-    checkInvalidPrintOption(icc[0], "-icc");
+    checkInvalidPrintOption(icc.getCString()[0], "-icc");
     checkInvalidPrintOption(singleFile, "-singlefile");
   } else {
     checkInvalidImageOption(level2, "-level2");
@@ -772,7 +771,7 @@ int main(int argc, char *argv[]) {
     checkInvalidImageOption(duplex, "-duplex");
   }
 
-  if (icc[0] && !png) {
+  if (icc.getCString()[0] && !png) {
     fprintf(stderr, "Error: -icc may only be used with png output.\n");
     exit(99);
   }
@@ -842,10 +841,10 @@ int main(int argc, char *argv[]) {
 
 #if USE_CMS
   icc_data = NULL;
-  if (icc[0]) {
-    FILE *file = fopen(icc, "rb");
+  if (icc.getCString()[0]) {
+    FILE *file = fopen(icc.getCString(), "rb");
     if (!file) {
-      fprintf(stderr, "Error: unable to open icc profile %s\n", icc);
+      fprintf(stderr, "Error: unable to open icc profile %s\n", icc.getCString());
       exit(4);
     }
     fseek (file, 0, SEEK_END);
@@ -853,7 +852,7 @@ int main(int argc, char *argv[]) {
     fseek (file, 0, SEEK_SET);
     icc_data = (unsigned char*)gmalloc(icc_data_size);
     if (fread(icc_data, icc_data_size, 1, file) != 1) {
-      fprintf(stderr, "Error: unable to read icc profile %s\n", icc);
+      fprintf(stderr, "Error: unable to read icc profile %s\n", icc.getCString());
       exit(4);
     }
     fclose(file);


More information about the poppler mailing list