// copy the rest of the command line
cmd[0] = 0; // start out with a null string
c = Cmd_Argc();
- for (i=2 ; i< c ; i++)
+ for (i=2 ; i < c ; i++)
{
- strlcat (cmd, Cmd_Argv(i), sizeof (cmd));
- if (i != c)
+ if (i != 2)
strlcat (cmd, " ", sizeof (cmd));
+ strlcat (cmd, Cmd_Argv(i), sizeof (cmd));
}
strlcat (cmd, "\n", sizeof (cmd));
return NULL;
}
-qboolean Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset)
+qboolean Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset, qboolean putquotes)
{
qboolean quote_quot = !!strchr(quoteset, '"');
qboolean quote_backslash = !!strchr(quoteset, '\\');
qboolean quote_dollar = !!strchr(quoteset, '$');
+ if(putquotes)
+ {
+ if(outlen <= 2)
+ {
+ *out++ = 0;
+ return false;
+ }
+ *out++ = '"'; --outlen;
+ --outlen;
+ }
+
while(*in)
{
if(*in == '"' && quote_quot)
{
if(outlen <= 2)
- {
- *out++ = 0;
- return false;
- }
+ goto fail;
*out++ = '\\'; --outlen;
*out++ = '"'; --outlen;
}
else if(*in == '\\' && quote_backslash)
{
if(outlen <= 2)
- {
- *out++ = 0;
- return false;
- }
+ goto fail;
*out++ = '\\'; --outlen;
*out++ = '\\'; --outlen;
}
else if(*in == '$' && quote_dollar)
{
if(outlen <= 2)
- {
- *out++ = 0;
- return false;
- }
+ goto fail;
*out++ = '$'; --outlen;
*out++ = '$'; --outlen;
}
else
{
if(outlen <= 1)
- {
- *out++ = 0;
- return false;
- }
+ goto fail;
*out++ = *in; --outlen;
}
++in;
}
+ if(putquotes)
+ *out++ = '"';
*out++ = 0;
return true;
+fail:
+ if(putquotes)
+ *out++ = '"';
+ *out++ = 0;
+ return false;
}
static const char *Cmd_GetCvarValue(const char *var, size_t varlen, cmdalias_t *alias)
{
// quote it so it can be used inside double quotes
// we just need to replace " by \", and of course, double backslashes
- Cmd_QuoteString(varval, sizeof(varval), varstr, "\"\\");
+ Cmd_QuoteString(varval, sizeof(varval), varstr, "\"\\", false);
return varval;
}
else if(!strcmp(varfunc, "asis"))
// Note: Cbuf_PreprocessString will be called on this string AGAIN! So we
// have to make sure that no second variable expansion takes place, otherwise
// alias parameters containing dollar signs can have bad effects.
- Cmd_QuoteString(buffer2, sizeof(buffer2), buffer, "$");
+ Cmd_QuoteString(buffer2, sizeof(buffer2), buffer, "$", false);
Cbuf_InsertText( buffer2 );
}