From d7e0be5dada7c395e8a58c01bc49ca6b531d14bc Mon Sep 17 00:00:00 2001 From: pancake Date: Tue, 4 Oct 2016 15:01:02 +0200 Subject: [PATCH] Implement rasm2 -s? and refactor this a bit --- binr/rasm2/rasm2.c | 13 ++++++++++--- doc/bash_autocompletion.sh | 2 +- libr/asm/asm.c | 19 +++++++++++++++++++ libr/core/config.c | 18 +++++++----------- libr/include/r_asm.h | 1 + 5 files changed, 38 insertions(+), 15 deletions(-) diff --git a/binr/rasm2/rasm2.c b/binr/rasm2/rasm2.c index a68b585a57..2e8541ac69 100644 --- a/binr/rasm2/rasm2.c +++ b/binr/rasm2/rasm2.c @@ -476,9 +476,16 @@ int main (int argc, char *argv[]) { if (fd != -1) dup2 (fd, 1); break; case 's': - if (!strcmp (optarg, "att")) - r_asm_set_syntax (a, R_ASM_SYNTAX_ATT); - else r_asm_set_syntax (a, R_ASM_SYNTAX_INTEL); + if (*optarg == '?') { + printf ("att\nintel\nmasm\njz\nregnum\n"); + return false; + } else { + int syntax = r_asm_syntax_from_string (optarg); + if (syntax == -1) { + return false; + } + r_asm_set_syntax (a, syntax); + } break; case 'v': if (quiet) { diff --git a/doc/bash_autocompletion.sh b/doc/bash_autocompletion.sh index f14ff635be..86b60e05df 100644 --- a/doc/bash_autocompletion.sh +++ b/doc/bash_autocompletion.sh @@ -78,7 +78,7 @@ _rasm2 () { return 0 ;; -s) - COMPREPLY=( $(compgen -W "$(r2 -qc 'e asm.syntax=?' --)" -- $cur )) + COMPREPLY=( $(compgen -W "$(rasm2 -s?)" -- $cur )) return 0 ;; esac diff --git a/libr/asm/asm.c b/libr/asm/asm.c index 0989338c41..2bafd0e3ba 100644 --- a/libr/asm/asm.c +++ b/libr/asm/asm.c @@ -859,3 +859,22 @@ R_API ut8 *r_asm_from_string(RAsm *a, ut64 addr, const char *b, int *l) { } return NULL; } + +R_API int r_asm_syntax_from_string(const char *name) { + if (!strcmp (name, "regnum")) { + return R_ASM_SYNTAX_REGNUM; + } + if (!strcmp (name, "jz")) { + return R_ASM_SYNTAX_JZ; + } + if (!strcmp (name, "intel")) { + return R_ASM_SYNTAX_INTEL; + } + if (!strcmp (name, "masm")) { + return R_ASM_SYNTAX_MASM; + } + if (!strcmp (name, "att")) { + return R_ASM_SYNTAX_ATT; + } + return -1; +} diff --git a/libr/core/config.c b/libr/core/config.c index acfc787632..85706b5309 100644 --- a/libr/core/config.c +++ b/libr/core/config.c @@ -587,17 +587,13 @@ static int cb_asmsyntax(void *user, void *data) { if (*node->value == '?') { r_cons_printf ("att\nintel\nmasm\njz\nregnum\n"); return false; - } else if (!strcmp (node->value, "regnum")) { - r_asm_set_syntax (core->assembler, R_ASM_SYNTAX_REGNUM); - } else if (!strcmp (node->value, "jz")) { - r_asm_set_syntax (core->assembler, R_ASM_SYNTAX_JZ); - } else if (!strcmp (node->value, "intel")) { - r_asm_set_syntax (core->assembler, R_ASM_SYNTAX_INTEL); - } else if (!strcmp (node->value, "masm")) { - r_asm_set_syntax (core->assembler, R_ASM_SYNTAX_MASM); - } else if (!strcmp (node->value, "att")) { - r_asm_set_syntax (core->assembler, R_ASM_SYNTAX_ATT); - } else return false; + } else { + int syntax = r_asm_syntax_from_string (node->value); + if (syntax == -1) { + return false; + } + r_asm_set_syntax (core->assembler, syntax); + } return true; } diff --git a/libr/include/r_asm.h b/libr/include/r_asm.h index 7969ab60d8..55e06da93e 100644 --- a/libr/include/r_asm.h +++ b/libr/include/r_asm.h @@ -150,6 +150,7 @@ R_API int r_asm_set_bits(RAsm *a, int bits); R_API void r_asm_set_cpu(RAsm *a, const char *cpu); R_API bool r_asm_set_big_endian(RAsm *a, bool big_endian); R_API int r_asm_set_syntax(RAsm *a, int syntax); +R_API int r_asm_syntax_from_string(const char *name); R_API int r_asm_set_pc(RAsm *a, ut64 pc); R_API int r_asm_disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len); R_API int r_asm_assemble(RAsm *a, RAsmOp *op, const char *buf);