Better handling of quoted strings, added parameter to force quoting.
Added convenience method to retrieve an unquoted string. git-svn-id: http://yate.null.ro/svn/yate/trunk@2361 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
78578ae395
commit
9d403bce44
|
@ -148,30 +148,69 @@ void MimeHeaderLine::delParam(const char* name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utility function, puts quotes around a string
|
// Utility function, puts quotes around a string
|
||||||
void MimeHeaderLine::addQuotes(String& str)
|
void MimeHeaderLine::addQuotes(String& str, bool force)
|
||||||
{
|
{
|
||||||
str.trimBlanks();
|
str.trimBlanks();
|
||||||
int l = str.length();
|
unsigned int l = str.length();
|
||||||
if ((l < 2) || (str[0] != '"') || (str[l-1] != '"'))
|
if (force || (l < 2) || (str[0] != '"') || (str[l-1] != '"')) {
|
||||||
str = "\"" + str + "\"";
|
str = "\"" + str + "\"";
|
||||||
|
force = true;
|
||||||
|
}
|
||||||
|
for (l = 1; l < str.length() - 1; l++) {
|
||||||
|
switch (str.at(l)) {
|
||||||
|
case '\\':
|
||||||
|
if (!force) {
|
||||||
|
// check only, don't quote again
|
||||||
|
switch (str.at(l+1)) {
|
||||||
|
case '\\':
|
||||||
|
case '"':
|
||||||
|
// already quoted, skip it
|
||||||
|
l++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
|
case '"':
|
||||||
|
str = str.substr(0,l) + "\\" + str.substr(l);
|
||||||
|
l++;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utility function, removes quotes around a string
|
// Utility function, removes quotes around a string
|
||||||
void MimeHeaderLine::delQuotes(String& str)
|
void MimeHeaderLine::delQuotes(String& str, bool force)
|
||||||
{
|
{
|
||||||
str.trimBlanks();
|
str.trimBlanks();
|
||||||
int l = str.length();
|
unsigned int l = str.length();
|
||||||
if ((l >= 2) && (str[0] == '"') && (str[l-1] == '"')) {
|
if ((l >= 2) && (str[0] == '"') && (str[l-1] == '"')) {
|
||||||
str = str.substr(1,l-2);
|
str = str.substr(1,l-2);
|
||||||
str.trimBlanks();
|
str.trimBlanks();
|
||||||
|
force = true;
|
||||||
|
}
|
||||||
|
if (force) {
|
||||||
|
for (l = 0; l < str.length(); l++) {
|
||||||
|
if (str.at(l) == '\\')
|
||||||
|
str = str.substr(0,l) + str.substr(l+1);
|
||||||
|
// since the string is shorter the loop will skip past next char
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utility function, puts quotes around a string
|
// Utility function, puts quotes around a string
|
||||||
String MimeHeaderLine::quote(const String& str)
|
String MimeHeaderLine::quote(const String& str, bool force)
|
||||||
{
|
{
|
||||||
String tmp(str);
|
String tmp(str);
|
||||||
addQuotes(tmp);
|
addQuotes(tmp,force);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utility function, removed quotes around a string
|
||||||
|
String MimeHeaderLine::unquote(const String& str, bool force)
|
||||||
|
{
|
||||||
|
String tmp(str);
|
||||||
|
delQuotes(tmp,force);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
17
yatemime.h
17
yatemime.h
|
@ -131,21 +131,32 @@ public:
|
||||||
/**
|
/**
|
||||||
* Utility function, puts quotes around a string.
|
* Utility function, puts quotes around a string.
|
||||||
* @param str String to put quotes around.
|
* @param str String to put quotes around.
|
||||||
|
* @param force True to force quoting even if was already quoted
|
||||||
*/
|
*/
|
||||||
static void addQuotes(String& str);
|
static void addQuotes(String& str, bool force = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility function, removes quotes around a string.
|
* Utility function, removes quotes around a string.
|
||||||
* @param str String to remove quotes.
|
* @param str String to remove quotes.
|
||||||
|
* @param force True to force unquoting even if wasn't properly quoted
|
||||||
*/
|
*/
|
||||||
static void delQuotes(String& str);
|
static void delQuotes(String& str, bool force = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility function, puts quotes around a string.
|
* Utility function, puts quotes around a string.
|
||||||
* @param str String to put quotes around.
|
* @param str String to put quotes around.
|
||||||
|
* @param force True to force quoting even if was already quoted
|
||||||
* @return The input string enclosed in quotes.
|
* @return The input string enclosed in quotes.
|
||||||
*/
|
*/
|
||||||
static String quote(const String& str);
|
static String quote(const String& str, bool force = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility function, removes quotes around a string.
|
||||||
|
* @param str String to remove quotes around.
|
||||||
|
* @param force True to force unquoting even if wasn't properly quoted
|
||||||
|
* @return The input string with enclosing quotes removed.
|
||||||
|
*/
|
||||||
|
static String unquote(const String& str, bool force = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility function to find a separator not in "quotes" or inside \<uri\>.
|
* Utility function to find a separator not in "quotes" or inside \<uri\>.
|
||||||
|
|
Loading…
Reference in New Issue