2013-02-16 15:25:37 +04:00
|
|
|
|
|
|
|
/// ===========================================================
|
|
|
|
|
|
|
|
int parameters_prepare(char *param, char* argv[])
|
|
|
|
{
|
|
|
|
|
|
|
|
int i, param_len;
|
|
|
|
int argc = 1;
|
|
|
|
int quote = 0;
|
|
|
|
int argv_len;
|
|
|
|
|
|
|
|
param_len = strlen(param);
|
|
|
|
if ( param_len == 0 )
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
argv[0] = (char*) malloc(4096);
|
|
|
|
|
|
|
|
argv_len = 0;
|
|
|
|
for (i = 0; i < param_len; i++)
|
|
|
|
{
|
|
|
|
switch (param[i])
|
|
|
|
{
|
2013-02-24 14:33:37 +04:00
|
|
|
|
|
|
|
case '\\':
|
|
|
|
if (param[i+1]!='\0')
|
|
|
|
{
|
|
|
|
switch(param[i+1])
|
|
|
|
{
|
|
|
|
|
|
|
|
case 'n':
|
|
|
|
argv[argc-1][argv_len] = '\n';
|
|
|
|
argv_len++;
|
|
|
|
i++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 't':
|
|
|
|
argv[argc-1][argv_len] = '\t';
|
|
|
|
argv_len++;
|
|
|
|
i++;
|
|
|
|
|
|
|
|
case '\\':
|
|
|
|
case '\'':
|
|
|
|
case '"':
|
|
|
|
case '?':
|
|
|
|
argv[argc-1][argv_len] = param[i+1];
|
|
|
|
argv_len++;
|
|
|
|
i++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
i++;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2013-02-16 15:25:37 +04:00
|
|
|
case '"':
|
|
|
|
if (quote == 0)
|
|
|
|
quote = 1;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
quote = 0;
|
|
|
|
argv[argc-1][argv_len] = '\0';
|
|
|
|
argc++;
|
|
|
|
argv[argc-1] = (char*) malloc(4096);
|
|
|
|
argv[argc-1][argv_len] = '\0';
|
|
|
|
argv_len = 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 9:
|
|
|
|
case 32:
|
|
|
|
if (quote == 0)
|
|
|
|
{
|
|
|
|
if ( ( param[i+1] != 32) || ( param[i+1] != 9) )
|
|
|
|
{
|
|
|
|
if (argv_len != 0)
|
|
|
|
{
|
|
|
|
argv[argc-1][argv_len] = '\0';
|
|
|
|
argc++;
|
|
|
|
argv[argc-1] = (char*) malloc(4096);
|
|
|
|
argv[argc-1][argv_len] = '\0';
|
|
|
|
argv_len = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
argv[argc-1][argv_len] = param[i];
|
|
|
|
argv_len++;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
argv[argc-1][argv_len] = param[i];
|
|
|
|
argv_len++;
|
|
|
|
break;
|
2013-02-24 14:33:37 +04:00
|
|
|
|
2013-02-16 15:25:37 +04:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
argv[argc-1][argv_len] = '\0';
|
|
|
|
|
|
|
|
if ( strlen(argv[argc-1]) == 0 )
|
|
|
|
{
|
|
|
|
free(argv[argc-1]);
|
|
|
|
argc--;
|
|
|
|
}
|
|
|
|
|
|
|
|
return argc;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// ===========================================================
|
|
|
|
|
|
|
|
void parameters_free(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < argc; i++)
|
|
|
|
free(argv[i]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// ===========================================================
|
2013-02-17 19:22:51 +04:00
|
|
|
|