Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jun 2012 21:29:20 +0000
From:      jhagewood@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r238159 - in soc2012/jhagewood: diff diff/diff diff3 mdocml
Message-ID:  <20120622212920.7BB341065670@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhagewood
Date: Fri Jun 22 21:29:19 2012
New Revision: 238159
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238159

Log:

Modified:
  soc2012/jhagewood/diff/TODO
  soc2012/jhagewood/diff/diff/diff.c
  soc2012/jhagewood/diff/diff/diff.h
  soc2012/jhagewood/diff/diff/diffreg.c
  soc2012/jhagewood/diff/diff/pathnames.h
  soc2012/jhagewood/diff/hagewood-diff.patch
  soc2012/jhagewood/diff3/hagewood-diff3.patch
  soc2012/jhagewood/mdocml/hagewood-mdocml-ns.patch

Modified: soc2012/jhagewood/diff/TODO
==============================================================================
--- soc2012/jhagewood/diff/TODO	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/TODO	Fri Jun 22 21:29:19 2012	(r238159)
@@ -9,7 +9,7 @@
 --normal				COMPLETE		Sets format to D_NORMAL in getopt_long().
 --suppress-common-lines			IN PROGRESS
 --GTYPE-group-format			INCOMPLETE
---line-format				IN PROGRESS
+--line-format				IN PROGRESS		Added new-line-format, old-line-format, and unchanged-line-format for compatibility
 --LTYPE-line-format			INCOMPLETE
 --from-file				INCOMPLETE
 --to-file				INCOMPLETE
@@ -17,8 +17,18 @@
 --speed-large-file			INCOMPLETE
 --ignore-tab-expansion			IN PROGRESS		Functionality implemented in check(), needs debugging. (Same problem as --ignore-blank-lines?)  
 --width					INCOMPLETE
+Fix non-ascii character diffs		COMPLETE		Changed name of asciifile() to istextfile() and functionality.		
+
 
 Notes: 
 
-- When using large files as input, diff will only output "Files [file1] and [file2] differ."
+- When using text files with non-ascii characters, diff will interpret them as binary files and output "Files [file1] and [file2] differ."
+  Very important compatibility problem with GNU diff, which will diff files that aren't strictly ascii.
+	- Error is associated with asciifile() in diffreg.c
+	- FIX: Changed name of asciifile() to istextfile() (more appropriate), and instead of checking if every character in a file is printable, only check 
+	  the first character. 
+	  IMO, This is a sufficient test to check if a file is binary or a text-file.
 - With some files, modification times displayed in the timestamp for file1 are different than the time outputted by GNU diff. 
+- The -ignore-*-* options need some work.
+
+

Modified: soc2012/jhagewood/diff/diff/diff.c
==============================================================================
--- soc2012/jhagewood/diff/diff/diff.c	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/diff/diff.c	Fri Jun 22 21:29:19 2012	(r238159)
@@ -1,4 +1,4 @@
-/*-
+/*
  * Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -43,13 +43,13 @@
 #include "diff.h"
 #include "pathnames.h"
 
-int	 aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
-int	 sflag, tflag, Tflag, wflag;
-int	 Bflag, yflag;
-int	 strip_cr, tabsize = 8;
-char 	 ignore_file_case = 0;
-int	 format, context, status;
-char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
+int	aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
+int	sflag, tflag, Tflag, wflag;
+int	Bflag, yflag;
+int strip_cr, suppress_cl, tabsize = 8;
+char ignore_file_case = 0;
+int	format, context, status;
+char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
 struct stat stb1, stb2;
 struct excludes *excludes_list;
 regex_t	 ignore_re;
@@ -77,6 +77,9 @@
   OPT_HLINES,
   OPT_LFILES,
   OPT_HELP,
+  OPT_NEW_LF,
+  OPT_OLD_LF,
+  OPT_UNCHGD_LF,
 };
 
 
@@ -112,8 +115,10 @@
 	/*{ "LTYPE-line-format",		required_argument,	NULL,	OPT_LLF },*/
 	{ "minimal",			no_argument,		NULL,	'd' },
 	{ "new-file",			no_argument,		NULL,	'N' },
+	{ "new-line-format",		required_argument,		NULL,	OPT_NEW_LF},
 	{ "no-ignore-file-name-case",	no_argument,		NULL,	OPT_NIGN_FN_CASE },
 	{ "normal",			no_argument,		NULL,	OPT_NORMAL },
+	{ "old-line-format",		required_argument,		NULL,	OPT_OLD_LF},
 	{ "paginate",			no_argument,		NULL,	'l' },
 	{ "recursive",			no_argument,		NULL,	'r' },
 	{ "report-identical-files",	no_argument,		NULL,	's' },
@@ -128,6 +133,7 @@
 	{ "tabsize",			optional_argument,	NULL,	OPT_TSIZE },
 	{ "text",			no_argument,		NULL,	'a' },
 	/*{ "to-file",			required_argument,	NULL,	OPT_TOFILE },*/
+	{ "unchanged-line-format",		required_argument,			NULL,	OPT_UNCHGD_LF},
 	{ "unidirectional-new-file",	no_argument,		NULL,	'P' },
 	{ "unified",			optional_argument,	NULL,	'U' },
 	{ "version",			no_argument,		NULL,	'v' },
@@ -294,15 +300,19 @@
 		case 'y':
 			yflag = 1;
 			break;
+		case OPT_NEW_LF:
+		case OPT_OLD_LF:
+		case OPT_UNCHGD_LF:
 		case OPT_LF:
 			/* XXX To do: Complete --line-format. */
 			format = D_IFDEF;
+			ifdefname = optarg;
 			break;
 		case OPT_NORMAL:
 			format = D_NORMAL;
 			break;
 		case OPT_SUPCL:
-			/* XXX To do: Complete --suppress-common-lines */
+			suppress_cl = 1;
 			break;
 		case OPT_TSIZE:
 			if (optarg != NULL) {
@@ -340,16 +350,15 @@
 	argc -= optind;
 	argv += optind;
 
-	if(yflag) {
+	if (yflag) {
 		/* remove y flag from args and call sdiff */
-		for(argv=oargv; argv && strcmp(*argv, "-y") != 0; argv++);
+		for (argv = oargv; argv && strcmp(*argv, "-y") != 0; argv++);
 		while(argv != &oargv[oargc]){
-			*argv=*(argv+1);
+			*argv= *(argv+1);
 			argv++;
 		}
 		oargv[0] = _PATH_SDIFF;
 		*argv= "\0";
-
 		execv(_PATH_SDIFF, oargv);
 		_exit(127);
 	}
@@ -388,7 +397,10 @@
 	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");
+			if (ch == 'D') 
+				errx(2, "-D option not supported with directories");
+			if (ch == OPT_LF) 
+				errx(2, "--line-format option not supported with directories");
 		diffdir(argv[0], argv[1]);
 	} else {
 		if (S_ISDIR(stb1.st_mode)) {

Modified: soc2012/jhagewood/diff/diff/diff.h
==============================================================================
--- soc2012/jhagewood/diff/diff/diff.h	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/diff/diff.h	Fri Jun 22 21:29:19 2012	(r238159)
@@ -77,7 +77,7 @@
 
 extern int	 aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
 		 sflag, tflag, Tflag, wflag;
-extern int	 Bflag, strip_cr, tabsize;
+extern int	 Bflag, strip_cr, suppress_cl, tabsize;
 extern int	 format, context, status;
 extern char	 ignore_file_case;
 extern char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;

Modified: soc2012/jhagewood/diff/diff/diffreg.c
==============================================================================
--- soc2012/jhagewood/diff/diff/diffreg.c	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/diff/diffreg.c	Fri Jun 22 21:29:19 2012	(r238159)
@@ -200,7 +200,7 @@
 static void	 sort(struct line *, int);
 static void	 print_header(const char *, const char *);
 static int	 ignoreline(char *);
-static int	 asciifile(FILE *);
+static int	 istextfile(FILE *);
 static int	 fetch(long *, int, int, FILE *, int, int);
 static int	 newcand(int, int, int);
 static int	 search(int *, int, int);
@@ -368,7 +368,7 @@
 		goto closem;
 	}
 
-	if (!asciifile(f1) || !asciifile(f2)) {
+	if (!istextfile(f1) || !istextfile(f2)) {
 		rval = D_BINARY;
 		status |= 1;
 		goto closem;
@@ -751,7 +751,7 @@
 static void
 check(char *file1, FILE *f1, char *file2, FILE *f2)
 {
-	int	i, j, jackpot, c, d, int spacecount;
+	int	i, j, jackpot, c, d, spacecount;
 	long ctold, ctnew;
 	fpos_t position;
 		
@@ -812,18 +812,16 @@
 					if (c == '\n' && d != '\n') {
 						do {
 							if (c == '\n') {
-							      ixold[i] = ctold; 
-							      i++;
+								ctold++; 
 							}
-						} while ((c = getc(f1)) == '\n' && i <= len[0]);
+						} while ((c = getc(f1)) == '\n');
 					}
 					if (d == '\n' && c != '\n') {
 						do {
 							if (d == '\n') {
-								ixnew[j] = ctnew;
-								j++;
+								ctnew++;
 							}
-						} while ((d = getc(f2)) == '\n' && j <= len[1]);
+						} while ((d = getc(f2)) == '\n');
 					}
 					break;
 				/* ignore-tab-expansion */
@@ -834,13 +832,13 @@
 							 * Checks if file1 has 8 consecutive spaces, which is 
 							 * equal to 1 tab.
 							 */
-							getpos(f1, &position);
+							fgetpos(f1, &position);
 							for (spacecount = 1; spacecount <= 8; spacecount++) {
 								c = getc(f1);
 								if (c != ' ')
 									break;
 							}
-							setpos(f1, &position);
+							fsetpos(f1, &position);
 							while (c == ' ' && spacecount == 9) {
 								c = getc(f1);
 								ctold++;
@@ -851,13 +849,13 @@
 							 * Checks if file2 has 8 consecutive spaces, which is 
 							 * equal to 1 tab.
 							 */
-							getpos(f2, &position);
+							fgetpos(f2, &position);
 							for (spacecount = 1; spacecount <= 8; spacecount++) {
 								d = getc(f2);
 								if (d != ' ')
 									break;
 							}
-							setpos(f2, &position);
+							fsetpos(f2, &position);
 							while (d == ' ' && spacecount == 9) {
 								d = getc(f2);
 								ctnew++;
@@ -1004,7 +1002,7 @@
 #define	c i0
 			if ((c = getc(f1)) == EOF)
 				return;
-			putchar(c);
+			printf("%c", c);
 		}
 #undef c
 	}
@@ -1154,15 +1152,15 @@
 	case D_NORMAL:
 	case D_EDIT:
 		range(a, b, ",");
-		putchar(a > b ? 'a' : c > d ? 'd' : 'c');
+		printf("%c", (a > b ? 'a' : c > d ? 'd' : 'c'));
 		if (format == D_NORMAL)
 			range(c, d, ",");
-		putchar('\n');
+		printf("%c", '\n');
 		break;
 	case D_REVERSE:
-		putchar(a > b ? 'a' : c > d ? 'd' : 'c');
+		printf("%c", (a > b ? 'a' : c > d ? 'd' : 'c'));
 		range(a, b, " ");
-		putchar('\n');
+		printf("%c", '\n');
 		break;
 	case D_NREVERSE:
 		if (a > b)
@@ -1178,7 +1176,7 @@
 	if (format == D_NORMAL || format == D_IFDEF) {
 		fetch(ixold, a, b, f1, '<', 1);
 		if (a <= b && c <= d && format == D_NORMAL)
-			puts("---");
+			printf("---");
 	}
 	i = fetch(ixnew, c, d, f2, format == D_NORMAL ? '>' : '\0', 0);
 	if (i != 0 && format == D_EDIT) {
@@ -1189,14 +1187,14 @@
 		 * it.  We have to add a substitute command to change this
 		 * back and restart where we left off.
 		 */
-		puts(".");
+		printf(".");
 		printf("%ds/^\\.\\././\n", a);
 		a += i;
 		c += i;
 		goto restart;
 	}
 	if ((format == D_EDIT || format == D_REVERSE) && c <= d)
-		puts(".");
+		printf(".");
 	if (inifdef) {
 		printf("#endif /* %s */\n", ifdefname);
 		inifdef = 0;
@@ -1218,7 +1216,7 @@
 		/* print through if append (a>b), else to (nb: 0 vs 1 orig) */
 		nc = f[a > b ? b : a - 1] - curpos;
 		for (i = 0; i < nc; i++)
-			putchar(getc(lb));
+			printf("%c", getc(lb));
 	}
 	if (a > b)
 		return (0);
@@ -1238,12 +1236,12 @@
 		fseek(lb, f[i - 1], SEEK_SET);
 		nc = f[i] - f[i - 1];
 		if (format != D_IFDEF && ch != '\0') {
-			putchar(ch);
+			printf("%c", ch);
 			if (Tflag && (format == D_NORMAL || format == D_CONTEXT
 			    || format == D_UNIFIED))
-				putchar('\t');
+				printf("%c", '\t');
 			else if (format != D_UNIFIED)
-				putchar(' ');
+				printf("%c", ' ');
 		}
 		col = 0;
 		for (j = 0, lastc = '\0'; j < nc; j++, lastc = c) {
@@ -1252,13 +1250,13 @@
 				    format == D_NREVERSE)
 					warnx("No newline at end of file");
 				else
-					puts("\n\\ No newline at end of file");
+					printf("\n\\ No newline at end of file");
 				return (0);
 			}
 			if (c == '\t' && tflag) {
 				newcol = ((col/tabsize)+1)*tabsize;
 				do {
-					putchar(' ');
+					printf("%c", ' ');
 				} while (++col < newcol);
 			} else {
 				if (format == D_EDIT && j == 1 && c == '\n'
@@ -1270,10 +1268,10 @@
 					 * giving the caller an offset
 					 * from which to restart.
 					 */
-					puts(".");
+					printf(".");
 					return (i - a + 1);
 				}
-				putchar(c);
+				printf("%c", c);
 				col++;
 			}
 		}
@@ -1347,7 +1345,7 @@
 }
 
 static int
-asciifile(FILE *f)
+textfile(FILE *f)
 {
 	char buf[BUFSIZ];
 	int	i, cnt;
@@ -1356,9 +1354,8 @@
 		return (1);
 	rewind(f);
 	cnt = fread(buf, 1, sizeof(buf), f);
-	for (i = 0; i < cnt; i++)
-		if (!isprint(buf[i]) && !isspace(buf[i]))
-			return (0);
+	if (!isprint(buf[0]) && !isspace(buf[1]))
+		return (0);
 	return (1);
 }
 
@@ -1429,8 +1426,8 @@
 	if (pflag) {
 		f = match_function(ixold, lowa-1, f1);
 		if (f != NULL) {
-			putchar(' ');
-			fputs(f, stdout);
+			printf("%c", ' ');
+			printf("%s", f);
 		}
 	}
 	printf("\n*** ");
@@ -1530,19 +1527,19 @@
 	lowc = MAX(1, cvp->c - context);
 	upd = MIN(len[1], context_vec_ptr->d + context);
 
-	fputs("@@ -", stdout);
+	printf("@@ -");
 	uni_range(lowa, upb);
-	fputs(" +", stdout);
+	printf(" +");
 	uni_range(lowc, upd);
-	fputs(" @@", stdout);
+	printf(" @@");
 	if (pflag) {
 		f = match_function(ixold, lowa-1, f1);
 		if (f != NULL) {
-			putchar(' ');
-			fputs(f, stdout);
+			printf("%c", ' ');
+			printf("%s", f);
 		}
 	}
-	putchar('\n');
+	printf("%c", '\n');
 
 	/*
 	 * Output changes in "unified" diff format--the old and new lines

Modified: soc2012/jhagewood/diff/diff/pathnames.h
==============================================================================
--- soc2012/jhagewood/diff/diff/pathnames.h	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/diff/pathnames.h	Fri Jun 22 21:29:19 2012	(r238159)
@@ -23,4 +23,4 @@
 #include <paths.h>
 
 #define	_PATH_PR	"/usr/bin/pr"
-#define _PATH_SDIFF	"/usr/bin/sdiff
+#define _PATH_SDIFF	"/usr/bin/sdiff"

Modified: soc2012/jhagewood/diff/hagewood-diff.patch
==============================================================================
--- soc2012/jhagewood/diff/hagewood-diff.patch	Fri Jun 22 20:42:11 2012	(r238158)
+++ soc2012/jhagewood/diff/hagewood-diff.patch	Fri Jun 22 21:29:19 2012	(r238159)
@@ -1,6 +1,12 @@
 diff -rupN jhagewood/diff/diff-orig/diff.c jhagewood/diff/diff/diff.c
---- jhagewood/diff/diff-orig/diff.c	2012-06-18 03:07:38.000000000 -0400
-+++ jhagewood/diff/diff/diff.c	2012-06-20 21:51:36.000000000 -0400
+--- jhagewood/diff/diff-orig/diff.c	2012-06-17 23:07:38.000000000 -0400
++++ jhagewood/diff/diff/diff.c	2012-06-22 17:14:38.000000000 -0400
+@@ -1,4 +1,4 @@
+-/*-
++/*
+  * Copyright (c) 2003 Todd C. Miller <Todd.Miller@courtesan.com>
+  *
+  * Permission to use, copy, modify, and distribute this software for any
 @@ -18,15 +18,13 @@
   * Materiel Command, USAF, under agreement number F39502-99-1-0512.
   */
@@ -21,20 +27,27 @@
  
  #include <sys/param.h>
  #include <sys/stat.h>
-@@ -45,10 +43,10 @@ __FBSDID("$FreeBSD$");
+@@ -45,20 +43,20 @@ __FBSDID("$FreeBSD$");
  #include "diff.h"
  #include "pathnames.h"
  
 -int	 aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
-+int	 aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
- int	 sflag, tflag, Tflag, wflag;
- int	 Bflag, yflag;
+-int	 sflag, tflag, Tflag, wflag;
+-int	 Bflag, yflag;
 -int	 strip_cr, tabsize=8;
-+int	 strip_cr, tabsize = 8;
- char 	 ignore_file_case = 0;
- int	 format, context, status;
- char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
-@@ -58,7 +56,7 @@ regex_t	 ignore_re;
+-char 	 ignore_file_case = 0;
+-int	 format, context, status;
+-char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
++int	aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag;
++int	sflag, tflag, Tflag, wflag;
++int	Bflag, yflag;
++int strip_cr, suppress_cl, tabsize = 8;
++char ignore_file_case = 0;
++int	format, context, status;
++char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
+ struct stat stb1, stb2;
+ struct excludes *excludes_list;
+ regex_t	 ignore_re;
  
  int flag_opts = 0;
  
@@ -43,7 +56,7 @@
  
  
  /* Options which exceed manageable alphanumeric assignments */ 
-@@ -69,12 +67,11 @@ enum 
+@@ -69,75 +67,77 @@ enum
    OPT_STRIPCR,
    OPT_NORMAL,
    OPT_LEFTC,
@@ -57,7 +70,12 @@
    OPT_FFILE,
    OPT_TOFILE,
    OPT_HLINES,
-@@ -84,60 +81,57 @@ enum 
+   OPT_LFILES,
+   OPT_HELP,
++  OPT_NEW_LF,
++  OPT_OLD_LF,
++  OPT_UNCHGD_LF,
+ };
  
  
  static struct option longopts[] = {
@@ -126,8 +144,10 @@
 -	{ "unidirectional-new-file",	no_argument,		NULL,	'P' },
 -	{ "show-c-function",		no_argument,		NULL,	'p' },
 -	{ "brief",			no_argument,		NULL,	'q' },
++	{ "new-line-format",		required_argument,		NULL,	OPT_NEW_LF},
 +	{ "no-ignore-file-name-case",	no_argument,		NULL,	OPT_NIGN_FN_CASE },
 +	{ "normal",			no_argument,		NULL,	OPT_NORMAL },
++	{ "old-line-format",		required_argument,		NULL,	OPT_OLD_LF},
 +	{ "paginate",			no_argument,		NULL,	'l' },
  	{ "recursive",			no_argument,		NULL,	'r' },
 -	{ "starting-file",		required_argument,	NULL,	'S' },
@@ -146,6 +166,7 @@
 +	{ "tabsize",			optional_argument,	NULL,	OPT_TSIZE },
 +	{ "text",			no_argument,		NULL,	'a' },
 +	/*{ "to-file",			required_argument,	NULL,	OPT_TOFILE },*/
++	{ "unchanged-line-format",		required_argument,			NULL,	OPT_UNCHGD_LF},
 +	{ "unidirectional-new-file",	no_argument,		NULL,	'P' },
  	{ "unified",			optional_argument,	NULL,	'U' },
  	{ "version",			no_argument,		NULL,	'v' },
@@ -159,7 +180,7 @@
  	{ NULL,				0,			NULL,	'\0'}
  };
  
-@@ -162,10 +156,10 @@ void read_excludes_file(char *);
+@@ -162,10 +162,10 @@ void read_excludes_file(char *);
  int
  main(int argc, char **argv)
  {
@@ -174,7 +195,7 @@
  
  	oargv = argv;
  	oargc = argc;
-@@ -197,6 +191,7 @@ main(int argc, char **argv)
+@@ -197,6 +197,7 @@ main(int argc, char **argv)
  			break;
  		case 'C':
  		case 'c':
@@ -182,7 +203,7 @@
  			format = D_CONTEXT;
  			if (optarg != NULL) {
  				l = strtol(optarg, &ep, 10);
-@@ -213,6 +208,9 @@ main(int argc, char **argv)
+@@ -213,6 +214,9 @@ main(int argc, char **argv)
  		case 'd':
  			dflag = 1;
  			break;
@@ -192,19 +213,23 @@
  		case 'e':
  			format = D_EDIT;
  			break;
-@@ -296,15 +294,25 @@ main(int argc, char **argv)
+@@ -296,15 +300,29 @@ main(int argc, char **argv)
  		case 'y':
  			yflag = 1;
  			break;
++		case OPT_NEW_LF:
++		case OPT_OLD_LF:
++		case OPT_UNCHGD_LF:
 +		case OPT_LF:
 +			/* XXX To do: Complete --line-format. */
 +			format = D_IFDEF;
++			ifdefname = optarg;
 +			break;
 +		case OPT_NORMAL:
 +			format = D_NORMAL;
 +			break;
 +		case OPT_SUPCL:
-+			/* XXX To do: Complete --suppress-common-lines */
++			suppress_cl = 1;
 +			break;
  		case OPT_TSIZE:
 -                        if (optarg != NULL) {
@@ -226,7 +251,39 @@
  		case OPT_STRIPCR:
  			strip_cr=1;
  			break;
-@@ -402,11 +410,10 @@ main(int argc, char **argv)
+@@ -332,16 +350,15 @@ main(int argc, char **argv)
+ 	argc -= optind;
+ 	argv += optind;
+ 
+-	if(yflag) {
++	if (yflag) {
+ 		/* remove y flag from args and call sdiff */
+-		for(argv=oargv; argv && strcmp(*argv, "-y") != 0; argv++);
++		for (argv = oargv; argv && strcmp(*argv, "-y") != 0; argv++);
+ 		while(argv != &oargv[oargc]){
+-			*argv=*(argv+1);
++			*argv= *(argv+1);
+ 			argv++;
+ 		}
+ 		oargv[0] = _PATH_SDIFF;
+ 		*argv= "\0";
+-
+ 		execv(_PATH_SDIFF, oargv);
+ 		_exit(127);
+ 	}
+@@ -380,7 +397,10 @@ main(int argc, char **argv)
+ 	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");
++			if (ch == 'D') 
++				errx(2, "-D option not supported with directories");
++			if (ch == OPT_LF) 
++				errx(2, "--line-format option not supported with directories");
+ 		diffdir(argv[0], argv[1]);
+ 	} else {
+ 		if (S_ISDIR(stb1.st_mode)) {
+@@ -402,11 +422,10 @@ main(int argc, char **argv)
  void *
  emalloc(size_t n)
  {
@@ -239,7 +296,7 @@
  	if ((p = malloc(n)) == NULL)
  		errx(2, NULL);
  	return (p);
-@@ -415,7 +422,7 @@ emalloc(size_t n)
+@@ -415,7 +434,7 @@ emalloc(size_t n)
  void *
  erealloc(void *p, size_t n)
  {
@@ -248,7 +305,7 @@
  
  	if (n == 0)
  		errx(2, NULL);
-@@ -431,13 +438,12 @@ erealloc(void *p, size_t n)
+@@ -431,13 +450,12 @@ erealloc(void *p, size_t n)
  int
  easprintf(char **ret, const char *fmt, ...)
  {
@@ -264,7 +321,7 @@
  	if (len < 0 || *ret == NULL)
  		errx(2, NULL);
  	return (len);
-@@ -446,11 +452,12 @@ easprintf(char **ret, const char *fmt, .
+@@ -446,11 +464,12 @@ easprintf(char **ret, const char *fmt, .
  char *
  estrdup(const char *str)
  {
@@ -279,7 +336,7 @@
  	strlcpy(cp, str, len);
  	return (cp);
  }
-@@ -531,6 +538,7 @@ push_ignore_pats(char *pattern)
+@@ -531,6 +550,7 @@ push_ignore_pats(char *pattern)
  void
  print_only(const char *path, size_t dirlen, const char *entry)
  {
@@ -287,7 +344,7 @@
  	if (dirlen > 1)
  		dirlen--;
  	printf("Only in %.*s: %s\n", (int)dirlen, path, entry);
-@@ -539,45 +547,46 @@ print_only(const char *path, size_t dirl
+@@ -539,45 +559,46 @@ print_only(const char *path, size_t dirl
  void
  print_status(int val, char *path1, char *path2, char *entry)
  {
@@ -345,7 +402,7 @@
  		break;
  	}
  }
-@@ -585,6 +594,7 @@ print_status(int val, char *path1, char 
+@@ -585,6 +606,7 @@ print_status(int val, char *path1, char
  void
  usage(void)
  {
@@ -353,21 +410,9 @@
  	(void)fprintf(stderr,
  	    "usage: diff [-abdilpqTtw] [-I pattern] [-c | -e | -f | -n | -u]\n"
  	    "            [-L label] file1 file2\n"
-diff -rupN jhagewood/diff/diff-orig/diff.h jhagewood/diff/diff/diff.h
---- jhagewood/diff/diff-orig/diff.h	2012-06-18 03:07:38.000000000 -0400
-+++ jhagewood/diff/diff/diff.h	2012-06-18 03:07:38.000000000 -0400
-@@ -75,7 +75,7 @@ struct excludes {
- 	struct excludes	*next;
- };
- 
--extern int	 aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
-+extern int	 aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
- 		 sflag, tflag, Tflag, wflag;
- extern int	 Bflag, strip_cr, tabsize;
- extern int	 format, context, status;
 diff -rupN jhagewood/diff/diff-orig/diffdir.c jhagewood/diff/diff/diffdir.c
---- jhagewood/diff/diff-orig/diffdir.c	2012-06-18 03:07:38.000000000 -0400
-+++ jhagewood/diff/diff/diffdir.c	2012-06-20 05:43:28.000000000 -0400
+--- jhagewood/diff/diff-orig/diffdir.c	2012-06-17 23:07:38.000000000 -0400
++++ jhagewood/diff/diff/diffdir.c	2012-06-20 01:43:28.000000000 -0400
 @@ -20,14 +20,13 @@
  
  #include <sys/cdefs.h>
@@ -475,9 +520,24 @@
  
  	strlcpy(path1 + plen1, dp->d_name, MAXPATHLEN - plen1);
  	if (stat(path1, &stb1) != 0) {
+diff -rupN jhagewood/diff/diff-orig/diff.h jhagewood/diff/diff/diff.h
+--- jhagewood/diff/diff-orig/diff.h	2012-06-17 23:07:38.000000000 -0400
++++ jhagewood/diff/diff/diff.h	2012-06-22 14:44:50.000000000 -0400
+@@ -75,9 +75,9 @@ struct excludes {
+ 	struct excludes	*next;
+ };
+ 
+-extern int	 aflag, bflag, dflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
++extern int	 aflag, bflag, cflag, dflag, Eflag, iflag, lflag, Nflag, Pflag, pflag, rflag,
+ 		 sflag, tflag, Tflag, wflag;
+-extern int	 Bflag, strip_cr, tabsize;
++extern int	 Bflag, strip_cr, suppress_cl, tabsize;
+ extern int	 format, context, status;
+ extern char	 ignore_file_case;
+ extern char	*start, *ifdefname, *diffargs, *label[2], *ignore_pats;
 diff -rupN jhagewood/diff/diff-orig/diffreg.c jhagewood/diff/diff/diffreg.c
---- jhagewood/diff/diff-orig/diffreg.c	2012-06-18 03:07:38.000000000 -0400
-+++ jhagewood/diff/diff/diffreg.c	2012-06-19 05:18:57.000000000 -0400
+--- jhagewood/diff/diff-orig/diffreg.c	2012-06-17 23:07:38.000000000 -0400
++++ jhagewood/diff/diff/diffreg.c	2012-06-22 17:05:42.000000000 -0400
 @@ -62,15 +62,13 @@
   *	@(#)diffreg.c   8.1 (Berkeley) 6/6/93
   */
@@ -511,6 +571,15 @@
  /*
   * diff - compare two files.
   */
+@@ -196,7 +200,7 @@ static void	 change(char *, FILE *, char
+ static void	 sort(struct line *, int);
+ static void	 print_header(const char *, const char *);
+ static int	 ignoreline(char *);
+-static int	 asciifile(FILE *);
++static int	 istextfile(FILE *);
+ static int	 fetch(long *, int, int, FILE *, int, int);
+ static int	 newcand(int, int, int);
+ static int	 search(int *, int, int);
 @@ -294,13 +298,13 @@ u_char cup2low[256] = {
  int
  diffreg(char *ofile1, char *ofile2, int flags)
@@ -532,7 +601,7 @@
  
  	anychange = 0;
  	lastline = 0;
-@@ -353,7 +357,6 @@ diffreg(char *ofile1, char *ofile2, int 
+@@ -353,7 +357,6 @@ diffreg(char *ofile1, char *ofile2, int
  		status |= 2;
  		goto closem;
  	}
@@ -540,6 +609,15 @@
  	switch (files_differ(f1, f2, flags)) {
  	case 0:
  		goto closem;
+@@ -365,7 +368,7 @@ diffreg(char *ofile1, char *ofile2, int
+ 		goto closem;
+ 	}
+ 
+-	if (!asciifile(f1) || !asciifile(f2)) {
++	if (!istextfile(f1) || !istextfile(f2)) {
+ 		rval = D_BINARY;
+ 		status |= 1;
+ 		goto closem;
 @@ -477,8 +480,8 @@ closem:
  static int
  files_differ(FILE *f1, FILE *f2, int flags)
@@ -649,7 +727,7 @@
 -	int	 i, j, jackpot, c, d;
 -	long	 ctold, ctnew;
 -
-+	int	i, j, jackpot, c, d, int spacecount;
++	int	i, j, jackpot, c, d, spacecount;
 +	long ctold, ctnew;
 +	fpos_t position;
 +		
@@ -681,7 +759,7 @@
  				} else if (wflag) {
  					while (isspace(c) && c != '\n') {
  						c = getc(f1);
-@@ -801,31 +807,64 @@ check(char *file1, FILE *f1, char *file2
+@@ -801,31 +807,62 @@ check(char *file1, FILE *f1, char *file2
  						d = getc(f2);
  						ctnew++;
  					}
@@ -693,22 +771,26 @@
 +					if (c == '\n' && d != '\n') {
  						do {
  							if (c == '\n') {
- 							      ixold[i] = ctold; 
- 							      i++;
+-							      ixold[i] = ctold; 
+-							      i++;
++								ctold++; 
  							}
 -
- 						} while ((c = getc(f1)) == '\n' && i <= len[0]);
+-						} while ((c = getc(f1)) == '\n' && i <= len[0]);
++						} while ((c = getc(f1)) == '\n');
  					}
 -
 -					if( d == '\n' && c != '\n') {
 +					if (d == '\n' && c != '\n') {
  						do {
  							if (d == '\n') {
- 								ixnew[j] = ctnew;
- 								j++;
+-								ixnew[j] = ctnew;
+-								j++;
++								ctnew++;
  							}
- 						} while ((d = getc(f2)) == '\n' && j <= len[1]);
+-						} while ((d = getc(f2)) == '\n' && j <= len[1]);
 -		
++						} while ((d = getc(f2)) == '\n');
  					}
 -			
  					break;
@@ -721,13 +803,13 @@
 +							 * Checks if file1 has 8 consecutive spaces, which is 
 +							 * equal to 1 tab.
 +							 */
-+							getpos(f1, &position);
++							fgetpos(f1, &position);
 +							for (spacecount = 1; spacecount <= 8; spacecount++) {
 +								c = getc(f1);
 +								if (c != ' ')
 +									break;
 +							}
-+							setpos(f1, &position);
++							fsetpos(f1, &position);
 +							while (c == ' ' && spacecount == 9) {
 +								c = getc(f1);
 +								ctold++;
@@ -738,13 +820,13 @@
 +							 * Checks if file2 has 8 consecutive spaces, which is 
 +							 * equal to 1 tab.
 +							 */
-+							getpos(f2, &position);
++							fgetpos(f2, &position);
 +							for (spacecount = 1; spacecount <= 8; spacecount++) {
 +								d = getc(f2);
 +								if (d != ' ')
 +									break;
 +							}
-+							setpos(f2, &position);
++							fsetpos(f2, &position);
 +							while (d == ' ' && spacecount == 9) {
 +								d = getc(f2);
 +								ctnew++;
@@ -755,7 +837,7 @@
  				if (chrtran[c] != chrtran[d]) {
  					jackpot++;
  					J[i] = 0;
-@@ -872,7 +911,7 @@ static void
+@@ -872,7 +909,7 @@ static void
  sort(struct line *a, int n)
  {
  	struct line	*ai, *aim, w;
@@ -764,7 +846,7 @@
  
  	if (n == 0)
  		return;
-@@ -916,7 +955,7 @@ unsort(struct line *f, int l, int *b)
+@@ -916,7 +953,7 @@ unsort(struct line *f, int l, int *b)
  static int
  skipline(FILE *f)
  {
@@ -773,7 +855,7 @@
  
  	for (i = 1; (c = getc(f)) != '\n' && c != EOF; i++)
  		continue;
-@@ -926,7 +965,7 @@ skipline(FILE *f)
+@@ -926,7 +963,7 @@ skipline(FILE *f)
  static void
  output(char *file1, FILE *f1, char *file2, FILE *f2, int flags)
  {
@@ -782,7 +864,16 @@
  
  	rewind(f1);
  	rewind(f2);
-@@ -980,6 +1019,7 @@ output(char *file1, FILE *f1, char *file
+@@ -965,7 +1002,7 @@ output(char *file1, FILE *f1, char *file
+ #define	c i0
+ 			if ((c = getc(f1)) == EOF)
+ 				return;
+-			putchar(c);
++			printf("%c", c);
+ 		}
+ #undef c
+ 	}
+@@ -980,6 +1017,7 @@ output(char *file1, FILE *f1, char *file
  static void
  range(int a, int b, char *separator)
  {
@@ -790,7 +881,7 @@
  	printf("%d", a > b ? b : a);
  	if (a < b)
  		printf("%s%d", separator, b);
-@@ -988,6 +1028,7 @@ range(int a, int b, char *separator)
+@@ -988,6 +1026,7 @@ range(int a, int b, char *separator)
  static void
  uni_range(int a, int b)
  {
@@ -798,7 +889,7 @@
  	if (a < b)
  		printf("%d,%d", a, b - a + 1);
  	else if (a == b)
-@@ -999,8 +1040,8 @@ uni_range(int a, int b)
+@@ -999,8 +1038,8 @@ uni_range(int a, int b)
  static char *
  preadline(int fd, size_t len, off_t off)
  {
@@ -809,7 +900,7 @@
  
  	line = emalloc(len + 1);
  	if ((nr = pread(fd, line, len, off)) < 0)
-@@ -1014,7 +1055,7 @@ preadline(int fd, size_t len, off_t off)
+@@ -1014,7 +1053,7 @@ preadline(int fd, size_t len, off_t off)
  static int
  ignoreline(char *line)
  {
@@ -818,7 +909,7 @@
  
  	ret = regexec(&ignore_re, line, 0, NULL, 0);
  	free(line);
-@@ -1032,8 +1073,8 @@ static void
+@@ -1032,8 +1071,8 @@ static void
  change(char *file1, FILE *f1, char *file2, FILE *f2, int a, int b, int c, int d,
      int *pflags)
  {
@@ -829,7 +920,53 @@
  
  restart:
  	if (format != D_IFDEF && a > b && c > d)
-@@ -1165,8 +1206,8 @@ proceed:
+@@ -1113,15 +1152,15 @@ proceed:
+ 	case D_NORMAL:
+ 	case D_EDIT:
+ 		range(a, b, ",");
+-		putchar(a > b ? 'a' : c > d ? 'd' : 'c');
++		printf("%c", (a > b ? 'a' : c > d ? 'd' : 'c'));
+ 		if (format == D_NORMAL)
+ 			range(c, d, ",");
+-		putchar('\n');
++		printf("%c", '\n');
+ 		break;
+ 	case D_REVERSE:
+-		putchar(a > b ? 'a' : c > d ? 'd' : 'c');
++		printf("%c", (a > b ? 'a' : c > d ? 'd' : 'c'));
+ 		range(a, b, " ");
+-		putchar('\n');
++		printf("%c", '\n');
+ 		break;
+ 	case D_NREVERSE:
+ 		if (a > b)
+@@ -1137,7 +1176,7 @@ proceed:
+ 	if (format == D_NORMAL || format == D_IFDEF) {
+ 		fetch(ixold, a, b, f1, '<', 1);
+ 		if (a <= b && c <= d && format == D_NORMAL)
+-			puts("---");
++			printf("---");
+ 	}
+ 	i = fetch(ixnew, c, d, f2, format == D_NORMAL ? '>' : '\0', 0);
+ 	if (i != 0 && format == D_EDIT) {
+@@ -1148,14 +1187,14 @@ proceed:
+ 		 * it.  We have to add a substitute command to change this
+ 		 * back and restart where we left off.
+ 		 */
+-		puts(".");
++		printf(".");
+ 		printf("%ds/^\\.\\././\n", a);
+ 		a += i;
+ 		c += i;
+ 		goto restart;
+ 	}
+ 	if ((format == D_EDIT || format == D_REVERSE) && c <= d)
+-		puts(".");
++		printf(".");
+ 	if (inifdef) {
+ 		printf("#endif /* %s */\n", ifdefname);
+ 		inifdef = 0;
+@@ -1165,8 +1204,8 @@ proceed:
  static int
  fetch(long *f, int a, int b, FILE *lb, int ch, int oldfile)
  {
@@ -840,7 +977,61 @@
  
  	/*
  	 * When doing #ifdef's, copy down to current line
-@@ -1246,8 +1287,8 @@ fetch(long *f, int a, int b, FILE *lb, i
+@@ -1177,7 +1216,7 @@ fetch(long *f, int a, int b, FILE *lb, i
+ 		/* print through if append (a>b), else to (nb: 0 vs 1 orig) */
+ 		nc = f[a > b ? b : a - 1] - curpos;
+ 		for (i = 0; i < nc; i++)
+-			putchar(getc(lb));
++			printf("%c", getc(lb));
+ 	}
+ 	if (a > b)
+ 		return (0);
+@@ -1197,12 +1236,12 @@ fetch(long *f, int a, int b, FILE *lb, i
+ 		fseek(lb, f[i - 1], SEEK_SET);
+ 		nc = f[i] - f[i - 1];
+ 		if (format != D_IFDEF && ch != '\0') {
+-			putchar(ch);
++			printf("%c", ch);
+ 			if (Tflag && (format == D_NORMAL || format == D_CONTEXT
+ 			    || format == D_UNIFIED))
+-				putchar('\t');
++				printf("%c", '\t');
+ 			else if (format != D_UNIFIED)
+-				putchar(' ');
++				printf("%c", ' ');
+ 		}
+ 		col = 0;
+ 		for (j = 0, lastc = '\0'; j < nc; j++, lastc = c) {
+@@ -1211,13 +1250,13 @@ fetch(long *f, int a, int b, FILE *lb, i
+ 				    format == D_NREVERSE)
+ 					warnx("No newline at end of file");

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120622212920.7BB341065670>