Date: Thu, 24 Jul 2008 15:51:49 GMT From: Gabor Kovesdan <gabor@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 145821 for review Message-ID: <200807241551.m6OFpnc0070043@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=145821 Change 145821 by gabor@gabor_server on 2008/07/24 15:50:59 - Revert --to-file and --from-file, they were badly implemented and caused an infinite loop in recursive diffs Affected files ... .. //depot/projects/soc2008/gabor_textproc/diff/diff.c#13 edit Differences ... ==== //depot/projects/soc2008/gabor_textproc/diff/diff.c#13 (text+ko) ==== @@ -137,7 +137,6 @@ { char *ep, *fromfile = NULL, *tofile = NULL, **oargv; int ch, lastch, gotstdin, prevoptind, newarg, flags = 0; - char *dst, *src; setlocale(LC_ALL, ""); @@ -321,62 +320,40 @@ errx(2, "%s", buf); } } - - if (fromfile != NULL) { - src = fromfile; - dst = argv[0]; - } else if (tofile != NULL) { - dst = tofile; - src = argv[0]; + if (strcmp(argv[0], "-") == 0) { + fstat(STDIN_FILENO, &stb1); + gotstdin = 1; + } else if (stat(argv[0], &stb1) != 0) { + if (uniflag) + flags |= D_EMPTY1; + else + err(2, "%s", argv[0]); + } + if (strcmp(argv[1], "-") == 0) { + fstat(STDIN_FILENO, &stb2); + gotstdin = 1; + } else if (stat(argv[1], &stb2) != 0) + err(2, "%s", argv[1]); + if (gotstdin && (S_ISDIR(stb1.st_mode) || S_ISDIR(stb2.st_mode))) + errx(2, "can't compare - to a directory"); + set_argstr(oargv, argv); + if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) { + if (format == D_IFDEF) + errx(2, "-D option not supported with directories"); + diffdir(argv[0], argv[1]); } else { - src = argv[0]; - dst = argv[1]; - } - - for (ch = 1; src && dst;ch++) { - if (strcmp(src, "-") == 0) { - fstat(STDIN_FILENO, &stb1); - gotstdin = 1; - } else if (stat(src, &stb1) != 0) { - if (uniflag) - flags |= D_EMPTY1; - else - err(2, "%s", src); + if (S_ISDIR(stb1.st_mode)) { + argv[0] = splice(argv[0], argv[1]); + if (stat(argv[0], &stb1) < 0) + err(2, "%s", argv[0]); } - if (strcmp(dst, "-") == 0) { - fstat(STDIN_FILENO, &stb2); - gotstdin = 1; - } else if (stat(dst, &stb2) != 0) - err(2, "%s", dst); - if (gotstdin && (S_ISDIR(stb1.st_mode) || S_ISDIR(stb2.st_mode))) - errx(2, "can't compare - to a directory"); -/* XXX: ??? - set_argstr(oargv, argv); */ - if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) { - if (format == D_IFDEF) - errx(2, "-D option not supported with directories"); - diffdir(src, dst); - } else { - if (S_ISDIR(stb1.st_mode)) { - src = splice(src, dst); - if (stat(argv[0], &stb1) < 0) - err(2, "%s", argv[0]); - } - if (S_ISDIR(stb2.st_mode)) { - argv[1] = splice(dst, src); - if (stat(argv[1], &stb2) < 0) - err(2, "%s", argv[1]); - } - print_status(diffreg(src, dst, flags), src, dst, - NULL); - if (fromfile != NULL) - dst = argv[ch]; - else if (tofile != NULL) - src = argv[ch]; - else - break; + if (S_ISDIR(stb2.st_mode)) { + argv[1] = splice(argv[1], argv[0]); + if (stat(argv[1], &stb2) < 0) + err(2, "%s", argv[1]); } - + print_status(diffreg(argv[0], argv[1], flags), argv[0], argv[1], + NULL); } exit(status); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807241551.m6OFpnc0070043>