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:
Giovanni 2022-09-23 11:30:17 +02:00 committed by GitHub
parent 0aaa7652aa
commit 4063f7d2de
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 46 deletions

View file

@ -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;
}

View file

@ -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 ;

View file

@ -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);

View file

@ -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);