VPATH = ../common
 OBJDIR = obj
 
-LDLIBS = -L/opt/local/lib -L/usr/local/lib -lusb -lreadline -lpthread
+LDLIBS = -L/opt/local/lib -L/usr/local/lib -lreadline -lpthread
 LDFLAGS = $(COMMON_FLAGS)
 CFLAGS = -std=c99 -I. -I../include -I../common -I/opt/local/include -Wall -Wno-unused-function $(COMMON_FLAGS) -g -O4
 
 QTGUI = guidummy.o
 endif
 
-CMDSRCS = \
-                       nonce2key/crapto1.c\
-                       nonce2key/crypto1.c\
-                       nonce2key/nonce2key.c\
+CORESRCS =     uart.c \
+               util.c \
+               sleep.c
+
+
+CMDSRCS =      nonce2key/crapto1.c\
+               nonce2key/crypto1.c\
+               nonce2key/nonce2key.c\
                        mifarehost.c\
                        crc16.c \
                        iso14443crc.c \
                        data.c \
                        graph.c \
                        ui.c \
-                       uart.c \
-                       util.c \
                        cmddata.c \
                        cmdhf.c \
                        cmdhf14a.c \
                        cmdlft55xx.c \
                        cmdlfpcf7931.c
 
+COREOBJS = $(CORESRCS:%.c=$(OBJDIR)/%.o)
 CMDOBJS = $(CMDSRCS:%.c=$(OBJDIR)/%.o)
 
 RM = rm -f
 all-static: snooper cli flasher
        
 proxmark3: LDLIBS+=$(QTLDLIBS)
-proxmark3: $(OBJDIR)/proxmark3.o $(CMDOBJS) $(OBJDIR)/uart.o $(QTGUI)
+proxmark3: $(OBJDIR)/proxmark3.o $(COREOBJS) $(CMDOBJS) $(QTGUI)
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
-snooper: $(OBJDIR)/snooper.o $(CMDOBJS) $(OBJDIR)/uart.o $(OBJDIR)/guidummy.o
+snooper: $(OBJDIR)/snooper.o $(COREOBJS) $(CMDOBJS) $(OBJDIR)/guidummy.o
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
-cli: $(OBJDIR)/cli.o $(CMDOBJS) $(OBJDIR)/uart.o $(OBJDIR)/guidummy.o
+cli: $(OBJDIR)/cli.o $(COREOBJS) $(CMDOBJS) $(OBJDIR)/guidummy.o
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
-flasher: $(OBJDIR)/flash.o $(OBJDIR)/flasher.o $(OBJDIR)/uart.o
+flasher: $(OBJDIR)/flash.o $(OBJDIR)/flasher.o $(COREOBJS)
        $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
 
 $(OBJDIR)/%.o: %.c
 
 #include "common.h"
 #include "cmdmain.h"
 #include "sleep.h"
-
 #include "cmdhfepa.h"
 
 static int CmdHelp(const char *Cmd);
 
        // Read key file\r
        \r
        for (i=0 ; i<16 ; i++) {\r
-               fread ( keyA[i], 1, 6, fin );\r
+               if (fread( keyA[i], 1, 6, fin ) == 0) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
        }\r
        for (i=0 ; i<16 ; i++) {\r
-               fread ( keyB[i], 1, 6, fin );\r
+               if (fread( keyB[i], 1, 6, fin ) == 0) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
        }\r
        \r
        // Read access rights to sectors\r
        }\r
        \r
        for (i=0 ; i<16 ; i++) {\r
-               fread(keyA[i], 1, 6, fkeys);\r
+               if (fread(keyA[i], 1, 6, fkeys) == 0) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
        }\r
        for (i=0 ; i<16 ; i++) {\r
-               fread(keyB[i], 1, 6, fkeys);\r
+               if (fread(keyB[i], 1, 6, fkeys) == 0) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
        }\r
        \r
        PrintAndLog("Restoring dumpdata.bin to card");\r
                        UsbCommand c = {CMD_MIFARE_WRITEBL, {i*4 + j, keyType, 0}};\r
                        memcpy(c.d.asBytes, key, 6);\r
                        \r
-                       fread(bldata, 1, 16, fdump);\r
+                       if (fread(bldata, 1, 16, fdump) == 0) {\r
+        PrintAndLog("File reading error.");\r
+        return 2;\r
+      }\r
                                        \r
                        if (j == 3) {\r
                                bldata[0]  = (keyA[i][0]);\r
                        if ( (f = fopen( filename , "r")) ) {\r
                                while( !feof(f) ){\r
                                        memset(buf, 0, sizeof(buf));\r
-                                       fgets(buf, sizeof(buf), f);\r
-                                       \r
+                                       if (fgets(buf, sizeof(buf), f) == NULL) {\r
+            PrintAndLog("File reading error.");\r
+            return 2;\r
+          }\r
+          \r
                                        if (strlen(buf) < 12 || buf[11] == '\n')\r
                                                continue;\r
                                \r
        blockNum = 0;\r
        while(!feof(f)){\r
                memset(buf, 0, sizeof(buf));\r
-               fgets(buf, sizeof(buf), f);\r
+               if (fgets(buf, sizeof(buf), f) == NULL) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
 \r
                if (strlen(buf) < 32){\r
                        if(strlen(buf) && feof(f))\r
                flags = CSETBLOCK_INIT_FIELD + CSETBLOCK_WUPC;\r
                while(!feof(f)){\r
                        memset(buf, 0, sizeof(buf));\r
-                       fgets(buf, sizeof(buf), f);\r
+                       if (fgets(buf, sizeof(buf), f) == NULL) {\r
+        PrintAndLog("File reading error.");\r
+        return 2;\r
+      }\r
 \r
                        if (strlen(buf) < 32){\r
                                if(strlen(buf) && feof(f))\r
 
                        return 1;
                }
                tag_mem_supplied = true;
-               fread(c.d.asBytes,48,1,pf);
+               if (fread(c.d.asBytes,48,1,pf) == 0) {
+      PrintAndLog("Error: File reading error");
+                       return 1;
+    }
                fclose(pf);
        } else {
                tag_mem_supplied = false;
 
        blockNum = 0;\r
        while(!feof(f)){\r
                memset(buf, 0, sizeof(buf));\r
-               fgets(buf, sizeof(buf), f);\r
+               if (fgets(buf, sizeof(buf), f) == NULL) {\r
+      PrintAndLog("File reading error.");\r
+                       return 2;\r
+    }\r
 \r
                if (strlen(buf) < 32){\r
                        if (feof(f)) break;\r
 
 #include "uart.h"
 #include "messages.h"
 #include "ui.h"
+#include "sleep.h"
 
 static serial_port sp;
 static UsbCommand txcmd;
 
 #define lli PRIi64
 #define hhu PRIu8
 
-#include <usb.h>
 #include "usb_cmd.h"
 
 #define PROXPROMPT "proxmark3> "
 
--- /dev/null
+//-----------------------------------------------------------------------------
+// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
+//
+// 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.
+//-----------------------------------------------------------------------------
+// platform-independant sleep macros
+//-----------------------------------------------------------------------------
+
+#ifndef _WIN32
+
+#define _POSIX_C_SOURCE        199309L
+#include "sleep.h"
+#include <time.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <errno.h>
+
+void nsleep(uint64_t n) {
+  struct timespec timeout;
+  timeout.tv_sec = n/1000000000;
+  timeout.tv_nsec = n%1000000000;
+  while (nanosleep(&timeout, &timeout) && errno == EINTR);
+}
+
+#endif // _WIN32
+
 
 #define SLEEP_H__
 
 #ifdef _WIN32
-#include <windows.h>
-#define sleep(n) Sleep(1000 * n)
-#define msleep(n) Sleep(n)
+# include <windows.h>
+# define sleep(n) Sleep(1000 * n)
+# define msleep(n) Sleep(n)
 #else
-#include <unistd.h>
-#define msleep(n) usleep(1000 * n)
-#endif
+# include <inttypes.h>
+# include <unistd.h>
+  void nsleep(uint64_t n);
+# define msleep(n) nsleep(1000000 * n)
+# define usleep(n) nsleep(1000 * n)
+#endif // _WIN32
 
-#endif
+#endif // SLEEP_H__
 
 
 #include <ctype.h>
 #include <time.h>
 
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#ifndef MIN
+# define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef MAX
+# define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
 
 int ukbhit(void);
 
 
 #include <at91sam7s512.h>
 typedef unsigned char byte_t;
 
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#ifndef MIN
+# define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef MAX
+# define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
 
 #endif