]> git.meshlink.io Git - meshlink/blobdiff - src/dropin.c
Remove everything GPL that is not copyright Guus Sliepen, update copyright statements.
[meshlink] / src / dropin.c
index 89039da34c024b6427d110cfea15ccee3c08acf9..de9205307ea7e8f5522a63e903054a89cfa58fab 100644 (file)
@@ -1,7 +1,6 @@
 /*
     dropin.c -- a set of drop-in replacements for libc functions
-    Copyright (C) 2000-2005 Ivo Timmermans,
-                  2000-2009 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 2014 Guus Sliepen <guus@meshlink.io>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -25,7 +24,7 @@
 #ifndef HAVE_DAEMON
 /*
   Replacement for the daemon() function.
-  
+
   The daemon() function is for programs wishing to detach themselves
   from the controlling terminal and run in the background as system
   daemons.
@@ -104,14 +103,14 @@ char *get_current_dir_name(void) {
        size = 100;
        buf = xmalloc(size);
 
-       errno = 0;                                      /* Success */
+       errno = 0;                                      /* Success */
        r = getcwd(buf, size);
 
        /* getcwd returns NULL and sets errno to ERANGE if the bufferspace
           is insufficient to contain the entire working directory.  */
        while(r == NULL && errno == ERANGE) {
                free(buf);
-               size <<= 1;                             /* double the size */
+               size <<= 1;                             /* double the size */
                buf = xmalloc(size);
                r = getcwd(buf, size);
        }
@@ -158,8 +157,26 @@ int vasprintf(char **buf, const char *fmt, va_list ap) {
 
 #ifndef HAVE_GETTIMEOFDAY
 int gettimeofday(struct timeval *tv, void *tz) {
+#ifdef HAVE_MINGW
+       FILETIME ft;
+       GetSystemTimeAsFileTime(&ft);
+       uint64_t lt = (uint64_t)ft.dwLowDateTime | ((uint64_t)ft.dwHighDateTime << 32);
+       lt -= 116444736000000000ULL;
+       tv->tv_sec = lt / 10000000;
+       tv->tv_usec = (lt / 10) % 1000000;
+#else
+#warning No high resolution time source!
        tv->tv_sec = time(NULL);
        tv->tv_usec = 0;
+#endif
+       return 0;
+}
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep(long long usec) {
+       struct timeval tv = {usec / 1000000, (usec / 1000) % 1000};
+       select(0, NULL, NULL, NULL, &tv);
        return 0;
 }
 #endif