diff options
author | Jerome Glisse <jglisse@redhat.com> | 2012-09-07 14:17:12 -0400 |
---|---|---|
committer | Jerome Glisse <jglisse@redhat.com> | 2012-09-07 14:17:12 -0400 |
commit | 12b94ef78cb63808cbd9447536e14834a6260695 (patch) | |
tree | d7e1cc76689cd7b7e29956a121745c248ce26d8a | |
parent | e123ed4af8fa2ca12670da141711e63ea9b60f4d (diff) |
differential diff tools
-rw-r--r-- | adiff.c | 91 |
1 files changed, 91 insertions, 0 deletions
@@ -0,0 +1,91 @@ +/* + * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * author: Jerome Glisse + */ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(int argc, char *argv[]) +{ + char line[256], tmp[256]; + FILE **files; + unsigned i; + + if (argc <= 2) { + fprintf(stderr, "%s FILES - FILES\n", argv[0]); + return -EINVAL; + } + + files = malloc(sizeof(void*) * argc); + if (files == NULL) { + return -ENOMEM; + } + + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-")) { + files[i] = NULL; + continue; + } + files[i] = fopen(argv[i], "r"); + if (files[i] == NULL) { + fprintf(stderr, "failed opening %s\n", argv[i]); + return -EINVAL; + } + } + + do { + unsigned diff, skip; + + fgets(line, 256, files[1]); + for (i = 2, diff = 0, skip = 0; i < argc; i++) { + if (files[i] == NULL) { + diff = 1; + continue; + } + if (feof(files[i])) { + return 0; + } + fgets(tmp, 256, files[i]); + if (skip) { + continue; + } + if (diff) { + if (strcmp(line, tmp)) { + printf("- %s", line); + printf("+ %s", tmp); + } + } else { + if (strcmp(line, tmp)) { + skip = 1; + } + } + } + } while (!feof(files[1])); + + return 0; +} |