Handle stdin properly in cmp(1) and remove path comparison
Same paths are undefined behaviour, let's not endorse it.
This commit is contained in:
parent
d756dca999
commit
cb1b5d532b
15
cmp.c
15
cmp.c
|
@ -35,12 +35,11 @@ main(int argc, char *argv[])
|
|||
if (argc != 2 || (lflag && sflag))
|
||||
usage();
|
||||
|
||||
if (!strcmp(argv[0], argv[1]))
|
||||
return Same;
|
||||
|
||||
for (n = 0; n < 2; n++) {
|
||||
if (argv[n][0] == '-' && !argv[n][1])
|
||||
argv[n] = "/dev/fd/0";
|
||||
if (argv[n][0] == '-' && !argv[n][1]) {
|
||||
argv[n] = "<stdin>";
|
||||
fp[n] = stdin;
|
||||
} else {
|
||||
fp[n] = fopen(argv[n], "r");
|
||||
if (!fp[n]) {
|
||||
if (!sflag)
|
||||
|
@ -48,6 +47,7 @@ main(int argc, char *argv[])
|
|||
exit(Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (n = 1; ; n++) {
|
||||
b[0] = getc(fp[0]);
|
||||
|
@ -76,5 +76,10 @@ main(int argc, char *argv[])
|
|||
same = 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (n = 1; n < 2; n++)
|
||||
if (fp[n] != stdin)
|
||||
fclose(fp[n]);
|
||||
|
||||
return same ? Same : Diff;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user