From ca062bd6b8ea476f15b631eec5de018d96c255d2 Mon Sep 17 00:00:00 2001 From: "smontagu%smontagu.org" Date: Thu, 26 Apr 2007 18:56:30 +0000 Subject: [PATCH] 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 --- mozilla/xpcom/ds/nsPersistentProperties.cpp | 90 +++++++++------------ 1 file changed, 36 insertions(+), 54 deletions(-) diff --git a/mozilla/xpcom/ds/nsPersistentProperties.cpp b/mozilla/xpcom/ds/nsPersistentProperties.cpp index 6af43dada99..05853f8075c 100644 --- a/mozilla/xpcom/ds/nsPersistentProperties.cpp +++ b/mozilla/xpcom/ds/nsPersistentProperties.cpp @@ -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); }