encode esc in instead_cmd
This commit is contained in:
parent
52568c31b5
commit
700cd732ca
|
@ -149,16 +149,15 @@ int instead_iretval(int n)
|
||||||
|
|
||||||
char *instead_cmd(char *s)
|
char *instead_cmd(char *s)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[4096];
|
||||||
char *p = s;
|
char *p;
|
||||||
while (*p) {
|
p = encode_esc_string(s);
|
||||||
if (*p == '\\' || *p == '\'' || *p == '\"' || *p == '[' || *p == ']')
|
if (!p)
|
||||||
return NULL;
|
return NULL;
|
||||||
p ++;
|
s = togame(p); free(p);
|
||||||
}
|
if (!s)
|
||||||
s = togame(s);
|
return NULL;
|
||||||
snprintf(buf, sizeof(buf), "return iface:cmd('%s')", s);
|
snprintf(buf, sizeof(buf), "return iface:cmd('%s')", s); free(s);
|
||||||
free(s);
|
|
||||||
p = getstring(buf);
|
p = getstring(buf);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,39 @@ int parse_string(const char *v, void *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *encode_esc_string(const char *v)
|
||||||
|
{
|
||||||
|
char *r, *p;
|
||||||
|
if (!v)
|
||||||
|
return NULL;
|
||||||
|
p = r = malloc((strlen(v)*2) + 1);
|
||||||
|
if (!r)
|
||||||
|
return NULL;
|
||||||
|
while (*v) {
|
||||||
|
switch (*v) {
|
||||||
|
case ' ':
|
||||||
|
*p ++ = '\\';
|
||||||
|
*p ++ = ' ';
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
*p ++ = '\\';
|
||||||
|
*p ++ = '"';
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
*p ++ = '\\';
|
||||||
|
*p ++ = '\'';
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
*p ++ = '\\';
|
||||||
|
*p ++ = '\\';
|
||||||
|
default:
|
||||||
|
*p ++ = *v;
|
||||||
|
}
|
||||||
|
v ++;
|
||||||
|
}
|
||||||
|
*p ++ = 0;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
int parse_esc_string(const char *v, void *data)
|
int parse_esc_string(const char *v, void *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ extern int parse_esc_string(const char *v, void *data);
|
||||||
extern int parse_string(const char *v, void *data);
|
extern int parse_string(const char *v, void *data);
|
||||||
extern int parse_int(const char *v, void *data);
|
extern int parse_int(const char *v, void *data);
|
||||||
extern int parse_full_path(const char *v, void *data);
|
extern int parse_full_path(const char *v, void *data);
|
||||||
|
extern char *encode_esc_string(const char *v);
|
||||||
|
|
||||||
#ifdef _HAVE_ICONV
|
#ifdef _HAVE_ICONV
|
||||||
extern char *decode(iconv_t hiconv, const char *s);
|
extern char *decode(iconv_t hiconv, const char *s);
|
||||||
|
|
Reference in a new issue