diff options
Diffstat (limited to 'toys/posix/cmp.c')
-rw-r--r-- | toys/posix/cmp.c | 110 |
1 files changed, 53 insertions, 57 deletions
diff --git a/toys/posix/cmp.c b/toys/posix/cmp.c index 4bbd3f30..13990d45 100644 --- a/toys/posix/cmp.c +++ b/toys/posix/cmp.c @@ -1,6 +1,4 @@ -/* vi: set sw=4 ts=4: - * - * cmp.c - Compare two files. +/* cmp.c - Compare two files. * * Copyright 2012 Timothy Elliott <tle@holymonkey.com> * @@ -9,80 +7,78 @@ USE_CMP(NEWTOY(cmp, "<2>2ls", TOYFLAG_USR|TOYFLAG_BIN)) config CMP - bool "cmp" - default y - help - usage: cmp [-l] [-s] FILE1 FILE2 + bool "cmp" + default y + help + usage: cmp [-l] [-s] FILE1 FILE2 - Compare the contents of two files. + Compare the contents of two files. - -l show all differing bytes - -s silent + -l show all differing bytes + -s silent */ #define FOR_cmp #include "toys.h" GLOBALS( - int fd; - char *name; + int fd; + char *name; ) -// This handles opening the file and +// This handles opening the file and void do_cmp(int fd, char *name) { - int i, len1, len2, min_len, size = sizeof(toybuf)/2; - long byte_no = 1, line_no = 1; - char *buf2 = toybuf+size; + int i, len1, len2, min_len, size = sizeof(toybuf)/2; + long byte_no = 1, line_no = 1; + char *buf2 = toybuf+size; - // First time through, cache the data and return. - if (!TT.fd) { - TT.name = name; - // On return the old filehandle is closed, and this assures that even - // if we were called with stdin closed, the new filehandle != 0. - TT.fd = dup(fd); - return; - } + // First time through, cache the data and return. + if (!TT.fd) { + TT.name = name; + // On return the old filehandle is closed, and this assures that even + // if we were called with stdin closed, the new filehandle != 0. + TT.fd = dup(fd); + return; + } - for (;;) { - len1 = readall(TT.fd, toybuf, size); - len2 = readall(fd, buf2, size); + for (;;) { + len1 = readall(TT.fd, toybuf, size); + len2 = readall(fd, buf2, size); - min_len = len1 < len2 ? len1 : len2; - for (i=0; i<min_len; i++) { - if (toybuf[i] != buf2[i]) { - toys.exitval = 1; - if (toys.optflags & FLAG_l) - printf("%ld %o %o\n", byte_no, toybuf[i], buf2[i]); - else { - if (!(toys.optflags & FLAG_s)) { - printf("%s %s differ: char %ld, line %ld\n", - TT.name, name, byte_no, line_no); - toys.exitval++; - } - goto out; - } - } - byte_no++; - if (toybuf[i] == '\n') line_no++; - } - if (len1 != len2) { - if (!(toys.optflags & FLAG_s)) { - fprintf(stderr, "cmp: EOF on %s\n", - len1 < len2 ? TT.name : name); - } - toys.exitval = 1; - break; - } - if (len1 < 1) break; - } + min_len = len1 < len2 ? len1 : len2; + for (i=0; i<min_len; i++) { + if (toybuf[i] != buf2[i]) { + toys.exitval = 1; + if (toys.optflags & FLAG_l) + printf("%ld %o %o\n", byte_no, toybuf[i], buf2[i]); + else { + if (!(toys.optflags & FLAG_s)) { + printf("%s %s differ: char %ld, line %ld\n", + TT.name, name, byte_no, line_no); + toys.exitval++; + } + goto out; + } + } + byte_no++; + if (toybuf[i] == '\n') line_no++; + } + if (len1 != len2) { + if (!(toys.optflags & FLAG_s)) + fprintf(stderr, "cmp: EOF on %s\n", len1 < len2 ? TT.name : name); + toys.exitval = 1; + break; + } + if (len1 < 1) break; + } out: - if (CFG_TOYBOX_FREE) close(TT.fd); + if (CFG_TOYBOX_FREE) close(TT.fd); } void cmp_main(void) { - loopfiles_rw(toys.optargs, O_RDONLY, 0, toys.optflags&FLAG_s, do_cmp); + loopfiles_rw(toys.optargs, O_RDONLY, 0, toys.optflags&FLAG_s, do_cmp); } |