Browse Source

fixed two little bugs

eck 34 years ago
parent
commit
f614fc6dc3
2 changed files with 16 additions and 5 deletions
  1. 12 1
      lang/cem/cpp.ansi/domacro.c
  2. 4 4
      lang/cem/cpp.ansi/preprocess.c

+ 12 - 1
lang/cem/cpp.ansi/domacro.c

@@ -203,9 +203,20 @@ int to_endif;
 			on the same level.
 		*/
 		id = findidf(tk.tk_str);
+		if (id == (struct idf *)0) {
+			/* invalid word seen after the '#' */
+			error("%s: unknown control", tk.tk_str);
+		}
 		free(tk.tk_str);
+		if (id == (struct idf *)0) continue;
 		switch(id->id_resmac) {
-		default:
+		case K_DEFINE:
+		case K_ERROR:
+		case K_INCLUDE:
+		case K_LINE:
+		case K_PRAGMA:
+		case K_UNDEF:
+		case K_FILE:
 			SkipToNewLine();
 			break;
 		case K_IF:

+ 4 - 4
lang/cem/cpp.ansi/preprocess.c

@@ -215,10 +215,10 @@ preprocess(fn)
 			case STCHAR:
 				{
 				register int stopc = c;
-				int escaped = 0;
+				int escaped;
 
 				do {
-
+					escaped = 0;
 					echo(c);
 					c = GetChar();
 					if (c == '\n') {
@@ -230,14 +230,14 @@ preprocess(fn)
 						flush((int)(op-_obuf));
 						return;
 					}
-					if (!escaped && c == '\\') {
+					if (c == '\\') {
 						echo(c);
 						c = GetChar();
 						if (c == '\n') {
 							++LineNumber;
 							lineno++;
 						} else escaped = 1;
-					} else escaped = 0;
+					}
 				} while (escaped || c != stopc);
 				echo(c);
 				if (c == '\n')