X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fdropin.c;h=d086ae1814dfdc3150744165f5b45991f9543a15;hb=ce4d55b72fd4290d4710f10e755f6dd9ed039d88;hp=ab3fd6bb58e91609228d09cbd41c29fc5fe71448;hpb=87416bcd8bd3e8816750150e2dbe90a970400a00;p=tinc diff --git a/src/dropin.c b/src/dropin.c index ab3fd6bb..d086ae18 100644 --- a/src/dropin.c +++ b/src/dropin.c @@ -1,7 +1,7 @@ /* dropin.c -- a set of drop-in replacements for libc functions Copyright (C) 2000-2005 Ivo Timmermans, - 2000-2011 Guus Sliepen + 2000-2022 Guus Sliepen 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 @@ -20,7 +20,9 @@ #include "system.h" +#ifndef HAVE_ASPRINTF #include "xalloc.h" +#endif #ifndef HAVE_DAEMON /* @@ -50,8 +52,9 @@ int daemon(int nochdir, int noclose) { } /* If we are the parent, terminate */ - if(pid) + if(pid) { exit(0); + } /* Detach by becoming the new process group leader */ if(setsid() < 0) { @@ -81,45 +84,13 @@ int daemon(int nochdir, int noclose) { return 0; #else + (void)nochdir; + (void)noclose; return -1; #endif } #endif -#ifndef HAVE_GET_CURRENT_DIR_NAME -/* - Replacement for the GNU get_current_dir_name function: - - get_current_dir_name will malloc(3) an array big enough to hold the - current directory name. If the environment variable PWD is set, and - its value is correct, then that value will be returned. -*/ -char *get_current_dir_name(void) { - size_t size; - char *buf; - char *r; - - /* Start with 100 bytes. If this turns out to be insufficient to - contain the working directory, double the size. */ - size = 100; - buf = xmalloc(size); - - 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 */ - buf = xmalloc(size); - r = getcwd(buf, size); - } - - return buf; -} -#endif - #ifndef HAVE_ASPRINTF int asprintf(char **buf, const char *fmt, ...) { int result; @@ -142,11 +113,12 @@ int vasprintf(char **buf, const char *fmt, va_list ap) { status = vsnprintf(*buf, len, fmt, aq); va_end(aq); - if(status >= 0) + if(status >= 0) { *buf = xrealloc(*buf, status + 1); + } if(status > len - 1) { - len = status; + len = status + 1; va_copy(aq, ap); status = vsnprintf(*buf, len, fmt, aq); va_end(aq); @@ -158,7 +130,7 @@ int vasprintf(char **buf, const char *fmt, va_list ap) { #ifndef HAVE_GETTIMEOFDAY int gettimeofday(struct timeval *tv, void *tz) { -#ifdef HAVE_MINGW +#ifdef HAVE_WINDOWS FILETIME ft; GetSystemTimeAsFileTime(&ft); uint64_t lt = (uint64_t)ft.dwLowDateTime | ((uint64_t)ft.dwHighDateTime << 32); @@ -174,10 +146,11 @@ int gettimeofday(struct timeval *tv, void *tz) { } #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; -} +bool sleep_millis(unsigned int ms) { +#ifdef _MSC_VER + Sleep(ms); + return true; +#else + return !usleep(ms * 1000); #endif +}