From 4d0543138ebb30aad55ba8083ea362eafb0aac33 Mon Sep 17 00:00:00 2001
From: Erik Andersen <andersen@codepoet.org>
Date: Thu, 10 Feb 2000 07:31:15 +0000
Subject: More minor touchups.  -Erik

---
 Changelog        |   4 +
 editors/sed.c    | 250 ++++++++++++++++++++++++++++---------------------------
 find.c           |   8 +-
 findutils/find.c |   8 +-
 sed.c            | 250 ++++++++++++++++++++++++++++---------------------------
 5 files changed, 258 insertions(+), 262 deletions(-)

diff --git a/Changelog b/Changelog
index 42ec29618..f9ed33845 100644
--- a/Changelog
+++ b/Changelog
@@ -86,6 +86,10 @@
 	    - added "skip" and "seek" to dd.
 	* swapoff -a was not working.  Now it is.
 	* init did not cleanly unmount filesystems on reboot.  Now it does.
+	* "sed -ne s/foo/bar/" worked but "sed -n -e s/foo/bar/" didn't.
+	    Now both work.
+	* Some architectures (PowerPc) assume chars are unsigned, so they could
+	    not distinguish between EOF and '\0xFF' in sed.  Sed now uses ints.
 
 
 	-Erik Andersen
diff --git a/editors/sed.c b/editors/sed.c
index 3a7737e2f..608f86813 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -82,7 +82,7 @@ static inline int at_last(FILE * fp)
 	if (feof(fp))
 		return 1;
 	else {
-		char ch;
+		int ch;
 
 		if ((ch = fgetc(fp)) == EOF)
 			res++;
@@ -183,129 +183,131 @@ extern int sed_main(int argc, char **argv)
 		usage(sed_usage);
 	}
 
-	if (**argv == '-') {
-		argc--;
-		cp = *argv++;
-		stopNow = FALSE;
-
-		while (*++cp && stopNow == FALSE) {
-			switch (*cp) {
-			case 'n':
-				quietFlag = TRUE;
-				break;
-			case 'e':
-				if (*(cp + 1) == 0 && --argc < 0) {
-					usage(sed_usage);
-				}
-				if (*++cp != 's')
-					cp = *argv++;
-
-				/* Read address if present */
-				SKIPSPACES(cp);
-				if (*cp == '$') {
-					addr_line = LAST_LINE;
-					cp++;
-				} else {
-					if (isdigit(*cp)) {	/* LINE ADDRESS   */
-						line_s = cp;
-						while (isdigit(*cp))
-							cp++;
-						if (cp > line_s) {
-							/* numeric line */
-							saved = *cp;
-							*cp = '\0';
-							addr_line = atoi(line_s);
-							*cp = saved;
-						}
-					} else if (*cp == '/') {	/* PATTERN ADDRESS */
-						pos = addr_pattern = cp + 1;
-						pos = strchr(pos, '/');
-						if (!pos)
-							usage(sed_usage);
-						*pos = '\0';
-						cp = pos + 1;
-					}
-				}
-
-				SKIPSPACES(cp);
-				if (*cp == '!') {
-					negated++;
-					cp++;
-				}
-
-				/* Read command */
-
-				SKIPSPACES(cp);
-				switch (*cp) {
-				case 's':		/* REPLACE */
-					if (strlen(cp) <= 3 || *(cp + 1) != '/')
-						break;
-					sed_f = f_replace;
-
-					pos = needle = cp + 2;
-
-					for (;;) {
-						pos = strchr(pos, '/');
-						if (pos == NULL) {
-							usage(sed_usage);
-						}
-						if (*(pos - 1) == '\\') {
-							pos++;
-							continue;
-						}
-						break;
-					}
-					*pos = 0;
-					newNeedle = ++pos;
-					for (;;) {
-						pos = strchr(pos, '/');
-						if (pos == NULL) {
-							usage(sed_usage);
-						}
-						if (*(pos - 1) == '\\') {
-							pos++;
-							continue;
-						}
-						break;
-					}
-					*pos = 0;
-					if (pos + 2 != 0) {
-						while (*++pos) {
-							switch (*pos) {
-							case 'i':
-								ignoreCase = TRUE;
-								break;
-							case 'p':
-								printFlag = TRUE;
-								break;
-							case 'g':
-								break;
-							default:
-								usage(sed_usage);
-							}
-						}
-					}
-					cp = pos;
-					/* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
-					break;
-
-				case 'a':		/* APPEND */
-					if (strlen(cp) < 2)
-						break;
-					sed_f = f_append;
-					appendline = ++cp;
-					/* fprintf(stderr, "append '%s'\n", appendline); */
-					break;
-				}
-
-				stopNow = TRUE;
-				break;
-
-			default:
-				usage(sed_usage);
-			}
-		}
-	}
+	while (argc > 1) {
+	    if (**argv == '-') {
+		    argc--;
+  		    cp = *argv++;
+		    stopNow = FALSE;
+
+		    while (*++cp && stopNow == FALSE) {
+			    switch (*cp) {
+			    case 'n':
+				    quietFlag = TRUE;
+				    break;
+    			case 'e':
+    				if (*(cp + 1) == 0 && --argc < 0) {
+    					usage(sed_usage);
+    				}
+    				if (*++cp != 's')
+    					cp = *argv++;
+    
+    				/* Read address if present */
+    				SKIPSPACES(cp);
+    				if (*cp == '$') {
+    					addr_line = LAST_LINE;
+    					cp++;
+    				} else {
+    					if (isdigit(*cp)) {	/* LINE ADDRESS   */
+    						line_s = cp;
+    						while (isdigit(*cp))
+    							cp++;
+    						if (cp > line_s) {
+    							/* numeric line */
+    							saved = *cp;
+    							*cp = '\0';
+    							addr_line = atoi(line_s);
+    							*cp = saved;
+    						}
+    					} else if (*cp == '/') {	/* PATTERN ADDRESS */
+    						pos = addr_pattern = cp + 1;
+    						pos = strchr(pos, '/');
+    						if (!pos)
+    							usage(sed_usage);
+    						*pos = '\0';
+    						cp = pos + 1;
+    					}
+    				}
+    
+    				SKIPSPACES(cp);
+    				if (*cp == '!') {
+    					negated++;
+    					cp++;
+    				}
+    
+    				/* Read command */
+    
+    				SKIPSPACES(cp);
+    				switch (*cp) {
+    				case 's':		/* REPLACE */
+    					if (strlen(cp) <= 3 || *(cp + 1) != '/')
+    						break;
+    					sed_f = f_replace;
+    
+    					pos = needle = cp + 2;
+    
+    					for (;;) {
+    						pos = strchr(pos, '/');
+    						if (pos == NULL) {
+    							usage(sed_usage);
+    						}
+    						if (*(pos - 1) == '\\') {
+    							pos++;
+    							continue;
+    						}
+    						break;
+    					}
+    					*pos = 0;
+    					newNeedle = ++pos;
+    					for (;;) {
+    						pos = strchr(pos, '/');
+    						if (pos == NULL) {
+    							usage(sed_usage);
+    						}
+    						if (*(pos - 1) == '\\') {
+    							pos++;
+    							continue;
+    						}
+    						break;
+    					}
+    					*pos = 0;
+    					if (pos + 2 != 0) {
+    						while (*++pos) {
+    							switch (*pos) {
+    							case 'i':
+    								ignoreCase = TRUE;
+    								break;
+    							case 'p':
+    								printFlag = TRUE;
+    								break;
+    							case 'g':
+    								break;
+    							default:
+    								usage(sed_usage);
+    							}
+    						}
+    					}
+    					cp = pos;
+    					/* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
+    					break;
+    
+    				case 'a':		/* APPEND */
+    					if (strlen(cp) < 2)
+    						break;
+    					sed_f = f_append;
+    					appendline = ++cp;
+    					/* fprintf(stderr, "append '%s'\n", appendline); */
+    					break;
+    				}
+    
+    				stopNow = TRUE;
+    				break;
+    
+    			default:
+    				usage(sed_usage);
+    			}
+    		}
+    	}
+    }
 
 	if (argc == 0) {
 		switch (sed_f) {
diff --git a/find.c b/find.c
index 6346d454f..2c1039b53 100644
--- a/find.c
+++ b/find.c
@@ -39,13 +39,7 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
 	"\nEXPRESSION may consist of:\n"
 	"\t-follow\n\t\tDereference symbolic links.\n"
 	"\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n"
-	"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n\n"
-#if defined BB_REGEXP
-	"This version of find matches full regular expresions.\n";
-#else
-	"This version of find matches strings (not regular expresions).\n";
-#endif
-
+	"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n";
 
 
 static int fileAction(const char *fileName, struct stat *statbuf)
diff --git a/findutils/find.c b/findutils/find.c
index 6346d454f..2c1039b53 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -39,13 +39,7 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
 	"\nEXPRESSION may consist of:\n"
 	"\t-follow\n\t\tDereference symbolic links.\n"
 	"\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n"
-	"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n\n"
-#if defined BB_REGEXP
-	"This version of find matches full regular expresions.\n";
-#else
-	"This version of find matches strings (not regular expresions).\n";
-#endif
-
+	"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n";
 
 
 static int fileAction(const char *fileName, struct stat *statbuf)
diff --git a/sed.c b/sed.c
index 3a7737e2f..608f86813 100644
--- a/sed.c
+++ b/sed.c
@@ -82,7 +82,7 @@ static inline int at_last(FILE * fp)
 	if (feof(fp))
 		return 1;
 	else {
-		char ch;
+		int ch;
 
 		if ((ch = fgetc(fp)) == EOF)
 			res++;
@@ -183,129 +183,131 @@ extern int sed_main(int argc, char **argv)
 		usage(sed_usage);
 	}
 
-	if (**argv == '-') {
-		argc--;
-		cp = *argv++;
-		stopNow = FALSE;
-
-		while (*++cp && stopNow == FALSE) {
-			switch (*cp) {
-			case 'n':
-				quietFlag = TRUE;
-				break;
-			case 'e':
-				if (*(cp + 1) == 0 && --argc < 0) {
-					usage(sed_usage);
-				}
-				if (*++cp != 's')
-					cp = *argv++;
-
-				/* Read address if present */
-				SKIPSPACES(cp);
-				if (*cp == '$') {
-					addr_line = LAST_LINE;
-					cp++;
-				} else {
-					if (isdigit(*cp)) {	/* LINE ADDRESS   */
-						line_s = cp;
-						while (isdigit(*cp))
-							cp++;
-						if (cp > line_s) {
-							/* numeric line */
-							saved = *cp;
-							*cp = '\0';
-							addr_line = atoi(line_s);
-							*cp = saved;
-						}
-					} else if (*cp == '/') {	/* PATTERN ADDRESS */
-						pos = addr_pattern = cp + 1;
-						pos = strchr(pos, '/');
-						if (!pos)
-							usage(sed_usage);
-						*pos = '\0';
-						cp = pos + 1;
-					}
-				}
-
-				SKIPSPACES(cp);
-				if (*cp == '!') {
-					negated++;
-					cp++;
-				}
-
-				/* Read command */
-
-				SKIPSPACES(cp);
-				switch (*cp) {
-				case 's':		/* REPLACE */
-					if (strlen(cp) <= 3 || *(cp + 1) != '/')
-						break;
-					sed_f = f_replace;
-
-					pos = needle = cp + 2;
-
-					for (;;) {
-						pos = strchr(pos, '/');
-						if (pos == NULL) {
-							usage(sed_usage);
-						}
-						if (*(pos - 1) == '\\') {
-							pos++;
-							continue;
-						}
-						break;
-					}
-					*pos = 0;
-					newNeedle = ++pos;
-					for (;;) {
-						pos = strchr(pos, '/');
-						if (pos == NULL) {
-							usage(sed_usage);
-						}
-						if (*(pos - 1) == '\\') {
-							pos++;
-							continue;
-						}
-						break;
-					}
-					*pos = 0;
-					if (pos + 2 != 0) {
-						while (*++pos) {
-							switch (*pos) {
-							case 'i':
-								ignoreCase = TRUE;
-								break;
-							case 'p':
-								printFlag = TRUE;
-								break;
-							case 'g':
-								break;
-							default:
-								usage(sed_usage);
-							}
-						}
-					}
-					cp = pos;
-					/* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
-					break;
-
-				case 'a':		/* APPEND */
-					if (strlen(cp) < 2)
-						break;
-					sed_f = f_append;
-					appendline = ++cp;
-					/* fprintf(stderr, "append '%s'\n", appendline); */
-					break;
-				}
-
-				stopNow = TRUE;
-				break;
-
-			default:
-				usage(sed_usage);
-			}
-		}
-	}
+	while (argc > 1) {
+	    if (**argv == '-') {
+		    argc--;
+  		    cp = *argv++;
+		    stopNow = FALSE;
+
+		    while (*++cp && stopNow == FALSE) {
+			    switch (*cp) {
+			    case 'n':
+				    quietFlag = TRUE;
+				    break;
+    			case 'e':
+    				if (*(cp + 1) == 0 && --argc < 0) {
+    					usage(sed_usage);
+    				}
+    				if (*++cp != 's')
+    					cp = *argv++;
+    
+    				/* Read address if present */
+    				SKIPSPACES(cp);
+    				if (*cp == '$') {
+    					addr_line = LAST_LINE;
+    					cp++;
+    				} else {
+    					if (isdigit(*cp)) {	/* LINE ADDRESS   */
+    						line_s = cp;
+    						while (isdigit(*cp))
+    							cp++;
+    						if (cp > line_s) {
+    							/* numeric line */
+    							saved = *cp;
+    							*cp = '\0';
+    							addr_line = atoi(line_s);
+    							*cp = saved;
+    						}
+    					} else if (*cp == '/') {	/* PATTERN ADDRESS */
+    						pos = addr_pattern = cp + 1;
+    						pos = strchr(pos, '/');
+    						if (!pos)
+    							usage(sed_usage);
+    						*pos = '\0';
+    						cp = pos + 1;
+    					}
+    				}
+    
+    				SKIPSPACES(cp);
+    				if (*cp == '!') {
+    					negated++;
+    					cp++;
+    				}
+    
+    				/* Read command */
+    
+    				SKIPSPACES(cp);
+    				switch (*cp) {
+    				case 's':		/* REPLACE */
+    					if (strlen(cp) <= 3 || *(cp + 1) != '/')
+    						break;
+    					sed_f = f_replace;
+    
+    					pos = needle = cp + 2;
+    
+    					for (;;) {
+    						pos = strchr(pos, '/');
+    						if (pos == NULL) {
+    							usage(sed_usage);
+    						}
+    						if (*(pos - 1) == '\\') {
+    							pos++;
+    							continue;
+    						}
+    						break;
+    					}
+    					*pos = 0;
+    					newNeedle = ++pos;
+    					for (;;) {
+    						pos = strchr(pos, '/');
+    						if (pos == NULL) {
+    							usage(sed_usage);
+    						}
+    						if (*(pos - 1) == '\\') {
+    							pos++;
+    							continue;
+    						}
+    						break;
+    					}
+    					*pos = 0;
+    					if (pos + 2 != 0) {
+    						while (*++pos) {
+    							switch (*pos) {
+    							case 'i':
+    								ignoreCase = TRUE;
+    								break;
+    							case 'p':
+    								printFlag = TRUE;
+    								break;
+    							case 'g':
+    								break;
+    							default:
+    								usage(sed_usage);
+    							}
+    						}
+    					}
+    					cp = pos;
+    					/* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
+    					break;
+    
+    				case 'a':		/* APPEND */
+    					if (strlen(cp) < 2)
+    						break;
+    					sed_f = f_append;
+    					appendline = ++cp;
+    					/* fprintf(stderr, "append '%s'\n", appendline); */
+    					break;
+    				}
+    
+    				stopNow = TRUE;
+    				break;
+    
+    			default:
+    				usage(sed_usage);
+    			}
+    		}
+    	}
+    }
 
 	if (argc == 0) {
 		switch (sed_f) {
-- 
cgit v1.2.3