Fix android binaries and missing main callbacks (#3044)
* Rename `rassign2` to `rz-sign` * Refactor code from rz_main * Rename struct * Update main.c
This commit is contained in:
parent
0aaa7652aa
commit
4063f7d2de
4 changed files with 30 additions and 46 deletions
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2022 deroad <wargio@libero.it>
|
||||
// SPDX-FileCopyrightText: 2012-2021 pancake <pancake@nopcode.org>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
|
|
@ -6,13 +7,13 @@
|
|||
|
||||
int MAIN_NAME(int argc, const ARGV_TYPE **argv) {
|
||||
char **utf8_argv = ARGV_TYPE_TO_UTF8(argc, argv);
|
||||
int rc = 1;
|
||||
const char *prog_name = rz_file_basename(utf8_argv[0]);
|
||||
RzMain *m = rz_main_new(prog_name);
|
||||
if (m) {
|
||||
rc = rz_main_run(m, argc, (const char **)utf8_argv);
|
||||
rz_main_free(m);
|
||||
RzMainCallback main_cb = rz_main_find(prog_name);
|
||||
if (!main_cb) {
|
||||
RZ_LOG_ERROR("rizin: Cannot find main for '%s'. using rizin instead\n", prog_name);
|
||||
main_cb = rz_main_rizin;
|
||||
}
|
||||
int rc = main_cb(argc, (const char **)utf8_argv);
|
||||
FREE_UTF8_ARGV(argc, utf8_argv);
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ set -e
|
|||
mkdir -p "${DESTDIR}/${MESON_INSTALL_PREFIX}/bin"
|
||||
cd "${DESTDIR}/${MESON_INSTALL_PREFIX}/bin"
|
||||
|
||||
TOOLS="rz-hash rz-run rz-asm rz-bin rz-gg rz-agent rz-diff rz-find rassign2 rz-ax"
|
||||
TOOLS="rz-hash rz-run rz-asm rz-bin rz-gg rz-agent rz-diff rz-find rz-sign rz-ax"
|
||||
|
||||
for TOOL in $TOOLS ; do
|
||||
ln -sf rizin $TOOL ;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2022 deroad <wargio@libero.it>
|
||||
// SPDX-FileCopyrightText: 2008-2020 pancake <pancake@nopcode.org>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
|
|
@ -13,12 +14,6 @@ extern "C" {
|
|||
|
||||
RZ_LIB_VERSION_HEADER(rz_main);
|
||||
|
||||
typedef struct rz_main_t {
|
||||
const char *name;
|
||||
int (*main)(int argc, const char **argv);
|
||||
// stdin/stdout
|
||||
} RzMain;
|
||||
|
||||
#if __WINDOWS__
|
||||
#define MAIN_NAME wmain
|
||||
#define ARGV_TYPE wchar_t
|
||||
|
|
@ -33,10 +28,7 @@ typedef struct rz_main_t {
|
|||
|
||||
typedef int (*RzMainCallback)(int argc, const char **argv);
|
||||
|
||||
RZ_API RzMain *rz_main_new(const char *name);
|
||||
RZ_API void rz_main_free(RzMain *m);
|
||||
RZ_API int rz_main_run(RzMain *m, int argc, const char **argv);
|
||||
|
||||
RZ_API RzMainCallback rz_main_find(const char *name);
|
||||
RZ_API int rz_main_version_print(const char *program);
|
||||
RZ_API int rz_main_rz_ax(int argc, const char **argv);
|
||||
RZ_API int rz_main_rz_run(int argc, const char **argv);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
// SPDX-FileCopyrightText: 2022 deroad <wargio@libero.it>
|
||||
// SPDX-FileCopyrightText: 2012-2020 pancake <pancake@nopcode.org>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
|
|
@ -8,44 +9,34 @@
|
|||
|
||||
RZ_LIB_VERSION(rz_main);
|
||||
|
||||
static RzMain foo[] = {
|
||||
{ "rz", rz_main_rizin },
|
||||
{ "rz-ax", rz_main_rz_ax },
|
||||
{ "rz-diff", rz_main_rz_diff },
|
||||
{ "rz-find", rz_main_rz_find },
|
||||
{ "rz-run", rz_main_rz_run },
|
||||
{ "rz-asm", rz_main_rz_asm },
|
||||
{ "rz-gg", rz_main_rz_gg },
|
||||
{ "rz-bin", rz_main_rz_bin },
|
||||
typedef struct main_entry_t {
|
||||
const char *name;
|
||||
RzMainCallback main;
|
||||
} MainEntry;
|
||||
|
||||
static MainEntry main_prog[] = {
|
||||
{ "rizin", rz_main_rizin },
|
||||
{ NULL, NULL }
|
||||
{ "rz-agent", rz_main_rz_agent },
|
||||
{ "rz-asm", rz_main_rz_asm },
|
||||
{ "rz-ax", rz_main_rz_ax },
|
||||
{ "rz-bin", rz_main_rz_bin },
|
||||
{ "rz-diff", rz_main_rz_diff },
|
||||
{ "rz-find", rz_main_rz_ax },
|
||||
{ "rz-gg", rz_main_rz_gg },
|
||||
{ "rz-hash", rz_main_rz_hash },
|
||||
{ "rz-run", rz_main_rz_run },
|
||||
{ "rz-sign", rz_main_rz_sign },
|
||||
};
|
||||
|
||||
RZ_API RzMain *rz_main_new(const char *name) {
|
||||
int i = 0;
|
||||
while (foo[i].name) {
|
||||
if (!strcmp(name, foo[i].name)) {
|
||||
RzMain *m = RZ_NEW0(RzMain);
|
||||
if (m) {
|
||||
m->name = strdup(foo[i].name);
|
||||
m->main = foo[i].main;
|
||||
}
|
||||
return m;
|
||||
RZ_API RzMainCallback rz_main_find(const char *name) {
|
||||
for (size_t i = 0; i < RZ_ARRAY_SIZE(main_prog); i++) {
|
||||
if (!strcmp(name, main_prog[i].name)) {
|
||||
return main_prog[i].main;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RZ_API void rz_main_free(RzMain *m) {
|
||||
free(m);
|
||||
}
|
||||
|
||||
RZ_API int rz_main_run(RzMain *m, int argc, const char **argv) {
|
||||
rz_return_val_if_fail(m && m->main, -1);
|
||||
return m->main(argc, argv);
|
||||
}
|
||||
|
||||
RZ_API int rz_main_version_print(const char *progname) {
|
||||
char *s = rz_version_str(progname);
|
||||
printf("%s\n", s);
|
||||
|
|
|
|||
Loading…
Reference in a new issue