version 1.76, 2010/07/28 23:52:01 |
version 1.77, 2011/03/05 20:12:42 |
|
|
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", |
|
|
|
|
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) |
|
|
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"); |