[BACK]Return to main.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / compress

Diff for /src/usr.bin/compress/main.c between version 1.76 and 1.77

version 1.76, 2010/07/28 23:52:01 version 1.77, 2011/03/05 20:12:42
Line 138 
Line 138 
         const char *s;          const char *s;
         char *p, *infile;          char *p, *infile;
         char outfile[MAXPATHLEN], _infile[MAXPATHLEN], suffix[16];          char outfile[MAXPATHLEN], _infile[MAXPATHLEN], suffix[16];
         char *nargv[512];       /* some estimate based on ARG_MAX */          int bits, ch, error, rc, cflag, oflag;
         int bits, ch, error, i, rc, cflag, oflag;  
         static const char *optstr[3] = {          static const char *optstr[3] = {
                 "123456789ab:cdfghLlNnOo:qrS:tVv",                  "123456789ab:cdfghLlNnOo:qrS:tVv",
                 "cfhlNno:qrtVv",                  "cfhlNno:qrtVv",
Line 180 
Line 179 
   
         strlcpy(suffix, method->suffix, sizeof(suffix));          strlcpy(suffix, method->suffix, sizeof(suffix));
   
         nargv[0] = NULL;  
         if (method == M_DEFLATE && (p = getenv("GZIP")) != NULL) {          if (method == M_DEFLATE && (p = getenv("GZIP")) != NULL) {
                 char *last;                  char *evbuf, *last, **nargv = NULL;
                   int argc_extra = 0, nargc = 0;
   
                 nargv[0] = *argv++;                  if ((evbuf = strdup(p)) == NULL)
                 for (i = 1, (p = strtok_r(p, " ", &last)); p != NULL;                          err(1, NULL);
                     (p = strtok_r(NULL, " ", &last)), i++)                  for ((p = strtok_r(evbuf, " ", &last)); p != NULL;
                         if (i < sizeof(nargv)/sizeof(nargv[1]) - argc - 1)                      (p = strtok_r(NULL, " ", &last))) {
                                 nargv[i] = p;                          if (nargc + 1 >= argc_extra) {
                         else                                  argc_extra += 1024;
                                 errx(1, "GZIP is too long");                                  nargv = realloc(nargv,
                 argc += i - 1;                                      (argc + argc_extra + 1) * sizeof(char *));
                 while ((nargv[i++] = *argv++))                                  if (nargv == NULL)
                         ;                                          err(1, NULL);
                 argv = nargv;                          }
                           nargv[++nargc] = p;
                   }
                   if (nargv != NULL) {
                           nargv[0] = *argv++;
                           while ((nargv[++nargc] = *argv++))
                                   ;
                           argv = nargv;
                           argc = nargc;
                   }
         }          }
   
         while ((ch = getopt_long(argc, argv, optstr[pmode], longopts, NULL)) != -1)          while ((ch = getopt_long(argc, argv, optstr[pmode], longopts, NULL)) != -1)
Line 305 
Line 313 
         argv += optind;          argv += optind;
   
         if (argc == 0) {          if (argc == 0) {
                 if (nargv[0] == NULL)                  argv = calloc(2, sizeof(char *));
                         argv = nargv;                  if (argv == NULL)
                 /* XXX - make sure we don't oflow nargv in $GZIP case (millert) */                          err(1, NULL);
                 argv[0] = "-";                  argv[0] = "-";
                 argv[1] = NULL;                  argc = 1;
         }          }
         if (oflag && (recurse || argc > 1))          if (oflag && (recurse || argc > 1))
                 errx(1, "-o option may only be used with a single input file");                  errx(1, "-o option may only be used with a single input file");

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.77