Use time_monotonic for timeouts
authorJoseph C. Lehner <joseph.c.lehner@gmail.com>
Fri, 18 Nov 2016 16:39:04 +0000 (17:39 +0100)
committerJoseph C. Lehner <joseph.c.lehner@gmail.com>
Fri, 18 Nov 2016 16:39:04 +0000 (17:39 +0100)
Makefile
ethsock.c
nmrp.c
nmrpd.h
nmrpflash.dev
util.c

index d05011ec04065530f19b4ba400ba0e01e7a0a813..175ff0689dbcfa0f8e126a852787d7cd75e7f219 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,22 +5,15 @@ LIBS = -lpcap
 CFLAGS += -Wall -g -DNMRPFLASH_VERSION=\"$(VERSION)\"
 LDFLAGS += $(LIBS)
 
-.PHONY: clean install release release/osx release/linux release/win32
-
-nmrpflash: nmrp.o tftp.o ethsock.o main.o
-       $(CC) $(CFLAGS) -o nmrpflash nmrp.o tftp.o ethsock.o main.o $(LDFLAGS)
+nmrpflash_OBJ = nmrp.o tftp.o ethsock.o main.o util.o
 
-nmrp.o: nmrp.c nmrpd.h
-       $(CC) $(CFLAGS) -c -o nmrp.o nmrp.c
-
-tftp.o: tftp.c nmrpd.h
-       $(CC) $(CFLAGS) -c -o tftp.o tftp.c
+.PHONY: clean install release release/osx release/linux release/win32
 
-ethsock.o: ethsock.c nmrpd.h
-       $(CC) $(CFLAGS) -c -o ethsock.o ethsock.c
+nmrpflash: $(nmrpflash_OBJ)
+       $(CC) $(CFLAGS) -o nmrpflash $(nmrpflash_OBJ) $(LDFLAGS)
 
-main.o: main.c nmrpd.h
-       $(CC) $(CFLAGS) -c -o main.o main.c
+%.o: %.c nmrpd.h
+       $(CC) -c $(CFLAGS) $< -o $@
 
 fuzz: clean
        CC=afl-gcc CFLAGS=-DNMRPFLASH_FUZZ make nmrpflash
index 5312e3b06fcb1d410fa1d21893f7bae1c26af6ce..1c6a039c665fcbd34157fe6636a5c462495b9935 100644 (file)
--- a/ethsock.c
+++ b/ethsock.c
@@ -755,12 +755,12 @@ int ethsock_ip_add(struct ethsock *sock, uint32_t ipaddr, uint32_t ipmask, struc
        }
 
        set_addr(&sin, ipaddr);
-       clock_t now = clock();
+       time_t beg = time_monotonic();
 
        /* Wait until the new IP has actually been added */
 
        while (bind(fd, (struct sockaddr*)&sin, sizeof(sin)) != 0) {
-               if (((clock() - now) / CLOCKS_PER_SEC) >= 5) {
+               if ((time_monotonic() - beg) >= 5) {
                        fprintf(stderr, "Failed to bind after 5 seconds: ");
                        sock_perror("bind");
                        DeleteIPAddress((*undo)->context);
diff --git a/nmrp.c b/nmrp.c
index b36983a5775a56a07e0aca733ee6585268a00b11..7f65e5631e26a59f7971b00b72ec0636046ba929 100644 (file)
--- a/nmrp.c
+++ b/nmrp.c
@@ -538,7 +538,7 @@ int nmrp_do(struct nmrpd_args *args)
 
        i = 0;
        upload_ok = 0;
-       beg = time(NULL);
+       beg = time_monotonic();
 
        while (1) {
                printf("\rAdvertising NMRP server on %s ... %c",
@@ -557,7 +557,7 @@ int nmrp_do(struct nmrpd_args *args)
                } else if (status == 1) {
                        goto out;
                } else {
-                       if ((time(NULL) - beg) >= 60) {
+                       if ((time_monotonic() - beg) >= 60) {
                                printf("\nNo response after 60 seconds. Bailing out.\n");
                                goto out;
                        }
diff --git a/nmrpd.h b/nmrpd.h
index d54e4eb64535386aeef2cce5918515a21ed922b0..ac54949efd1dc58be19142b46d4782b041fb215a 100644 (file)
--- a/nmrpd.h
+++ b/nmrpd.h
@@ -129,4 +129,6 @@ int ethsock_for_each_ip(struct ethsock *sock, ethsock_ip_callback_t callback,
 
 int ethsock_ip_add(struct ethsock *sock, uint32_t ipaddr, uint32_t ipmask, struct ethsock_ip_undo **undo);
 int ethsock_ip_del(struct ethsock *sock, struct ethsock_ip_undo **undo);
+
+time_t time_monotonic();
 #endif
index 7015c1255e57ba0706a31ec4b72ad943b300f61a..b7e1253e94b253c71269157d7e7fc16215f98713 100644 (file)
@@ -29,7 +29,7 @@ IncludeVersionInfo=0
 SupportXPThemes=0\r
 CompilerSet=3\r
 CompilerSettings=0000000100000000000001000\r
-UnitCount=5\r
+UnitCount=6\r
 \r
 [VersionInfo]\r
 Major=1\r
@@ -100,3 +100,13 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
+[Unit6]\r
+FileName=util.c\r
+CompileCpp=0\r
+Folder=\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
diff --git a/util.c b/util.c
index ff2b191f21d355054b8d889cf9f815656aa4d495..4743af32abceb89d9bf450a0cb437ec0321285de 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1,4 +1,6 @@
 #include <time.h>
+#include <math.h>
+#include "nmrpd.h"
 
 #ifdef NMRPFLASH_OSX
 #include <mach/mach_time.h>
@@ -10,7 +12,7 @@ time_t time_monotonic()
 #ifndef NMRPFLASH_OSX
        struct timespec ts;
        clock_gettime(CLOCK_MONOTONIC, &ts);
-       return ts.ts_sec;
+       return ts.tv_sec;
 #else
        static double factor = 0.0;
        mach_timebase_info_data_t timebase;
@@ -25,12 +27,3 @@ time_t time_monotonic()
        return round(GetTickCount() / 1000.0);
 #endif
 }
-
-int main()
-{
-       time_t beg = time_monotonic();
-       printf("now: %ld\n", beg);
-       sleep(2);
-       printf("+2s: %ld\n", time_monotonic());
-       return 0;
-}