diff --git a/libr/main/r2pm.c b/libr/main/r2pm.c index 99cb6fa148..d4791a5d0e 100644 --- a/libr/main/r2pm.c +++ b/libr/main/r2pm.c @@ -379,14 +379,24 @@ static void r2pm_setenv(void) { free (bindir); char *oldpath = r_sys_getenv ("PATH"); + if (!oldpath) { + oldpath = strdup ("/bin"); + } if (!strstr (oldpath, r2_prefix)) { char *newpath = r_str_newf ("%s/bin:%s", r2_prefix, oldpath); r_sys_setenv ("PATH", newpath); free (newpath); } free (oldpath); - free (r2_prefix); - +#if R2__WINDOWS__ + const char *ldpathvar = NULL; +#elif __HAIKU__ + const char *ldpathvar = "LIBRARY_PATH"; +#elif __APPLE__ + const char *ldpathvar = "DYLD_LIBRARY_PATH"; +#else + const char *ldpathvar = "LD_LIBRARY_PATH"; +#endif char *opath = r_sys_getenv ("PATH"); if (opath) { char *bindir = r2pm_bindir (); @@ -399,6 +409,40 @@ static void r2pm_setenv(void) { free (bindir); } + char *ldpath = r_sys_getenv (ldpathvar); + if (!ldpath) { + ldpath = strdup (""); + } + if (!strstr (ldpath, r2_prefix)) { + char *newpath = r_str_newf ("%s/lib:%s", r2_prefix, ldpath); + r_sys_setenv (ldpathvar, newpath); + free (ldpath); + ldpath = newpath; + } + char *gr2_prefix = r_sys_cmd_str ("radare2 -H R2_PREFIX", NULL, NULL); + if (gr2_prefix) { + r_str_trim (gr2_prefix); + if (R_STR_ISNOTEMPTY (gr2_prefix)) { + if (!strstr (ldpath, gr2_prefix)) { + char *newpath = r_str_newf ("%s/lib:%s", gr2_prefix, ldpath); + r_sys_setenv (ldpathvar, newpath); + if (R_STR_ISNOTEMPTY (pd)) { + r_str_trim (pd); + r_sys_setenv ("R2_USER_PLUGINS", pd); + r_sys_mkdirp (pd); + } + } + } + free (gr2_prefix); + } + + if (!strstr (ldpath, r2_prefix)) { + char *newpath = r_str_newf ("%s/lib:%s", r2_prefix, ldpath); + r_sys_setenv (ldpathvar, newpath); + free (newpath); + } + free (ldpath); + free (r2_prefix); // GLOBAL = 0 # depends on r2pm.global, which is set on r2pm_install static const char *python_bins[] = { "python3", diff --git a/libr/util/sys.c b/libr/util/sys.c index 86e461030e..80fb2ed715 100644 --- a/libr/util/sys.c +++ b/libr/util/sys.c @@ -1,4 +1,4 @@ -/* radare - LGPL - Copyright 2009-2022 - pancake */ +/* radare - LGPL - Copyright 2009-2023 - pancake */ #include #include @@ -469,7 +469,7 @@ static void signal_handler(int signum) { static int checkcmd(const char *c) { char oc = 0; - for (;*c;c++) { + for (; *c; c++) { if (oc == '%') { if (*c != 'd' && *c != '%') { return 0; @@ -623,7 +623,6 @@ R_API bool r_sys_aslr(int val) { R_LOG_ERROR ("Failed to set RVA"); ret = false; } -#elif __DragonFly__ #endif return ret; } @@ -781,7 +780,6 @@ R_API int r_sys_cmd_str_full(const char *cmd, const char *input, int ilen, char // free (escmd); ret = false; } - if (len) { *len = out_len; } @@ -913,9 +911,11 @@ R_API bool r_sys_mkdirp(const char *dir) { } *ptr = 0; if (!r_sys_mkdir (path) && r_sys_mkdir_failed ()) { - if (r_sandbox_check (R_SANDBOX_GRAIN_FILES)) { +#if 0 + if (!r_sandbox_check (R_SANDBOX_GRAIN_FILES)) { R_LOG_ERROR ("fail '%s' of '%s'", path, dir); } +#endif free (path); return false; } @@ -939,7 +939,7 @@ R_API void r_sys_perror_str(const char *fun) { LPTSTR lpMsgBuf; DWORD dw = GetLastError(); - if (FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | + if (FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, @@ -981,6 +981,7 @@ R_API bool r_sys_arch_match(const char *archstr, const char *arch) { } R_API int r_sys_arch_id(const char *arch) { + r_return_val_if_fail (arch, 0); int i; for (i = 0; arch_bit_array[i].name; i++) { if (!strcmp (arch, arch_bit_array[i].name)) { @@ -1004,9 +1005,6 @@ R_API const char *r_sys_arch_str(int arch) { R_API int r_sys_run(const ut8 *buf, int len) { const int sz = 4096; int pdelta, ret, (*cb)(); -#if USE_FORK - int st, pid; -#endif // TODO: define R_SYS_ALIGN_FORWARD in r_util.h ut8 *ptr, *p = malloc ((sz + len) << 1); ptr = p; @@ -1024,11 +1022,7 @@ R_API int r_sys_run(const ut8 *buf, int len) { //r_mem_protect (ptr, sz, "rwx"); // try, ignore if fail cb = (int (*)())ptr; #if USE_FORK -#if R2__UNIX__ - pid = r_sys_fork (); -#else - pid = -1; -#endif + int pid = r_sys_fork (); if (pid < 0) { return cb (); } @@ -1037,7 +1031,7 @@ R_API int r_sys_run(const ut8 *buf, int len) { exit (ret); return ret; } - st = 0; + int st = 0; waitpid (pid, &st, 0); if (WIFSIGNALED (st)) { int num = WTERMSIG(st);