strip_casl2_commentとstrip_end関数の返り値をvoidに
[YACASL2.git] / src / cmem.c
index e921bb0..b536895 100644 (file)
@@ -47,12 +47,27 @@ char *strndup_chk(const char *s, size_t len, const char *tag)
     return t;
 }
 
-char *strip_end(char *s)
+void strip_end(char *s)
 {
-    int i;
-    i = strlen(s) - 1;
-    while(i > 0 && (s[i] == '\n' || s[i] == ' ' || s[i] == '\t')) {
-        s[i--] = '\0';
+    for(int i = strlen(s) - 1; i > 0 && (s[i] == '\n' || s[i] == '\r' || s[i] == ' ' || s[i] == '\t'); i--) {
+        s[i] = '\0';
     }
-    return s;
+}
+
+void strip_casl2_comment(char *s)
+{
+    bool quoting = false;
+
+    for(int i = 0; s[i]; i++) {
+        /* 「'」で囲まれた文字列の場合。「''」は無視 */
+        if(s[i] == '\'' && s[i+1] != '\'' && (quoting == false || s[i-1] != '\'')) {
+            quoting = !quoting;
+        /* 「'」で囲まれた文字列でない場合、文字列末尾の「;」以降を削除 */
+        } else if(quoting == false && s[i] == ';') {
+            s[i] = '\0';
+            break;
+        }
+    }
+}
+
 }