Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 05 Jun 2012 07:53:22 +0000
From:      jhagewood@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r237117 - in soc2012/jhagewood/diff3: . diff3
Message-ID:  <20120605075322.DFDBD106566C@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhagewood
Date: Tue Jun  5 07:53:22 2012
New Revision: 237117
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237117

Log:

Modified:
  soc2012/jhagewood/diff3/diff3/diff3prog.c
  soc2012/jhagewood/diff3/hagewood-diff3.patch

Modified: soc2012/jhagewood/diff3/diff3/diff3prog.c
==============================================================================
--- soc2012/jhagewood/diff3/diff3/diff3prog.c	Tue Jun  5 06:43:45 2012	(r237116)
+++ soc2012/jhagewood/diff3/diff3/diff3prog.c	Tue Jun  5 07:53:22 2012	(r237117)
@@ -152,6 +152,7 @@
 void repos(int);
 void separate(const char *);
 __dead void edscript(int);
+void remove_cr(FILE *);
 __dead void trouble(void);
 void increase(void);
 __dead void try_help(void);
@@ -173,13 +174,13 @@
 	{ "text",		no_argument,		NULL,	'a' },
 	{ "version",		no_argument,		NULL,	'v' },
 	{ "help",		no_argument,		NULL,	HELP_OPT },	
-	
+	{ "strip-trailing-cr",	no_argument,		NULL,	STRIPCR_OPT },
+		
 	/* features to implement */
 	{ "show-all",		no_argument,		NULL,	'A' },
 	{ "easy-only", 		no_argument,		NULL,	'3' },
 	{ "merge",		no_argument,		NULL,	'm' },
 	{ "label",		required_argument,	NULL,	'L' },
-	{ "strip-trailing-cr",	no_argument,		NULL,	STRIPCR_OPT },
 	{ "diff-program",	required_argument,	NULL,	DIFFPROG_OPT },
 
 
@@ -270,6 +271,8 @@
 	for (i = 0; i <= 2; i++) {
 		if ((fp[i] = fopen(argv[i + 2], "r")) == NULL)
 			err(EXIT_FAILURE, "can't open %s", argv[i + 2]);
+		if (strip_cr)
+			remove_cr(fp[i]);
 	}
 	merge(m, n);
 	exit(EXIT_SUCCESS);
@@ -622,6 +625,26 @@
 		(void)fseek(fp[i], (long)-nchar, SEEK_CUR);
 }
 
+/* Removes carriage return from open file. 
+ * TODO: Remove trailing cr only.
+ */
+void
+remove_cr(FILE *f) {
+	
+	char ch; 
+	fpos_t position;
+	
+	while ( ch != EOF) {
+		fgetpos(f, &position);
+		ch = fgetc(f);
+		if (ch == '\r') {
+			fsetpos(f, &position);
+			fputc((int)'\0', f);
+		}
+	}
+	rewind(f);
+}
+
 __dead void
 trouble(void)
 {

Modified: soc2012/jhagewood/diff3/hagewood-diff3.patch
==============================================================================
--- soc2012/jhagewood/diff3/hagewood-diff3.patch	Tue Jun  5 06:43:45 2012	(r237116)
+++ soc2012/jhagewood/diff3/hagewood-diff3.patch	Tue Jun  5 07:53:22 2012	(r237117)
@@ -11,7 +11,7 @@
  .include <bsd.prog.mk>
 diff -rupN jhagewood/diff3/diff3-orig/diff3prog.c jhagewood/diff3/diff3/diff3prog.c
 --- jhagewood/diff3/diff3-orig/diff3prog.c	2012-06-04 23:30:11.000000000 -0400
-+++ jhagewood/diff3/diff3/diff3prog.c	2012-06-05 01:17:18.000000000 -0400
++++ jhagewood/diff3/diff3/diff3prog.c	2012-06-05 07:53:14.000000000 -0400
 @@ -82,6 +82,9 @@
  
  /* diff3 - 3-way differential file comparison */
@@ -22,8 +22,11 @@
  /* diff3 [-ex3EX] d13 d23 f1 f2 f3 [m1 m3]
   *
   * d13 = diff report on f1 vs f3
-@@ -151,22 +154,26 @@ void separate(const char *);
+@@ -149,33 +152,38 @@ void prange(struct range *);
+ void repos(int);
+ void separate(const char *);
  __dead void edscript(int);
++void remove_cr(FILE *);
  __dead void trouble(void);
  void increase(void);
 -__dead void usage(void);
@@ -50,13 +53,14 @@
 -
 +	{ "version",		no_argument,		NULL,	'v' },
 +	{ "help",		no_argument,		NULL,	HELP_OPT },	
-+	
++	{ "strip-trailing-cr",	no_argument,		NULL,	STRIPCR_OPT },
++		
  	/* features to implement */
  	{ "show-all",		no_argument,		NULL,	'A' },
  	{ "easy-only", 		no_argument,		NULL,	'3' },
-@@ -174,8 +181,8 @@ static struct option longopts[] = {
+ 	{ "merge",		no_argument,		NULL,	'm' },
  	{ "label",		required_argument,	NULL,	'L' },
- 	{ "strip-trailing-cr",	no_argument,		NULL,	STRIPCR_OPT },
+-	{ "strip-trailing-cr",	no_argument,		NULL,	STRIPCR_OPT },
  	{ "diff-program",	required_argument,	NULL,	DIFFPROG_OPT },
 -	{ "version",		no_argument,		NULL,	'v' },
 -	{ "help",		no_argument,		NULL,	HELP_OPT }
@@ -65,7 +69,7 @@
  };
  
  
-@@ -216,12 +223,19 @@ main(int argc, char **argv)
+@@ -216,12 +224,19 @@ main(int argc, char **argv)
  		case 'X':
  			oflag = eflag = 1;
  			break;
@@ -85,7 +89,7 @@
  		case STRIPCR_OPT:
  			strip_cr = 1;
  			break;
-@@ -233,8 +247,10 @@ main(int argc, char **argv)
+@@ -233,8 +248,10 @@ main(int argc, char **argv)
  	argc -= optind;
  	argv += optind;
  	/* XXX - argc usage seems wrong here */
@@ -97,7 +101,43 @@
  
  	if (oflag) {
  		(void)snprintf(f1mark, sizeof(f1mark), "<<<<<<< %s",
-@@ -699,12 +715,38 @@ increase(void)
+@@ -254,6 +271,8 @@ main(int argc, char **argv)
+ 	for (i = 0; i <= 2; i++) {
+ 		if ((fp[i] = fopen(argv[i + 2], "r")) == NULL)
+ 			err(EXIT_FAILURE, "can't open %s", argv[i + 2]);
++		if (strip_cr)
++			remove_cr(fp[i]);
+ 	}
+ 	merge(m, n);
+ 	exit(EXIT_SUCCESS);
+@@ -606,6 +625,26 @@ repos(int nchar)
+ 		(void)fseek(fp[i], (long)-nchar, SEEK_CUR);
+ }
+ 
++/* Removes carriage return from open file. 
++ * TODO: Remove trailing cr only.
++ */
++void
++remove_cr(FILE *f) {
++	
++	char ch; 
++	fpos_t position;
++	
++	while ( ch != EOF) {
++		fgetpos(f, &position);
++		ch = fgetc(f);
++		if (ch == '\r') {
++			fsetpos(f, &position);
++			fputc((int)'\0', f);
++		}
++	}
++	rewind(f);
++}
++
+ __dead void
+ trouble(void)
+ {
+@@ -699,12 +738,38 @@ increase(void)
  }
  
  



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