Kaynağa Gözat

Quotes en back-slahses moeten ook speciaal behandeld worden in strings.

kaashoek 36 yıl önce
ebeveyn
işleme
a5b6ef2a18
1 değiştirilmiş dosya ile 23 ekleme ve 11 silme
  1. 23 11
      util/ceg/as_parser/conversion.c

+ 23 - 11
util/ceg/as_parser/conversion.c

@@ -6,18 +6,14 @@
 pr_text_with_conversions( str)
 char *str;
 {
-	char *s, *ptr, *next_conversion(), *pr_conversion();
+	char *ptr, *next_conversion(), *pr_conversion();
 
         while (  ptr = next_conversion( str)) {
 		/* ptr points to '%'-sign */
 	 	*ptr = '\0';
 
 		out( "fprint( outfile, \"");
-		for ( s = str; *s != '\0'; s++)
-			if ( *s == '\n')
-				out( "\\n");
-			else
-				out( "%c", *s);
+		out_string( str);
 		out( "\");");
 
 	 	*ptr = '%';
@@ -25,14 +21,30 @@ char *str;
 	}
 
 	out( "fprint( outfile, \"");
-	for ( s = str; *s != '\0'; s++)
-		if ( *s == '\n')
-			out( "\\n");
-		else
-			out( "%c", *s);
+	out_string( str);
 	out( "\");");
 }
 
+
+out_string( s)
+char *s;
+{
+	for ( ; *s != '\0'; s++)
+		switch ( *s) {
+		  case '"' : out( "\\\"");
+			     break;
+
+		  case '\\': out( "\\\\");
+			     break;
+
+		  case '\n': out( "\\n");
+			     break;
+
+		  default  : out( "%c", *s);
+		}
+}
+
+
 char *next_conversion( str)
 char *str;