mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 04:20:27 +01:00
Undo XDG string-escaping when generating menu-entries.
In XDG desktop files, string values are subject to escaping. Undo this when parsing them. Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
This commit is contained in:
committed by
Carlos R. Mafra
parent
6734646265
commit
b32ccee5cb
@@ -297,6 +297,7 @@ static void getKey(char **target, const char *line)
|
|||||||
static void getStringValue(char **target, const char *line)
|
static void getStringValue(char **target, const char *line)
|
||||||
{
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
|
char *q;
|
||||||
int kstart;
|
int kstart;
|
||||||
|
|
||||||
p = line;
|
p = line;
|
||||||
@@ -312,6 +313,26 @@ static void getStringValue(char **target, const char *line)
|
|||||||
kstart++;
|
kstart++;
|
||||||
|
|
||||||
*target = wstrdup(p + kstart);
|
*target = wstrdup(p + kstart);
|
||||||
|
|
||||||
|
for (p = q = *target; *p; p++) {
|
||||||
|
if (*p != '\\') {
|
||||||
|
*q++ = *p;
|
||||||
|
} else {
|
||||||
|
switch (*++p) {
|
||||||
|
case 's': *q++ = ' '; break;
|
||||||
|
case 'n': *q++ = '\n'; break;
|
||||||
|
case 't': *q++ = '\t'; break;
|
||||||
|
case 'r': *q++ = '\r'; break;
|
||||||
|
case '\\': *q++ = '\\'; break;
|
||||||
|
default:
|
||||||
|
/*
|
||||||
|
* Skip invalid escape.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*q = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get a localized string value from line. allocates target, which must be wfreed later.
|
/* get a localized string value from line. allocates target, which must be wfreed later.
|
||||||
|
|||||||
Reference in New Issue
Block a user