Scripting: Added strsplit command

This commit is contained in:
windows-server-2003 2017-12-20 12:33:18 +09:00 committed by d0k3
parent 625d1e5bea
commit 4ea35ef504

View File

@ -69,6 +69,7 @@ typedef enum {
CMD_ID_INPUT,
CMD_ID_FILESEL,
CMD_ID_SET,
CMD_ID_STRSPLIT,
CMD_ID_CHK,
CMD_ID_ALLOW,
CMD_ID_CP,
@ -121,6 +122,7 @@ Gm9ScriptCmd cmd_list[] = {
{ CMD_ID_INPUT , "input" , 2, 0 },
{ CMD_ID_FILESEL , "filesel" , 3, 0 },
{ CMD_ID_SET , "set" , 2, 0 },
{ CMD_ID_STRSPLIT, "strsplit", 3, _FLG('b') | _FLG('f')},
{ CMD_ID_CHK , "chk" , 2, _FLG('u') },
{ CMD_ID_ALLOW , "allow" , 1, _FLG('a') },
{ CMD_ID_CP , "cp" , 2, _FLG('h') | _FLG('w') | _FLG('k') | _FLG('s') | _FLG('n')},
@ -462,6 +464,7 @@ u32 get_flag(char* str, u32 len, char* err_str) {
if ((len < 2) || (*str != '-')) flag_char = '\0';
else if (len == 2) flag_char = str[1];
else if (strncmp(str, "--all", len) == 0) flag_char = 'a';
else if (strncmp(str, "--before", len) == 0) flag_char = 'b';
else if (strncmp(str, "--first", len) == 0) flag_char = 'f';
else if (strncmp(str, "--hash", len) == 0) flag_char = 'h';
else if (strncmp(str, "--skip", len) == 0) flag_char = 'k';
@ -811,6 +814,26 @@ bool run_cmd(cmd_id id, u32 flags, char** argv, char* err_str) {
ret = set_var(argv[0], argv[1]);
if (err_str) snprintf(err_str, _ERR_STR_LEN, "set fail");
}
else if (id == CMD_ID_STRSPLIT) {
char str[_ARG_MAX_LEN];
strncpy(str, argv[1], _ARG_MAX_LEN);
ret = false;
if (strlen(argv[2]) == 1) { // argv[2] must be one char
char* found;
if (flags & _FLG('f')) found = strchr(str, *argv[2]);
else found = strrchr(str, *argv[2]);
if (!found && err_str) snprintf(err_str, _ERR_STR_LEN, "char not found");
if (found) {
if (flags & _FLG('b')) {
*found = '\0';
ret = set_var(argv[0], str);
} else ret = set_var(argv[0], found+1);
if (err_str) snprintf(err_str, _ERR_STR_LEN, "var fail");
}
} else if (err_str) snprintf(err_str, _ERR_STR_LEN, "argv[2] is not a char");
}
else if (id == CMD_ID_CHK) {
if (flags & _FLG('u')) {
ret = (strncasecmp(argv[0], argv[1], _VAR_CNT_LEN) != 0);