X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/9acf6b941e1356590e94e8e4a0bcf5dd3318087c..93a680e4c9c899d86ff3fde0933fb5367b34af50:/src/src/os.c diff --git a/src/src/os.c b/src/src/os.c index 2b6f79c3f..1cde1b8ec 100644 --- a/src/src/os.c +++ b/src/src/os.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2012 */ +/* Copyright (c) University of Cambridge 1995 - 2016 */ /* See the file NOTICE for conditions of use and distribution. */ #ifdef STAND_ALONE @@ -833,38 +833,54 @@ os_get_dns_resolver_res(void) #endif /* OS_GET_DNS_RESOLVER_RES */ - /* ----------------------------------------------------------------------- */ /*********************************************************** -* Time-related functions * +* unsetenv() * ***********************************************************/ -/* At least Solaris, and probably others, don't have this */ +/* Most modern systems define int unsetenv(const char*), +* some don't. */ + +#if !defined(OS_UNSETENV) +int +os_unsetenv(const uschar * name) +{ +return unsetenv(CS name); +} +#endif + +/* ----------------------------------------------------------------------- */ -#ifndef _BSD_SOURCE +/*********************************************************** +* getcwd() * +***********************************************************/ -# include -# include +/* Glibc allows getcwd(NULL, 0) to do auto-allocation. Some systems +do auto-allocation, but need the size of the buffer, and others +may not even do this. If the OS supports getcwd(NULL, 0) we'll use +this, for all other systems we provide our own getcwd() */ -time_t -timegm(struct tm * tm) +#if !defined(OS_GETCWD) +uschar * +os_getcwd(uschar * buffer, size_t size) { -time_t ret; -char *tz; - -tz = getenv("TZ"); -setenv("TZ", "", 1); -tzset(); -ret = mktime(tm); -if (tz) - setenv("TZ", tz, 1); -else - unsetenv("TZ"); -tzset(); -return ret; +return getcwd(CS buffer, size); } +#else +#ifndef PATH_MAX +# define PATH_MAX 4096 +#endif +uschar * +os_getcwd(uschar * buffer, size_t size) +{ +void *rc; +if (!size) size = PATH_MAX; +if (!buffer && !(buffer = US malloc(size))) return NULL; +if (!(buffer = getcwd(CS buffer, size))) return NULL; +return realloc(CS buffer, strlen(buffer) + 1); +} #endif /* ----------------------------------------------------------------------- */ @@ -872,7 +888,6 @@ return ret; - /************************************************* ************************************************** * Stand-alone test program *