X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/ad5bc8cc8c0a6573d6b2c7bc58bf94f7ab66ad4c..966c111e8c8e45e624465502d0ee405ebda9a39c:/client/proxmark3.c diff --git a/client/proxmark3.c b/client/proxmark3.c index 0bd8ff9d..670b9720 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -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; @@ -71,7 +73,7 @@ byte_t* prx = rx; // printf("██████╔╝██╔████╔██║ ████╔╝\n"); // printf("██╔═══╝ ██║╚██╔╝██║ ══█║ iceman@icesql.net\n"); // printf("██║ ██║ ╚═╝ ██║ ████╔╝ https://github.com/iceman1001/proxmark3\n"); - // printf("╚═╝ ╚═╝ ╚═╝ ╚═══╝v1.6.4\n"); + // printf("╚═╝ ╚═╝ ╚═╝ ╚═══╝v1.7.0\n"); // } @@ -98,13 +100,13 @@ static void *uart_receiver(void *targ) { prx = rx; if (txcmd_pending) { - if ( !uart_send(sp, (byte_t*) &txcmd, sizeof(UsbCommand))) { + bool res = uart_send(sp, (byte_t*) &txcmd, sizeof(UsbCommand)); + if (!res) { PrintAndLog("Sending bytes to proxmark failed"); } txcmd_pending = false; } } - pthread_exit(NULL); return NULL; } @@ -115,7 +117,6 @@ static void *main_loop(void *targ) { char *cmd = NULL; pthread_t reader_thread; - if (arg->usb_present == 1) { rarg.run = 1; pthread_create(&reader_thread, NULL, &uart_receiver, &rarg); @@ -168,9 +169,10 @@ static void *main_loop(void *targ) { // this one should pick up all non-null cmd... // why is there a if (cmd) { - - while(cmd[strlen(cmd) - 1] == ' ') - cmd[strlen(cmd) - 1] = 0x00; + if (strlen(cmd) > 0) { + while(cmd[strlen(cmd) - 1] == ' ') + cmd[strlen(cmd) - 1] = 0x00; + } if (cmd[0] != 0x00) { int ret = CommandReceived(cmd); @@ -190,7 +192,6 @@ static void *main_loop(void *targ) { if (script_file) { fclose(script_file); - script_file = NULL; } write_history(".history"); @@ -218,6 +219,33 @@ static void dumpAllHelp(int markdown) dumpCommandsRecursive(cmds, markdown); } +static char *my_executable_path = NULL; +static char *my_executable_directory = NULL; + +const char *get_my_executable_path(void) +{ + return my_executable_path; +} + +const char *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)); @@ -240,6 +268,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, @@ -248,8 +279,7 @@ int main(int argc, char* argv[]) { pthread_t main_loop_threat; - - sp = uart_open(argv[1]); + sp = uart_open(argv[1]); if (sp == INVALID_SERIAL_PORT) { printf("ERROR: invalid serial port\n"); marg.usb_present = 0;