tr: Provide a fallthrough case for single-arg -s
Previously, this would not work properly and not be let through the sanity check. This is a dirty hack until the next iteration where I'll clean up the data structures and make this saner.
This commit is contained in:
parent
c154ef7a03
commit
b5ebd49dd3
20
tr.c
20
tr.c
@ -172,7 +172,7 @@ usage(void)
|
|||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
Rune r = 0, lastrune = 0;
|
Rune r, lastrune = 0;
|
||||||
size_t off1, off2, i, m;
|
size_t off1, off2, i, m;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -197,9 +197,9 @@ main(int argc, char *argv[])
|
|||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
set2ranges = makeset(argv[1], &set2, &set2check);
|
set2ranges = makeset(argv[1], &set2, &set2check);
|
||||||
|
|
||||||
if (!dflag) {
|
if (!dflag || (argc == 2 && sflag)) {
|
||||||
/* sanity checks as we are translating */
|
/* sanity checks as we are translating */
|
||||||
if (!set2ranges && !set2check)
|
if (!sflag && !set2ranges && !set2check)
|
||||||
eprintf("cannot map to an empty set.\n");
|
eprintf("cannot map to an empty set.\n");
|
||||||
if (set2check && set2check != islowerrune &&
|
if (set2check && set2check != islowerrune &&
|
||||||
set2check != isupperrune) {
|
set2check != isupperrune) {
|
||||||
@ -211,6 +211,8 @@ read:
|
|||||||
ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");
|
ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
if (argc == 1 && sflag)
|
||||||
|
goto write;
|
||||||
for (i = 0, off1 = 0; i < set1ranges; i++, off1 += rangelen(set1[i])) {
|
for (i = 0, off1 = 0; i < set1ranges; i++, off1 += rangelen(set1[i])) {
|
||||||
if (set1[i].start <= r && r <= set1[i].end) {
|
if (set1[i].start <= r && r <= set1[i].end) {
|
||||||
if (dflag) {
|
if (dflag) {
|
||||||
@ -278,7 +280,15 @@ read:
|
|||||||
if (dflag && cflag)
|
if (dflag && cflag)
|
||||||
goto read;
|
goto read;
|
||||||
write:
|
write:
|
||||||
if (sflag && r == lastrune) {
|
if (argc == 1 && sflag && r == lastrune) {
|
||||||
|
if (set1check && set1check(r))
|
||||||
|
goto read;
|
||||||
|
for (i = 0; i < set1ranges; i++) {
|
||||||
|
if (set1[i].start <= r && r <= set1[i].end)
|
||||||
|
goto read;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (argc == 2 && sflag && r == lastrune) {
|
||||||
if (set2check && set2check(r))
|
if (set2check && set2check(r))
|
||||||
goto read;
|
goto read;
|
||||||
for (i = 0; i < set2ranges; i++) {
|
for (i = 0; i < set2ranges; i++) {
|
||||||
@ -286,7 +296,7 @@ write:
|
|||||||
goto read;
|
goto read;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastrune = r;
|
|
||||||
efputrune(&r, stdout, "<stdout>");
|
efputrune(&r, stdout, "<stdout>");
|
||||||
|
lastrune = r;
|
||||||
goto read;
|
goto read;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user