From owner-svn-src-user@freebsd.org  Sat Dec 31 11:35:52 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id BC4EAC99F99
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Sat, 31 Dec 2016 11:35:52 +0000 (UTC)
 (envelope-from bapt@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 7D4EC1B84;
 Sat, 31 Dec 2016 11:35:52 +0000 (UTC)
 (envelope-from bapt@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uBVBZphe054744;
 Sat, 31 Dec 2016 11:35:51 GMT (envelope-from bapt@FreeBSD.org)
Received: (from bapt@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id uBVBZpBX054741;
 Sat, 31 Dec 2016 11:35:51 GMT (envelope-from bapt@FreeBSD.org)
Message-Id: <201612311135.uBVBZpBX054741@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: bapt set sender to
 bapt@FreeBSD.org using -f
From: Baptiste Daroussin <bapt@FreeBSD.org>
Date: Sat, 31 Dec 2016 11:35:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r310948 - user/bapt/diff
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Dec 2016 11:35:52 -0000

Author: bapt
Date: Sat Dec 31 11:35:51 2016
New Revision: 310948
URL: https://svnweb.freebsd.org/changeset/base/310948

Log:
  Implement diff --ignore-file-name-case
  
  Note that the --no-ignore-file-name-case is not planned to be implemented
  as this is the default and there is no configuration switch to change that
  default
  
  Obtained from:	soc2012

Modified:
  user/bapt/diff/diff.c
  user/bapt/diff/diff.h
  user/bapt/diff/diffdir.c

Modified: user/bapt/diff/diff.c
==============================================================================
--- user/bapt/diff/diff.c	Sat Dec 31 11:30:18 2016	(r310947)
+++ user/bapt/diff/diff.c	Sat Dec 31 11:35:51 2016	(r310948)
@@ -40,7 +40,7 @@ __FBSDID("$FreeBSD$");
 #include "xmalloc.h"
 
 int	 lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag;
-int	 diff_format, diff_context, status;
+int	 diff_format, diff_context, status, ignore_file_case;
 int	 tabsize = 8;
 char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
 struct stat stb1, stb2;
@@ -51,6 +51,7 @@ regex_t	 ignore_re;
 enum {
 	OPT_TSIZE = CHAR_MAX + 1,
 	OPT_STRIPCR,
+	OPT_IGN_FN_CASE,
 };
 
 static struct option longopts[] = {
@@ -79,6 +80,7 @@ static struct option longopts[] = {
 	{ "ignore-all-space",		no_argument,		0,	'w' },
 	{ "exclude",			required_argument,	0,	'x' },
 	{ "exclude-from",		required_argument,	0,	'X' },
+	{ "ignore-file-name-case",	no_argument,		NULL,	OPT_IGN_FN_CASE },
 	{ "strip-trailing-cr",		no_argument,		NULL,	OPT_STRIPCR },
 	{ "tabsize",			optional_argument,	NULL,	OPT_TSIZE },
 	{ NULL,				0,			0,	'\0'}
@@ -219,6 +221,9 @@ main(int argc, char **argv)
 		case 'x':
 			push_excludes(optarg);
 			break;
+		case OPT_IGN_FN_CASE:
+			ignore_file_case = 1;
+			break;
 		case OPT_TSIZE:
 			tabsize = (int) strtonum(optarg, 1, INT_MAX, &errstr);
 			if (errstr) {

Modified: user/bapt/diff/diff.h
==============================================================================
--- user/bapt/diff/diff.h	Sat Dec 31 11:30:18 2016	(r310947)
+++ user/bapt/diff/diff.h	Sat Dec 31 11:35:51 2016	(r310948)
@@ -84,7 +84,7 @@ struct excludes {
 };
 
 extern int	lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag;
-extern int	diff_format, diff_context, status;
+extern int	diff_format, diff_context, status, ignore_file_case;
 extern int	tabsize;
 extern char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
 extern struct	stat stb1, stb2;

Modified: user/bapt/diff/diffdir.c
==============================================================================
--- user/bapt/diff/diffdir.c	Sat Dec 31 11:30:18 2016	(r310947)
+++ user/bapt/diff/diffdir.c	Sat Dec 31 11:35:51 2016	(r310948)
@@ -124,7 +124,8 @@ diffdir(char *p1, char *p2, int flags)
 		dent2 = dp2 != edp2 ? *dp2 : NULL;
 
 		pos = dent1 == NULL ? 1 : dent2 == NULL ? -1 :
-		    strcmp(dent1->d_name, dent2->d_name);
+		    ignore_file_case ? strcasecmp(dent1->d_name, dent2->d_name) :
+		    strcmp(dent1->d_name, dent2->d_name) ;
 		if (pos == 0) {
 			/* file exists in both dirs, diff it */
 			diffit(dent1, path1, dirlen1, path2, dirlen2, flags);