From owner-p4-projects@FreeBSD.ORG Thu Jul 24 15:51:50 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 174581065672; Thu, 24 Jul 2008 15:51:50 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CEE771065670 for ; Thu, 24 Jul 2008 15:51:49 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C2D4A8FC0A for ; Thu, 24 Jul 2008 15:51:49 +0000 (UTC) (envelope-from gabor@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.2/8.14.2) with ESMTP id m6OFpnRi070045 for ; Thu, 24 Jul 2008 15:51:49 GMT (envelope-from gabor@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.2/8.14.1/Submit) id m6OFpnc0070043 for perforce@freebsd.org; Thu, 24 Jul 2008 15:51:49 GMT (envelope-from gabor@freebsd.org) Date: Thu, 24 Jul 2008 15:51:49 GMT Message-Id: <200807241551.m6OFpnc0070043@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gabor@freebsd.org using -f From: Gabor Kovesdan To: Perforce Change Reviews Cc: Subject: PERFORCE change 145821 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jul 2008 15:51:50 -0000 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); }