Wording.
[pintos.git] / src / examples / cmp.c
bloba616a7ec574cba0392fbcd1f7f1a63be6154ebff
1 /* cat.c
3 Compares two files. */
5 #include <stdio.h>
6 #include <syscall.h>
8 int
9 main (int argc, char *argv[])
11 int fd[2];
13 if (argc != 3)
15 printf ("usage: cmp A B\n");
16 return 1;
19 /* Open files. */
20 fd[0] = open (argv[1]);
21 if (fd[0] < 0)
23 printf ("%s: open failed\n", argv[1]);
24 return 1;
26 fd[1] = open (argv[2]);
27 if (fd[1] < 0)
29 printf ("%s: open failed\n", argv[1]);
30 return 1;
33 /* Compare data. */
34 for (;;)
36 int pos;
37 char buffer[2][1024];
38 int bytes_read[2];
39 int min_read;
40 int i;
42 pos = tell (fd[0]);
43 bytes_read[0] = read (fd[0], buffer[0], sizeof buffer[0]);
44 bytes_read[1] = read (fd[1], buffer[1], sizeof buffer[1]);
45 min_read = bytes_read[0] < bytes_read[1] ? bytes_read[0] : bytes_read[1];
46 if (min_read == 0)
47 break;
49 for (i = 0; i < min_read; i++)
50 if (buffer[0][i] != buffer[1][i])
52 printf ("Byte %d is %02hhx ('%c') in %s but %02hhx ('%c') in %s\n",
53 pos + i,
54 buffer[0][i], buffer[0][i], argv[1],
55 buffer[1][i], buffer[1][i], argv[2]);
56 return 1;
59 if (min_read < bytes_read[1])
60 printf ("%s is shorter than %s\n", argv[1], argv[2]);
61 else if (min_read < bytes_read[0])
62 printf ("%s is shorter than %s\n", argv[2], argv[1]);
65 printf ("%s and %s are identical\n", argv[1], argv[2]);
67 return 0;