version 1.13, 2006/08/10 22:44:17 |
version 1.14, 2007/09/05 21:07:53 |
|
|
newfile(void) |
newfile(void) |
{ |
{ |
static char *suffix, *sufftail; |
static char *suffix, *sufftail; |
static int defname; |
char *sptr; |
|
|
if (ofd == -1) { |
if (ofd == -1) { |
if (fname[0] == '\0') { |
ofd = fileno(stdout); |
fname[0] = 'x'; |
if (*fname == '\0') { |
suffix = fname + 1; |
*fname = 'x'; /* no name specified, use 'x' */ |
defname = 1; |
memset(fname + 1, 'a', sufflen); |
|
suffix = fname; |
|
sufflen++; /* treat 'x' as part of suffix */ |
} else { |
} else { |
suffix = fname + strlen(fname); |
suffix = fname + strlen(fname); |
defname = 0; |
memset(suffix, 'a', sufflen); |
} |
} |
memset(suffix, 'a', sufflen); |
|
suffix[sufflen] = '\0'; |
suffix[sufflen] = '\0'; |
sufftail = suffix + sufflen - 1; |
sufftail = suffix + sufflen - 1; |
--sufftail[0]; /* incremented later */ |
} else { |
ofd = fileno(stdout); |
for (sptr = sufftail; sptr >= suffix; sptr--) { |
} |
if (*sptr != 'z') { |
|
(*sptr)++; |
if (sufftail[0] == 'z') { |
|
int i; |
|
|
|
/* Increment the non-tail portion of the suffix. */ |
|
for (i = sufflen - 2; i >= 0; i--) { |
|
if (suffix[i] != 'z') { |
|
suffix[i]++; |
|
break; |
break; |
} |
} else |
|
*sptr = 'a'; |
} |
} |
if (i < 0) { |
if (sptr < suffix) |
/* Hack to support y and z prefix if no name spec'd. */ |
errx(EX_DATAERR, "too many files"); |
if (!defname || fname[0] == 'z') |
} |
errx(EX_DATAERR, "too many files"); |
|
++fname[0]; |
|
memset(suffix, 'a', sufflen); |
|
} else |
|
sufftail[0] = 'a'; /* reset tail */ |
|
} else |
|
++sufftail[0]; |
|
|
|
if (!freopen(fname, "w", stdout)) |
if (!freopen(fname, "w", stdout)) |
err(EX_IOERR, "%s", fname); |
err(EX_IOERR, "%s", fname); |