Backout fix for bug 365345 due to regressions. a=bsmedberg on IRC

git-svn-id: svn://10.0.0.236/trunk@225103 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
smontagu%smontagu.org
2007-04-26 18:56:30 +00:00
parent 70799f0809
commit ca062bd6b8

View File

@@ -176,46 +176,27 @@ nsPersistentProperties::Load(nsIInputStream *aIn)
static const char trimThese[] = " \t";
key.Trim(trimThese, PR_FALSE, PR_TRUE);
c = Read();
nsAutoString value, tempValue;
while ((c >= 0) && (c != '\r') && (c != '\n')) {
if (c == '\\') {
c = Read();
switch(c) {
case '\r':
case '\n':
// Only skip first EOL characters and then next line's
// whitespace characters. Skipping all EOL characters
// and all upcoming whitespace is too agressive.
if (c == '\r')
c = Read();
if (c == '\n')
c = Read();
while (c == ' ' || c == '\t')
c = Read();
continue;
default:
tempValue.Append((PRUnichar) '\\');
tempValue.Append((PRUnichar) c);
} // switch(c)
} else {
tempValue.Append((PRUnichar) c);
}
c = Read();
}
tempValue.Trim(trimThese, PR_TRUE, PR_TRUE);
nsAutoString value;
PRUint32 state = 0;
PRUnichar uchar = 0;
for (PRUint32 i = 0; i < tempValue.Length(); ++i) {
PRUnichar ch = tempValue[i];
while ((c >= 0) && (c != '\r') && (c != '\n')) {
switch(state) {
case 0:
if (ch == '\\') {
++i;
if (i == tempValue.Length())
break;
ch = tempValue[i];
switch(ch) {
if (c == '\\') {
c = Read();
switch(c) {
case '\r':
case '\n':
// Only skip first EOL characters and then next line's
// whitespace characters. Skipping all EOL characters
// and all upcoming whitespace is too agressive.
if (c == '\r')
c = Read();
if (c == '\n')
c = Read();
while (c == ' ' || c == '\t')
c = Read();
continue;
case 'u':
case 'U':
state = 1;
@@ -231,33 +212,33 @@ nsPersistentProperties::Load(nsIInputStream *aIn)
value.Append(PRUnichar('\r'));
break;
default:
value.Append(ch);
} // switch(ch)
value.Append((PRUnichar) c);
} // switch(c)
} else {
value.Append(ch);
value.Append((PRUnichar) c);
}
continue;
c = Read();
break;
case 1:
case 2:
case 3:
case 4:
if (('0' <= ch) && (ch <= '9')) {
uchar = (uchar << 4) | (ch - '0');
if (('0' <= c) && (c <= '9')) {
uchar = (uchar << 4) | (c - '0');
state++;
continue;
}
if (('a' <= ch) && (ch <= 'f')) {
uchar = (uchar << 4) | (ch - 'a' + 0x0a);
c = Read();
} else if (('a' <= c) && (c <= 'f')) {
uchar = (uchar << 4) | (c - 'a' + 0x0a);
state++;
continue;
}
if (('A' <= ch) && (ch <= 'F')) {
uchar = (uchar << 4) | (ch - 'A' + 0x0a);
c = Read();
} else if (('A' <= c) && (c <= 'F')) {
uchar = (uchar << 4) | (c - 'A' + 0x0a);
state++;
continue;
c = Read();
} else {
value.Append((PRUnichar) uchar);
state = 0;
}
value.Append((PRUnichar) uchar);
state = 0;
break;
case 5:
value.Append((PRUnichar) uchar);
@@ -268,7 +249,8 @@ nsPersistentProperties::Load(nsIInputStream *aIn)
value.Append((PRUnichar) uchar);
state = 0;
}
value.Trim(trimThese, PR_TRUE, PR_TRUE);
nsAutoString oldValue;
mSubclass->SetStringProperty(NS_ConvertUTF16toUTF8(key), value, oldValue);
}