Make LUA scripting work even if proxmark3 is called from arbitrary working directory

- add @gpakosz whereami library (https://github.com/gpakosz/whereami) in order to ...
- determine and set absolute paths for LUA scripts and LUA libraries
This commit is contained in:
pwpiwi 2017-02-23 18:30:29 +01:00
commit 4197a3f6ff
8 changed files with 782 additions and 8 deletions

View file

@ -25,6 +25,8 @@
#include "sleep.h"
#include "cmdparser.h"
#include "cmdhw.h"
#include "whereami.h"
// a global mutex to prevent interlaced printing from different threads
pthread_mutex_t print_lock;
@ -195,6 +197,33 @@ static void dumpAllHelp(int markdown)
dumpCommandsRecursive(cmds, markdown);
}
static char *my_executable_path = NULL;
static char *my_executable_directory = NULL;
const char const *get_my_executable_path(void)
{
return my_executable_path;
}
const char const *get_my_executable_directory(void)
{
return my_executable_directory;
}
static void set_my_executable_path(void)
{
int path_length = wai_getExecutablePath(NULL, 0, NULL);
if (path_length != -1) {
my_executable_path = (char*)malloc(path_length + 1);
int dirname_length = 0;
if (wai_getExecutablePath(my_executable_path, path_length, &dirname_length) != -1) {
my_executable_path[path_length] = '\0';
my_executable_directory = (char *)malloc(dirname_length + 2);
strncpy(my_executable_directory, my_executable_path, dirname_length+1);
}
}
}
int main(int argc, char* argv[]) {
srand(time(0));
@ -217,6 +246,9 @@ int main(int argc, char* argv[]) {
dumpAllHelp(1);
return 0;
}
set_my_executable_path();
// Make sure to initialize
struct main_loop_arg marg = {
.usb_present = 0,