Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jun 2012 03:40:20 +0000
From:      jhagewood@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r238367 - in soc2012/jhagewood/diff: . diff
Message-ID:  <20120627034020.6545B106564A@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhagewood
Date: Wed Jun 27 03:40:19 2012
New Revision: 238367
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238367

Log:

Modified:
  soc2012/jhagewood/diff/diff/diff.c
  soc2012/jhagewood/diff/hagewood-diff.patch

Modified: soc2012/jhagewood/diff/diff/diff.c
==============================================================================
--- soc2012/jhagewood/diff/diff/diff.c	Wed Jun 27 03:16:36 2012	(r238366)
+++ soc2012/jhagewood/diff/diff/diff.c	Wed Jun 27 03:40:19 2012	(r238367)
@@ -166,7 +166,8 @@
 	long l;
 	int ch, lastch, gotstdin, prevoptind, newarg;
 	int oargc;
-
+	pid_t childpid;
+	
 	oargv = argv;
 	oargc = argc;
 	gotstdin = 0;
@@ -366,22 +367,37 @@
 	argc -= optind;
 	argv += optind;
 	
-	/* XXX to do- pass arguements */
+	/* 
+	 * Execute --to-file or --from-file by forking and executing diff
+	 * with new input files.
+	 * XXX to do- pass arguements 
+	 */
 	if (Toflag || Fromflag) {
 		if (Toflag && Fromflag) {
 			(void)fprintf(stderr, "--from-file and --to-file both specified.\n");
 			exit(2);
 		}
-		if (Toflag) {
-			execl(_PATH_DIFF, _PATH_DIFF, file1, file3);
-			execl(_PATH_DIFF, _PATH_DIFF, file2, file3);
+		childpid = fork();
+		switch(childpid)
+		if (childpid == 0) {
+			if (Toflag)
+				execl(_PATH_DIFF, _PATH_DIFF, file1, file3);
+			if (Fromflag)
+				execl(_PATH_DIFF, _PATH_DIFF, file3, file1);
 			exit(127);
 		}
-		if (Fromflag) {
-			execl(_PATH_DIFF, _PATH_DIFF, file3, file1);
-			execl(_PATH_DIFF, _PATH_DIFF, file3, file2);
-			exit(127);			
-		}
+		if (childpid > 0) {
+			childpid = fork();
+			if (childpid == 0) {
+				if (Toflag)
+					execl(_PATH_DIFF, _PATH_DIFF, file2, file3);
+				if (Fromflag)
+					execl(_PATH_DIFF, _PATH_DIFF, file3, file2);
+				exit(127);
+			}
+			if (childpid > 0)
+				exit(0);
+		}	
 	}
 	if (yflag) {
 		/* remove y flag from args and call sdiff */

Modified: soc2012/jhagewood/diff/hagewood-diff.patch
==============================================================================
--- soc2012/jhagewood/diff/hagewood-diff.patch	Wed Jun 27 03:16:36 2012	(r238366)
+++ soc2012/jhagewood/diff/hagewood-diff.patch	Wed Jun 27 03:40:19 2012	(r238367)
@@ -1,6 +1,6 @@
 diff -rupN jhagewood/diff/diff-orig/diff.c jhagewood/diff/diff/diff.c
 --- jhagewood/diff/diff-orig/diff.c	2012-06-25 16:05:53.000000000 -0400
-+++ jhagewood/diff/diff/diff.c	2012-06-27 03:16:17.000000000 -0400
++++ jhagewood/diff/diff/diff.c	2012-06-27 03:39:50.000000000 -0400
 @@ -1,4 +1,4 @@
 -/*-
 +/*
@@ -180,7 +180,7 @@
  	{ NULL,				0,			NULL,	'\0'}
  };
  
-@@ -162,10 +162,10 @@ void read_excludes_file(char *);
+@@ -162,11 +162,12 @@ void read_excludes_file(char *);
  int
  main(int argc, char **argv)
  {
@@ -188,14 +188,17 @@
 -	long	 l;
 -	int	 ch, lastch, gotstdin, prevoptind, newarg;
 -	int	 oargc;
+-
 +	char *ep, **oargv, *file1, *file2, *file3;
 +	long l;
 +	int ch, lastch, gotstdin, prevoptind, newarg;
 +	int oargc;
- 
++	pid_t childpid;
++	
  	oargv = argv;
  	oargc = argc;
-@@ -197,6 +197,7 @@ main(int argc, char **argv)
+ 	gotstdin = 0;
+@@ -197,6 +198,7 @@ main(int argc, char **argv)
  			break;
  		case 'C':
  		case 'c':
@@ -203,7 +206,7 @@
  			format = D_CONTEXT;
  			if (optarg != NULL) {
  				l = strtol(optarg, &ep, 10);
-@@ -213,6 +214,9 @@ main(int argc, char **argv)
+@@ -213,6 +215,9 @@ main(int argc, char **argv)
  		case 'd':
  			dflag = 1;
  			break;
@@ -213,7 +216,7 @@
  		case 'e':
  			format = D_EDIT;
  			break;
-@@ -296,15 +300,44 @@ main(int argc, char **argv)
+@@ -296,15 +301,44 @@ main(int argc, char **argv)
  		case 'y':
  			yflag = 1;
  			break;
@@ -266,7 +269,7 @@
  		case OPT_STRIPCR:
  			strip_cr=1;
  			break;
-@@ -328,20 +361,37 @@ main(int argc, char **argv)
+@@ -328,20 +362,52 @@ main(int argc, char **argv)
  		lastch = ch;
  		newarg = optind != prevoptind;
  		prevoptind = optind;
@@ -277,22 +280,37 @@
 -
 -	if(yflag) {
 +	
-+	/* XXX to do- pass arguements */
++	/* 
++	 * Execute --to-file or --from-file by forking and executing diff
++	 * with new input files.
++	 * XXX to do- pass arguements 
++	 */
 +	if (Toflag || Fromflag) {
 +		if (Toflag && Fromflag) {
 +			(void)fprintf(stderr, "--from-file and --to-file both specified.\n");
 +			exit(2);
 +		}
-+		if (Toflag) {
-+			execl(_PATH_DIFF, _PATH_DIFF, file1, file3);
-+			execl(_PATH_DIFF, _PATH_DIFF, file2, file3);
++		childpid = fork();
++		switch(childpid)
++		if (childpid == 0) {
++			if (Toflag)
++				execl(_PATH_DIFF, _PATH_DIFF, file1, file3);
++			if (Fromflag)
++				execl(_PATH_DIFF, _PATH_DIFF, file3, file1);
 +			exit(127);
 +		}
-+		if (Fromflag) {
-+			execl(_PATH_DIFF, _PATH_DIFF, file3, file1);
-+			execl(_PATH_DIFF, _PATH_DIFF, file3, file2);
-+			exit(127);			
-+		}
++		if (childpid > 0) {
++			childpid = fork();
++			if (childpid == 0) {
++				if (Toflag)
++					execl(_PATH_DIFF, _PATH_DIFF, file2, file3);
++				if (Fromflag)
++					execl(_PATH_DIFF, _PATH_DIFF, file3, file2);
++				exit(127);
++			}
++			if (childpid > 0)
++				exit(0);
++		}	
 +	}
 +	if (yflag) {
  		/* remove y flag from args and call sdiff */
@@ -309,7 +327,7 @@
  		execv(_PATH_SDIFF, oargv);
  		_exit(127);
  	}
-@@ -380,7 +430,10 @@ main(int argc, char **argv)
+@@ -380,7 +446,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)
@@ -321,7 +339,7 @@
  		diffdir(argv[0], argv[1]);
  	} else {
  		if (S_ISDIR(stb1.st_mode)) {
-@@ -402,11 +455,10 @@ main(int argc, char **argv)
+@@ -402,11 +471,10 @@ main(int argc, char **argv)
  void *
  emalloc(size_t n)
  {
@@ -334,7 +352,7 @@
  	if ((p = malloc(n)) == NULL)
  		errx(2, NULL);
  	return (p);
-@@ -415,7 +467,7 @@ emalloc(size_t n)
+@@ -415,7 +483,7 @@ emalloc(size_t n)
  void *
  erealloc(void *p, size_t n)
  {
@@ -343,7 +361,7 @@
  
  	if (n == 0)
  		errx(2, NULL);
-@@ -431,13 +483,12 @@ erealloc(void *p, size_t n)
+@@ -431,13 +499,12 @@ erealloc(void *p, size_t n)
  int
  easprintf(char **ret, const char *fmt, ...)
  {
@@ -359,7 +377,7 @@
  	if (len < 0 || *ret == NULL)
  		errx(2, NULL);
  	return (len);
-@@ -446,11 +497,12 @@ easprintf(char **ret, const char *fmt, .
+@@ -446,11 +513,12 @@ easprintf(char **ret, const char *fmt, .
  char *
  estrdup(const char *str)
  {
@@ -374,7 +392,7 @@
  	strlcpy(cp, str, len);
  	return (cp);
  }
-@@ -531,6 +583,7 @@ push_ignore_pats(char *pattern)
+@@ -531,6 +599,7 @@ push_ignore_pats(char *pattern)
  void
  print_only(const char *path, size_t dirlen, const char *entry)
  {
@@ -382,7 +400,7 @@
  	if (dirlen > 1)
  		dirlen--;
  	printf("Only in %.*s: %s\n", (int)dirlen, path, entry);
-@@ -539,45 +592,46 @@ print_only(const char *path, size_t dirl
+@@ -539,45 +608,46 @@ print_only(const char *path, size_t dirl
  void
  print_status(int val, char *path1, char *path2, char *entry)
  {
@@ -440,7 +458,7 @@
  		break;
  	}
  }
-@@ -585,6 +639,7 @@ print_status(int val, char *path1, char 
+@@ -585,6 +655,7 @@ print_status(int val, char *path1, char 
  void
  usage(void)
  {



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