diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index c499f9b9a7..d5e9bec0f8 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -273,12 +273,13 @@ static bool reg_is_ulong_integer(CPURISCVState *env, const char *name, } for (int i = 0; i < 32; i++) { - g_autofree char *reg_name = g_strdup(reg_names[i]); - char *reg1 = strtok(reg_name, "/"); - char *reg2 = strtok(NULL, "/"); + g_auto(GStrv) reg_name = g_strsplit(reg_names[i], "/", 2); - if (strcasecmp(reg1, name) == 0 || - (reg2 && strcasecmp(reg2, name) == 0)) { + g_assert(reg_name[0]); + g_assert(reg_name[1]); + + if (g_ascii_strcasecmp(reg_name[0], name) == 0 || + g_ascii_strcasecmp(reg_name[1], name) == 0) { *val = vals[i]; return true; } @@ -294,12 +295,13 @@ static bool reg_is_u64_fpu(CPURISCVState *env, const char *name, uint64_t *val) } for (int i = 0; i < 32; i++) { - g_autofree char *reg_name = g_strdup(riscv_fpr_regnames[i]); - char *reg1 = strtok(reg_name, "/"); - char *reg2 = strtok(NULL, "/"); + g_auto(GStrv) reg_name = g_strsplit(riscv_fpr_regnames[i], "/", 2); - if (strcasecmp(reg1, name) == 0 || - (reg2 && strcasecmp(reg2, name) == 0)) { + g_assert(reg_name[0]); + g_assert(reg_name[1]); + + if (g_ascii_strcasecmp(reg_name[0], name) == 0 || + g_ascii_strcasecmp(reg_name[1], name) == 0) { *val = env->fpr[i]; return true; }