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

101 lines
2.7 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;
}; // switch end
} // for end
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]);
}