From ec9c71129f67c5b1c2429dbaefe23e0d19149780 Mon Sep 17 00:00:00 2001 From: pwpiwi Date: Wed, 7 Jun 2017 22:35:20 +0200 Subject: [PATCH] Fix compile errors with MacOS (#312) * Fix compile errors with MacOS - _POSIX_C_SOURCE must not be defined for num_CPU() * separate util_posix.c require changes in tools directory as well * remove unnecessary self-include --- client/Makefile | 3 +- client/cmdhf14a.c | 1 + client/cmdhfepa.c | 1 + client/cmdhfmf.c | 1 + client/cmdhfmfhard.c | 1 + client/cmdmain.c | 1 + client/flash.c | 1 + client/flasher.c | 1 + client/hardnested/hardnested_bruteforce.c | 1 + client/loclass/elite_crack.c | 1 + client/util.c | 50 ++---------------- client/util.h | 10 ---- client/util_posix.c | 63 +++++++++++++++++++++++ client/util_posix.h | 26 ++++++++++ tools/mfkey/Makefile | 2 +- tools/mfkey/mfkey32.c | 3 +- tools/mfkey/mfkey64.c | 2 +- 17 files changed, 109 insertions(+), 59 deletions(-) create mode 100644 client/util_posix.c create mode 100644 client/util_posix.h diff --git a/client/Makefile b/client/Makefile index f6af8602..0d2ae25f 100644 --- a/client/Makefile +++ b/client/Makefile @@ -79,7 +79,8 @@ DEPFLAGS = -MT $@ -MMD -MP -MF $(OBJDIR)/$*.Td POSTCOMPILE = $(MV) -f $(OBJDIR)/$*.Td $(OBJDIR)/$*.d CORESRCS = uart.c \ - util.c + util.c \ + util_posix.c CMDSRCS = crapto1/crapto1.c\ crapto1/crypto1.c\ diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index 58d1e8b2..258a5578 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -15,6 +15,7 @@ #include #include #include "util.h" +#include "util_posix.h" #include "iso14443crc.h" #include "data.h" #include "proxmark3.h" diff --git a/client/cmdhfepa.c b/client/cmdhfepa.c index e73f5834..f3456afb 100644 --- a/client/cmdhfepa.c +++ b/client/cmdhfepa.c @@ -16,6 +16,7 @@ #include #include #include "util.h" +#include "util_posix.h" #include "proxmark3.h" #include "ui.h" #include "cmdparser.h" diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 3fde208f..4cb9577b 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -19,6 +19,7 @@ #include "cmdmain.h" #include "cmdhfmfhard.h" #include "util.h" +#include "util_posix.h" #include "usb_cmd.h" #include "ui.h" #include "mifarehost.h" diff --git a/client/cmdhfmfhard.c b/client/cmdhfmfhard.c index 01dcc35d..6cd75af5 100644 --- a/client/cmdhfmfhard.c +++ b/client/cmdhfmfhard.c @@ -28,6 +28,7 @@ #include "cmdmain.h" #include "ui.h" #include "util.h" +#include "util_posix.h" #include "crapto1/crapto1.h" #include "parity.h" #include "hardnested/hardnested_bruteforce.h" diff --git a/client/cmdmain.c b/client/cmdmain.c index 44c11aeb..f407cee4 100644 --- a/client/cmdmain.c +++ b/client/cmdmain.c @@ -23,6 +23,7 @@ #include "cmdlf.h" #include "cmdmain.h" #include "util.h" +#include "util_posix.h" #include "cmdscript.h" #include "cmdcrc.h" diff --git a/client/flash.c b/client/flash.c index 0b940e99..7622e8a5 100644 --- a/client/flash.c +++ b/client/flash.c @@ -15,6 +15,7 @@ #include #include "proxmark3.h" #include "util.h" +#include "util_posix.h" #include "flash.h" #include "elf.h" #include "proxendian.h" diff --git a/client/flasher.c b/client/flasher.c index 0c1dbd71..48317c1e 100644 --- a/client/flasher.c +++ b/client/flasher.c @@ -12,6 +12,7 @@ #include #include "proxmark3.h" #include "util.h" +#include "util_posix.h" #include "flash.h" #include "uart.h" #include "usb_cmd.h" diff --git a/client/hardnested/hardnested_bruteforce.c b/client/hardnested/hardnested_bruteforce.c index 3218c1aa..3b1c5071 100644 --- a/client/hardnested/hardnested_bruteforce.c +++ b/client/hardnested/hardnested_bruteforce.c @@ -60,6 +60,7 @@ THE SOFTWARE. #include "hardnested_bf_core.h" #include "ui.h" #include "util.h" +#include "util_posix.h" #include "crapto1/crapto1.h" #include "parity.h" diff --git a/client/loclass/elite_crack.c b/client/loclass/elite_crack.c index e52c9a6a..83fb8515 100644 --- a/client/loclass/elite_crack.c +++ b/client/loclass/elite_crack.c @@ -41,6 +41,7 @@ #include #include #include "util.h" +#include "util_posix.h" #include "cipherutils.h" #include "cipher.h" #include "ikeys.h" diff --git a/client/util.c b/client/util.c index 13067ec1..0a92f15a 100644 --- a/client/util.c +++ b/client/util.c @@ -8,10 +8,6 @@ // utilities //----------------------------------------------------------------------------- -#if !defined(_WIN32) -#define _POSIX_C_SOURCE 199309L // need nanosleep() -#endif - #include "util.h" #include @@ -22,6 +18,10 @@ #include #include "data.h" +#ifdef _WIN32 +#include +#endif + #define MAX_BIN_BREAK_LENGTH (3072+384+1) #ifndef _WIN32 @@ -614,48 +614,7 @@ void clean_ascii(unsigned char *buf, size_t len) { } -// Timer functions -#if !defined (_WIN32) -#include - -static void nsleep(uint64_t n) { - struct timespec timeout; - timeout.tv_sec = n/1000000000; - timeout.tv_nsec = n%1000000000; - while (nanosleep(&timeout, &timeout) && errno == EINTR); -} - -void msleep(uint32_t n) { - nsleep(1000000 * n); -} - -#endif // _WIN32 -// a milliseconds timer for performance measurement -uint64_t msclock() { -#if defined(_WIN32) - #include - - // WORKAROUND FOR MinGW (some versions - use if normal code does not compile) - // It has no _ftime_s and needs explicit inclusion of timeb.h - #include - struct _timeb t; - _ftime(&t); - return 1000 * t.time + t.millitm; - - // NORMAL CODE (use _ftime_s) - //struct _timeb t; - //if (_ftime_s(&t)) { - // return 0; - //} else { - // return 1000 * t.time + t.millitm; - //} -#else - struct timespec t; - clock_gettime(CLOCK_MONOTONIC, &t); - return (t.tv_sec * 1000 + t.tv_nsec / 1000000); -#endif -} // determine number of logical CPU cores (use for multithreaded functions) extern int num_CPUs(void) @@ -672,3 +631,4 @@ extern int num_CPUs(void) return 1; #endif } + diff --git a/client/util.h b/client/util.h index 55cc3877..640ef434 100644 --- a/client/util.h +++ b/client/util.h @@ -77,16 +77,6 @@ extern void rol(uint8_t *data, const size_t len); extern void clean_ascii(unsigned char *buf, size_t len); -// timer functions/macros -#ifdef _WIN32 -# include -# define sleep(n) Sleep(1000 *(n)) -# define msleep(n) Sleep((n)) -#else -extern void msleep(uint32_t n); // sleep n milliseconds -#endif // _WIN32 - -extern uint64_t msclock(); // a milliseconds clock extern int num_CPUs(void); // number of logical CPUs #endif // UTIL_H__ diff --git a/client/util_posix.c b/client/util_posix.c new file mode 100644 index 00000000..3e61b674 --- /dev/null +++ b/client/util_posix.c @@ -0,0 +1,63 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2010 iZsh +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// utilities requiring Posix library functions +//----------------------------------------------------------------------------- + +#if !defined(_WIN32) +#define _POSIX_C_SOURCE 199309L // need nanosleep() +#else +#include +#endif + +#include "util_posix.h" +#include +#include + + +// Timer functions +#if !defined (_WIN32) +#include + +static void nsleep(uint64_t n) { + struct timespec timeout; + timeout.tv_sec = n/1000000000; + timeout.tv_nsec = n%1000000000; + while (nanosleep(&timeout, &timeout) && errno == EINTR); +} + +void msleep(uint32_t n) { + nsleep(1000000 * n); +} +#endif // _WIN32 + +// a milliseconds timer for performance measurement +uint64_t msclock() { +#if defined(_WIN32) + #include + + // WORKAROUND FOR MinGW (some versions - use if normal code does not compile) + // It has no _ftime_s and needs explicit inclusion of timeb.h + #include + struct _timeb t; + _ftime(&t); + return 1000 * t.time + t.millitm; + + // NORMAL CODE (use _ftime_s) + //struct _timeb t; + //if (_ftime_s(&t)) { + // return 0; + //} else { + // return 1000 * t.time + t.millitm; + //} +#else + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + return (t.tv_sec * 1000 + t.tv_nsec / 1000000); +#endif +} + diff --git a/client/util_posix.h b/client/util_posix.h new file mode 100644 index 00000000..dcf9d99a --- /dev/null +++ b/client/util_posix.h @@ -0,0 +1,26 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2010 iZsh +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// utilities requiring Posix library functions +//----------------------------------------------------------------------------- + +#ifndef UTIL_POSIX_H__ +#define UTIL_POSIX_H__ + +#include + +#ifdef _WIN32 +# include +# define sleep(n) Sleep(1000 *(n)) +# define msleep(n) Sleep((n)) +#else +extern void msleep(uint32_t n); // sleep n milliseconds +#endif // _WIN32 + +extern uint64_t msclock(); // a milliseconds clock + +#endif diff --git a/tools/mfkey/Makefile b/tools/mfkey/Makefile index fc6170e4..ede971dc 100755 --- a/tools/mfkey/Makefile +++ b/tools/mfkey/Makefile @@ -4,7 +4,7 @@ LD = gcc CFLAGS = -std=c99 -D_ISOC99_SOURCE -I../../common -I../../client -Wall -O3 LDFLAGS = -OBJS = crypto1.o crapto1.o parity.o util.o mfkey.o +OBJS = crypto1.o crapto1.o parity.o util_posix.o mfkey.o EXES = mfkey32 mfkey64 WINEXES = $(patsubst %, %.exe, $(EXES)) diff --git a/tools/mfkey/mfkey32.c b/tools/mfkey/mfkey32.c index 4ab4bad4..a5665ab2 100755 --- a/tools/mfkey/mfkey32.c +++ b/tools/mfkey/mfkey32.c @@ -4,7 +4,8 @@ #include #include "crapto1/crapto1.h" #include "mfkey.h" -#include "util.h" +#include "util_posix.h" + // 32 bit recover key from 2 nonces int main (int argc, char *argv[]) { diff --git a/tools/mfkey/mfkey64.c b/tools/mfkey/mfkey64.c index 1b002812..8bf1d801 100755 --- a/tools/mfkey/mfkey64.c +++ b/tools/mfkey/mfkey64.c @@ -2,7 +2,7 @@ #include #include #include "crapto1/crapto1.h" -#include "util.h" +#include "util_posix.h" int main (int argc, char *argv[]) { -- 2.39.2