blob: c04b6e1c9c3a42c016a2346303b6c0e5d1810040 [file] [log] [blame]
Mark Whitley872138d2000-10-09 18:56:47 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Mini cmp implementation for busybox
4 *
5 *
Eric Andersen8ec10a92001-01-27 09:33:39 +00006 * Copyright (C) 1999,2000,2001 by Lineo, inc.
Mark Whitley872138d2000-10-09 18:56:47 +00007 * Written by Matt Kraai <kraai@alumni.carnegiemellon.edu>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 *
23 */
24
25#include "busybox.h"
26#include <stdio.h>
27#include <string.h>
28#include <errno.h>
Eric Andersened3ef502001-01-27 08:24:39 +000029#include <stdlib.h>
Mark Whitley872138d2000-10-09 18:56:47 +000030
31int cmp_main(int argc, char **argv)
32{
33 FILE *fp1 = NULL, *fp2 = stdin;
34 char *filename1 = argv[1], *filename2 = "-";
35 int c1, c2, char_pos = 1, line_pos = 1;
36
37 /* parse argv[] */
38 if (argc < 2 || 3 < argc)
Eric Andersen67991cf2001-02-14 21:23:06 +000039 show_usage();
Mark Whitley872138d2000-10-09 18:56:47 +000040
41 fp1 = xfopen(argv[1], "r");
42 if (argv[2] != NULL) {
43 fp2 = xfopen(argv[2], "r");
44 filename2 = argv[2];
45 }
46
47 do {
48 c1 = fgetc(fp1);
49 c2 = fgetc(fp2);
50 if (c1 != c2) {
51 if (c1 == EOF)
52 printf("EOF on %s\n", filename1);
53 else if (c2 == EOF)
54 printf("EOF on %s\n", filename2);
55 else
56 printf("%s %s differ: char %d, line %d\n", filename1, filename2,
57 char_pos, line_pos);
Matt Kraai3e856ce2000-12-01 02:55:13 +000058 return EXIT_FAILURE;
Mark Whitley872138d2000-10-09 18:56:47 +000059 }
60 char_pos++;
61 if (c1 == '\n')
62 line_pos++;
63 } while (c1 != EOF);
64
65 return EXIT_SUCCESS;
66}