X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fliboconfig%2Fscanner.l;fp=src%2Fliboconfig%2Fscanner.l;h=b559e863179ebfebaf1acc4219baa24522897e5d;hb=d634bc3af4ba34359a71771aa83b3bc43ad368ff;hp=0f146ca488dd23faece3cf7968e4a7ba5bca8a61;hpb=56322d3b2ef2502ec52bf3633c6e808b2299b805;p=collectd.git diff --git a/src/liboconfig/scanner.l b/src/liboconfig/scanner.l index 0f146ca4..b559e863 100644 --- a/src/liboconfig/scanner.l +++ b/src/liboconfig/scanner.l @@ -44,6 +44,7 @@ static void ml_append (char *); %x ML WHITE_SPACE [\ \t\b] NON_WHITE_SPACE [^\ \t\b] +EOL (\r\n|\n) QUOTED_STRING ([^\\"]+|\\.)* UNQUOTED_STRING [0-9A-Za-z_]+ HEX_NUMBER 0[xX][0-9a-fA-F]+ @@ -62,9 +63,9 @@ IPV4_ADDR {IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}(:{PORT})? {WHITE_SPACE} | {COMMENT} {/* ignore */} -\\\n {/* continue line */} +\\{EOL} {/* continue line */} -\n {return (EOL);} +{EOL} {return (EOL);} "/" {return (SLASH);} "<" {return (OPENBRAC);} ">" {return (CLOSEBRAC);} @@ -78,19 +79,31 @@ IPV4_ADDR {IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}\.{IP_BYTE}(:{PORT})? \"{QUOTED_STRING}\" {yylval.string = yytext; return (QUOTED_STRING);} {UNQUOTED_STRING} {yylval.string = yytext; return (UNQUOTED_STRING);} -\"{QUOTED_STRING}\\\n { +\"{QUOTED_STRING}\\{EOL} { + int len = strlen (yytext); + ml_pos = 0; - /* remove "\\\n" */ - yytext[strlen (yytext) - 2] = '\0'; + /* remove "\\" */ + if ('\r' == yytext[len - 2]) + len -= 3; + else + len -= 2; + yytext[len] = '\0'; ml_append (yytext); BEGIN (ML); } ^{WHITE_SPACE}+ {/* remove leading white-space */} -{NON_WHITE_SPACE}{QUOTED_STRING}\\\n { - /* remove "\\\n" */ - yytext[strlen (yytext) - 2] = '\0'; +{NON_WHITE_SPACE}{QUOTED_STRING}\\{EOL} { + int len = strlen (yytext); + + /* remove "\\" */ + if ('\r' == yytext[len - 2]) + len -= 3; + else + len -= 2; + yytext[len] = '\0'; ml_append(yytext); }