mirror of
https://github.com/reactos/ninja.git
synced 2025-02-22 20:52:24 +00:00
Merge pull request #763 from drbo/master
Allow paths with international characters in depfiles
This commit is contained in:
commit
381e56a34c
@ -47,7 +47,7 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
const char* start = in;
|
||||
|
||||
{
|
||||
char yych;
|
||||
unsigned char yych;
|
||||
static const unsigned char yybm[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -65,22 +65,22 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 0, 128, 128, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
128, 128, 128, 128, 128, 128, 128, 128,
|
||||
};
|
||||
|
||||
yych = *in;
|
||||
@ -106,24 +106,28 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (yych <= '^') {
|
||||
if (yych <= 'Z') {
|
||||
if (yych <= '_') {
|
||||
if (yych <= '[') {
|
||||
if (yych <= '?') goto yy9;
|
||||
goto yy5;
|
||||
if (yych <= 'Z') goto yy5;
|
||||
goto yy9;
|
||||
} else {
|
||||
if (yych != '\\') goto yy9;
|
||||
if (yych <= '\\') goto yy2;
|
||||
if (yych <= '^') goto yy9;
|
||||
goto yy5;
|
||||
}
|
||||
} else {
|
||||
if (yych <= '{') {
|
||||
if (yych == '`') goto yy9;
|
||||
goto yy5;
|
||||
} else {
|
||||
if (yych <= '|') goto yy9;
|
||||
if (yych <= '~') goto yy5;
|
||||
if (yych <= '|') {
|
||||
if (yych <= '`') goto yy9;
|
||||
if (yych <= '{') goto yy5;
|
||||
goto yy9;
|
||||
} else {
|
||||
if (yych == 0x7F) goto yy9;
|
||||
goto yy5;
|
||||
}
|
||||
}
|
||||
}
|
||||
yy2:
|
||||
++in;
|
||||
if ((yych = *in) <= '"') {
|
||||
if (yych <= '\f') {
|
||||
|
@ -45,7 +45,7 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
// start: beginning of the current parsed span.
|
||||
const char* start = in;
|
||||
/*!re2c
|
||||
re2c:define:YYCTYPE = "char";
|
||||
re2c:define:YYCTYPE = "unsigned char";
|
||||
re2c:define:YYCURSOR = in;
|
||||
re2c:define:YYLIMIT = end;
|
||||
|
||||
@ -73,7 +73,7 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
*out++ = yych;
|
||||
continue;
|
||||
}
|
||||
[a-zA-Z0-9+,/_:.~()}{@=!-]+ {
|
||||
[a-zA-Z0-9+,/_:.~()}{@=!\x80-\xFF-]+ {
|
||||
// Got a span of plain text.
|
||||
int len = (int)(in - start);
|
||||
// Need to shift it over if we're overwriting backslashes.
|
||||
|
@ -121,18 +121,21 @@ TEST_F(DepfileParserTest, SpecialChars) {
|
||||
EXPECT_TRUE(Parse(
|
||||
"C:/Program\\ Files\\ (x86)/Microsoft\\ crtdefs.h: \n"
|
||||
" en@quot.header~ t+t-x!=1 \n"
|
||||
" openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif",
|
||||
" openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif\n"
|
||||
" Fu\303\244ball",
|
||||
&err));
|
||||
ASSERT_EQ("", err);
|
||||
EXPECT_EQ("C:/Program Files (x86)/Microsoft crtdefs.h",
|
||||
parser_.out_.AsString());
|
||||
ASSERT_EQ(3u, parser_.ins_.size());
|
||||
ASSERT_EQ(4u, parser_.ins_.size());
|
||||
EXPECT_EQ("en@quot.header~",
|
||||
parser_.ins_[0].AsString());
|
||||
EXPECT_EQ("t+t-x!=1",
|
||||
parser_.ins_[1].AsString());
|
||||
EXPECT_EQ("openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif",
|
||||
parser_.ins_[2].AsString());
|
||||
EXPECT_EQ("Fu\303\244ball",
|
||||
parser_.ins_[3].AsString());
|
||||
}
|
||||
|
||||
TEST_F(DepfileParserTest, UnifyMultipleOutputs) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user