summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/contrib')
-rw-r--r--apt-pkg/contrib/strutl.cc43
1 files changed, 17 insertions, 26 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 45e475b3e..7beb5f621 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -310,11 +310,11 @@ bool ParseQuoteWord(const char *&String,string &Res)
}
// Now de-quote characters
- char Buffer[1024];
+ Res.clear();
+ Res.reserve(C - String);
char Tmp[3];
const char *Start = String;
- char *I;
- for (I = Buffer; I < Buffer + sizeof(Buffer) && Start != C; I++)
+ while (Start != C)
{
if (*Start == '%' && Start + 2 < C &&
isxdigit(Start[1]) && isxdigit(Start[2]))
@@ -322,19 +322,15 @@ bool ParseQuoteWord(const char *&String,string &Res)
Tmp[0] = Start[1];
Tmp[1] = Start[2];
Tmp[2] = 0;
- *I = (char)strtol(Tmp,0,16);
+ Res.push_back(static_cast<char>(strtol(Tmp, 0, 16)));
Start += 3;
continue;
}
if (*Start != '"')
- *I = *Start;
- else
- I--;
- Start++;
+ Res.push_back(*Start);
+ ++Start;
}
- *I = 0;
- Res = Buffer;
-
+
// Skip ending white space
for (; isspace(*C) != 0; C++)
;
@@ -354,33 +350,28 @@ bool ParseCWord(const char *&String,string &Res)
;
if (*C == 0)
return false;
-
- char Buffer[1024];
- char *Buf = Buffer;
- if (strlen(String) >= sizeof(Buffer))
- return false;
-
- for (; *C != 0; C++)
+
+ Res.clear();
+ Res.reserve(strlen(String));
+ for (; *C != 0; ++C)
{
if (*C == '"')
{
for (C++; *C != 0 && *C != '"'; C++)
- *Buf++ = *C;
-
+ Res.push_back(*C);
+
if (*C == 0)
return false;
-
+
continue;
- }
-
+ }
+
if (C != String && isspace(*C) != 0 && isspace(C[-1]) != 0)
continue;
if (isspace(*C) == 0)
return false;
- *Buf++ = ' ';
+ Res.push_back(' ');
}
- *Buf = 0;
- Res = Buffer;
String = C;
return true;
}