Fix non Linux build.

timezone global is a linux-ism whereas it is a function under BSD.
Here a helper to get the timezone value in a more portable manner.
This commit is contained in:
David Carlier 2018-10-26 14:02:09 +00:00
parent b8febe60b4
commit 0b73d0a8d2
3 changed files with 20 additions and 1 deletions

View File

@ -1526,7 +1526,7 @@ void initServerConfig(void) {
server.runid[CONFIG_RUN_ID_SIZE] = '\0'; server.runid[CONFIG_RUN_ID_SIZE] = '\0';
changeReplicationId(); changeReplicationId();
clearReplicationId2(); clearReplicationId2();
server.timezone = timezone; /* Initialized by tzset(). */ server.timezone = getTimeZone(); /* Initialized by tzset(). */
server.configfile = NULL; server.configfile = NULL;
server.executable = NULL; server.executable = NULL;
server.config_hz = CONFIG_DEFAULT_HZ; server.config_hz = CONFIG_DEFAULT_HZ;

View File

@ -652,6 +652,24 @@ sds getAbsolutePath(char *filename) {
return abspath; return abspath;
} }
/*
* Gets the proper timezone in a more portable fashion
* i.e timezone variables are linux specific.
*/
unsigned long getTimeZone(void) {
#ifdef __linux__
return timezone;
#else
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
return tz.tz_minuteswest * 60UL;
#endif
}
/* Return true if the specified path is just a file basename without any /* Return true if the specified path is just a file basename without any
* relative or absolute path. This function just checks that no / or \ * relative or absolute path. This function just checks that no / or \
* character exists inside the specified path, that's enough in the * character exists inside the specified path, that's enough in the

View File

@ -50,6 +50,7 @@ int string2ld(const char *s, size_t slen, long double *dp);
int d2string(char *buf, size_t len, double value); int d2string(char *buf, size_t len, double value);
int ld2string(char *buf, size_t len, long double value, int humanfriendly); int ld2string(char *buf, size_t len, long double value, int humanfriendly);
sds getAbsolutePath(char *filename); sds getAbsolutePath(char *filename);
unsigned long getTimeZone(void);
int pathIsBaseName(char *path); int pathIsBaseName(char *path);
#ifdef REDIS_TEST #ifdef REDIS_TEST