1
0
kolibrios/programs/system/shell/modules/module_parameters.c

127 lines
3.1 KiB
C
Raw Normal View History

/// ===========================================================
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])
{
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;
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;
};
}
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]);
}
/// ===========================================================