diff --git a/src/ainedit/asm.c b/src/ainedit/asm.c index 78baf0d..cb66ff2 100644 --- a/src/ainedit/asm.c +++ b/src/ainedit/asm.c @@ -445,7 +445,9 @@ void handle_pseudo_op(struct asm_state *state, struct parse_instruction *instr) realloc_string_table(state->ain, n_str); if (state->ain->strings[n_str]) free_string(state->ain->strings[n_str]); - state->ain->strings[n_str] = string_dup(kv_A(*instr->args, 1)); + char *sjis = utf2sjis(kv_A(*instr->args, 1)->text, 0); + state->ain->strings[n_str] = make_string(sjis, strlen(sjis)); + free(sjis); break; } case PO_MSG: { @@ -455,7 +457,9 @@ void handle_pseudo_op(struct asm_state *state, struct parse_instruction *instr) realloc_message_table(state->ain, n_msg); if (state->ain->messages[n_msg]) free_string(state->ain->messages[n_msg]); - state->ain->messages[n_msg] = string_dup(kv_A(*instr->args, 1)); + char *sjis = utf2sjis(kv_A(*instr->args, 1)->text, 0); + state->ain->messages[n_msg] = make_string(sjis, strlen(sjis)); + free(sjis); break; } } diff --git a/src/utfsjis.c b/src/utfsjis.c index 486e363..0a9efc4 100644 --- a/src/utfsjis.c +++ b/src/utfsjis.c @@ -46,6 +46,8 @@ int sjis_index(const char *_src, int index) } char *sjis2utf(const char *_src, size_t len) { + if (!len) + len = strlen(_src); const uint8_t *src = (uint8_t*)_src; uint8_t* dst = malloc(len * 3 + 1); uint8_t* dstp = dst; @@ -93,6 +95,8 @@ static int unicode_to_sjis(int u) { } char *utf2sjis(const char *_src, size_t len) { + if (!len) + len = strlen(_src); const uint8_t *src = (uint8_t*)_src; uint8_t* dst = malloc(len + 1); uint8_t* dstp = dst;