aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/app_voicemail.c6
-rw-r--r--cdr/cdr_csv.c2
-rw-r--r--cdr/cdr_manager.c6
-rw-r--r--cdr/cdr_odbc.c2
-rw-r--r--cdr/cdr_pgsql.c2
-rw-r--r--cdr/cdr_radius.c6
-rw-r--r--cdr/cdr_sqlite.c6
-rw-r--r--cdr/cdr_tds.c2
-rw-r--r--channels/chan_iax2.c3
-rw-r--r--channels/chan_mgcp.c2
-rw-r--r--channels/chan_phone.c2
-rw-r--r--include/asterisk/utils.h7
-rw-r--r--main/asterisk.c4
-rw-r--r--main/callerid.c2
-rw-r--r--main/cdr.c3
-rw-r--r--main/logger.c4
-rw-r--r--main/pbx.c2
-rw-r--r--main/say.c73
18 files changed, 80 insertions, 54 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 01dbbfb99..c585c2e5a 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -2111,7 +2111,7 @@ static int get_date(char *s, int len)
struct tm tm;
time_t t;
t = time(0);
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
return strftime(s, len, "%a %b %e %r %Z %Y", &tm);
}
@@ -4223,10 +4223,10 @@ static int play_message_datetime(struct ast_channel *chan, struct ast_vm_user *v
/* No internal variable parsing for now, so we'll comment it out for the time being */
#if 0
/* Set the DIFF_* variables */
- localtime_r(&t, &time_now);
+ ast_localtime(&t, &time_now, NULL);
tv_now = ast_tvnow();
tnow = tv_now.tv_sec;
- localtime_r(&tnow,&time_then);
+ ast_localtime(&tnow, &time_then, NULL);
/* Day difference */
if (time_now.tm_year == time_then.tm_year)
diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index 350620315..5475398ac 100644
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -199,7 +199,7 @@ static int append_date(char *buf, struct timeval tv, size_t bufsize)
if (usegmtime) {
gmtime_r(&t,&tm);
} else {
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
}
strftime(tmp, sizeof(tmp), DATE_FORMAT, &tm);
return append_string(buf, tmp, bufsize);
diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c
index bd6ef6709..352d7d400 100644
--- a/cdr/cdr_manager.c
+++ b/cdr/cdr_manager.c
@@ -95,17 +95,17 @@ static int manager_log(struct ast_cdr *cdr)
return 0;
t = cdr->start.tv_sec;
- localtime_r(&t, &timeresult);
+ ast_localtime(&t, &timeresult, NULL);
strftime(strStartTime, sizeof(strStartTime), DATE_FORMAT, &timeresult);
if (cdr->answer.tv_sec) {
t = cdr->answer.tv_sec;
- localtime_r(&t, &timeresult);
+ ast_localtime(&t, &timeresult, NULL);
strftime(strAnswerTime, sizeof(strAnswerTime), DATE_FORMAT, &timeresult);
}
t = cdr->end.tv_sec;
- localtime_r(&t, &timeresult);
+ ast_localtime(&t, &timeresult, NULL);
strftime(strEndTime, sizeof(strEndTime), DATE_FORMAT, &timeresult);
manager_event(EVENT_FLAG_CALL, "Cdr",
diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c
index db93eac55..4afda0e8e 100644
--- a/cdr/cdr_odbc.c
+++ b/cdr/cdr_odbc.c
@@ -99,7 +99,7 @@ static int odbc_log(struct ast_cdr *cdr)
if (usegmtime)
gmtime_r(&cdr->start.tv_sec,&tm);
else
- localtime_r(&cdr->start.tv_sec,&tm);
+ ast_localtime(&cdr->start.tv_sec, &tm, NULL);
ast_mutex_lock(&odbc_lock);
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index dd43b45ba..7788cf037 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -77,7 +77,7 @@ static int pgsql_log(struct ast_cdr *cdr)
ast_mutex_lock(&pgsql_lock);
- localtime_r(&cdr->start.tv_sec,&tm);
+ ast_localtime(&cdr->start.tv_sec, &tm, NULL);
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
if ((!connected) && pghostname && pgdbuser && pgpassword && pgdbname) {
diff --git a/cdr/cdr_radius.c b/cdr/cdr_radius.c
index 9f9a4470a..6d890e764 100644
--- a/cdr/cdr_radius.c
+++ b/cdr/cdr_radius.c
@@ -145,7 +145,7 @@ static int build_radius_record(VALUE_PAIR **send, struct ast_cdr *cdr)
if (ast_test_flag(&global_flags, RADIUS_FLAG_USEGMTIME))
gmtime_r(&(cdr->start.tv_sec), &tm);
else
- localtime_r(&(cdr->start.tv_sec), &tm);
+ ast_localtime(&(cdr->start.tv_sec), &tm, NULL);
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
if (!rc_avpair_add(rh, send, PW_AST_START_TIME, timestr, strlen(timestr), VENDOR_CODE))
return -1;
@@ -154,7 +154,7 @@ static int build_radius_record(VALUE_PAIR **send, struct ast_cdr *cdr)
if (ast_test_flag(&global_flags, RADIUS_FLAG_USEGMTIME))
gmtime_r(&(cdr->answer.tv_sec), &tm);
else
- localtime_r(&(cdr->answer.tv_sec), &tm);
+ ast_localtime(&(cdr->answer.tv_sec), &tm, NULL);
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
if (!rc_avpair_add(rh, send, PW_AST_ANSWER_TIME, timestr, strlen(timestr), VENDOR_CODE))
return -1;
@@ -163,7 +163,7 @@ static int build_radius_record(VALUE_PAIR **send, struct ast_cdr *cdr)
if (ast_test_flag(&global_flags, RADIUS_FLAG_USEGMTIME))
gmtime_r(&(cdr->end.tv_sec), &tm);
else
- localtime_r(&(cdr->end.tv_sec), &tm);
+ ast_localtime(&(cdr->end.tv_sec), &tm, NULL);
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
if (!rc_avpair_add(rh, send, PW_AST_END_TIME, timestr, strlen(timestr), VENDOR_CODE))
return -1;
diff --git a/cdr/cdr_sqlite.c b/cdr/cdr_sqlite.c
index 146f7a209..5aa8a5154 100644
--- a/cdr/cdr_sqlite.c
+++ b/cdr/cdr_sqlite.c
@@ -101,15 +101,15 @@ static int sqlite_log(struct ast_cdr *cdr)
ast_mutex_lock(&sqlite_lock);
t = cdr->start.tv_sec;
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(startstr, sizeof(startstr), DATE_FORMAT, &tm);
t = cdr->answer.tv_sec;
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(answerstr, sizeof(answerstr), DATE_FORMAT, &tm);
t = cdr->end.tv_sec;
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(endstr, sizeof(endstr), DATE_FORMAT, &tm);
for(count=0; count<5; count++) {
diff --git a/cdr/cdr_tds.c b/cdr/cdr_tds.c
index 2ac8481a8..444751d1a 100644
--- a/cdr/cdr_tds.c
+++ b/cdr/cdr_tds.c
@@ -286,7 +286,7 @@ static void get_date(char *dateField, struct timeval tv)
if (!ast_tvzero(tv))
{
t = tv.tv_sec;
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(buf, 80, DATE_FORMAT, &tm);
sprintf(dateField, "'%s'", buf);
}
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 64a43df98..d3e0a7e70 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -2761,9 +2761,10 @@ static unsigned int iax2_datetime(const char *tz)
struct tm tm;
unsigned int tmp;
time(&t);
- localtime_r(&t, &tm);
if (!ast_strlen_zero(tz))
ast_localtime(&t, &tm, tz);
+ else
+ ast_localtime(&t, &tm, NULL);
tmp = (tm.tm_sec >> 1) & 0x1f; /* 5 bits of seconds */
tmp |= (tm.tm_min & 0x3f) << 5; /* 6 bits of minutes */
tmp |= (tm.tm_hour & 0x1f) << 11; /* 5 bits of hours */
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 079c6b56e..bda08d7a3 100644
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -2214,7 +2214,7 @@ static int transmit_notify_request_with_callerid(struct mgcp_subchannel *sub, ch
struct mgcp_endpoint *p = sub->parent;
time(&t);
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
n = callername;
l = callernum;
if (!n)
diff --git a/channels/chan_phone.c b/channels/chan_phone.c
index 961ec78b3..d5b4500a9 100644
--- a/channels/chan_phone.c
+++ b/channels/chan_phone.c
@@ -295,7 +295,7 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout)
int start;
time(&UtcTime);
- localtime_r(&UtcTime,&tm);
+ ast_localtime(&UtcTime, &tm, NULL);
memset(&cid, 0, sizeof(PHONE_CID));
if(&tm != NULL) {
diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h
index 1183876e9..1e5203671 100644
--- a/include/asterisk/utils.h
+++ b/include/asterisk/utils.h
@@ -32,12 +32,14 @@
#include <arpa/inet.h> /* we want to override inet_ntoa */
#include <netdb.h>
#include <limits.h>
+#include <time.h> /* we want to override localtime_r */
#include "asterisk/lock.h"
#include "asterisk/time.h"
#include "asterisk/strings.h"
#include "asterisk/logger.h"
#include "asterisk/compiler.h"
+#include "asterisk/localtime.h"
/*! \note
\verbatim
@@ -235,6 +237,11 @@ const char *ast_inet_ntoa(struct in_addr ia);
#endif
#define inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__
+#ifdef localtime_r
+#undef localtime_r
+#endif
+#define localtime_r __dont_use_localtime_r_use_ast_localtime_instead__
+
int ast_utils_init(void);
int ast_wait_for_input(int fd, int ms);
diff --git a/main/asterisk.c b/main/asterisk.c
index 7eccefdbf..0c36fda6a 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -1828,7 +1828,7 @@ static char *cli_prompt(EditLine *el)
case 'd': /* date */
memset(&tm, 0, sizeof(tm));
time(&ts);
- if (localtime_r(&ts, &tm)) {
+ if (ast_localtime(&ts, &tm, NULL)) {
strftime(p, sizeof(prompt) - strlen(prompt), "%Y-%m-%d", &tm);
}
break;
@@ -1888,7 +1888,7 @@ static char *cli_prompt(EditLine *el)
case 't': /* time */
memset(&tm, 0, sizeof(tm));
time(&ts);
- if (localtime_r(&ts, &tm)) {
+ if (ast_localtime(&ts, &tm, NULL)) {
strftime(p, sizeof(prompt) - strlen(prompt), "%H:%M:%S", &tm);
}
break;
diff --git a/main/callerid.c b/main/callerid.c
index 901137348..dfb43c77b 100644
--- a/main/callerid.c
+++ b/main/callerid.c
@@ -720,7 +720,7 @@ static int callerid_genmsg(char *msg, int size, const char *number, const char *
int i,x;
/* Get the time */
time(&t);
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
ptr = msg;
diff --git a/main/cdr.c b/main/cdr.c
index ee0fb789e..baa1165f8 100644
--- a/main/cdr.c
+++ b/main/cdr.c
@@ -208,7 +208,8 @@ static void cdr_get_tv(struct timeval tv, const char *fmt, char *buf, int bufsiz
time_t t = tv.tv_sec;
if (t) {
struct tm tm;
- localtime_r(&t, &tm);
+
+ ast_localtime(&t, &tm, NULL);
strftime(buf, bufsize, fmt, &tm);
}
}
diff --git a/main/logger.c b/main/logger.c
index cacedee44..e2291d966 100644
--- a/main/logger.c
+++ b/main/logger.c
@@ -726,7 +726,7 @@ void ast_log(int level, const char *file, int line, const char *function, const
return;
time(&t);
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(date, sizeof(date), dateformat, &tm);
AST_LIST_LOCK(&logchannels);
@@ -860,7 +860,7 @@ void ast_verbose(const char *fmt, ...)
char *datefmt;
time(&t);
- localtime_r(&t, &tm);
+ ast_localtime(&t, &tm, NULL);
strftime(date, sizeof(date), dateformat, &tm);
datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1);
sprintf(datefmt, "[%s] %s", date, fmt);
diff --git a/main/pbx.c b/main/pbx.c
index 56e291175..73c80ee05 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -4232,7 +4232,7 @@ int ast_check_timing(const struct ast_timing *i)
struct tm tm;
time_t t = time(NULL);
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
/* If it's not the right month, return */
if (!(i->monthmask & (1 << tm.tm_mon)))
diff --git a/main/say.c b/main/say.c
index 4d05848d0..2c3937c76 100644
--- a/main/say.c
+++ b/main/say.c
@@ -2924,8 +2924,8 @@ int ast_say_date_pt(struct ast_channel *chan, time_t t, const char *ints, const
struct tm tm;
char fn[256];
int res = 0;
- ast_localtime(&t,&tm,NULL);
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday);
if (!res)
res = wait_file(chan, ints, fn, lang);
@@ -5480,7 +5480,8 @@ int ast_say_time_en(struct ast_channel *chan, time_t t, const char *ints, const
struct tm tm;
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
hour = tm.tm_hour;
if (!hour)
hour = 12;
@@ -5526,7 +5527,8 @@ int ast_say_time_de(struct ast_channel *chan, time_t t, const char *ints, const
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res)
res = ast_say_number(chan, tm.tm_hour, ints, lang, "n");
if (!res)
@@ -5544,7 +5546,8 @@ int ast_say_time_fr(struct ast_channel *chan, time_t t, const char *ints, const
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_number(chan, tm.tm_hour, ints, lang, "f");
if (!res)
@@ -5561,7 +5564,8 @@ int ast_say_time_nl(struct ast_channel *chan, time_t t, const char *ints, const
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res)
res = ast_say_number(chan, tm.tm_hour, ints, lang, (char *) NULL);
if (!res)
@@ -5580,7 +5584,8 @@ int ast_say_time_pt(struct ast_channel *chan, time_t t, const char *ints, const
struct tm tm;
int res = 0;
int hour;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
hour = tm.tm_hour;
if (!res)
res = ast_say_number(chan, hour, ints, lang, "f");
@@ -5606,7 +5611,8 @@ int ast_say_time_pt_BR(struct ast_channel *chan, time_t t, const char *ints, con
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_number(chan, tm.tm_hour, ints, lang, "f");
if (!res) {
@@ -5635,7 +5641,8 @@ int ast_say_time_tw(struct ast_channel *chan, time_t t, const char *ints, const
struct tm tm;
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
hour = tm.tm_hour;
if (!hour)
hour = 12;
@@ -5702,7 +5709,8 @@ int ast_say_datetime_en(struct ast_channel *chan, time_t t, const char *ints, co
char fn[256];
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res) {
snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday);
res = ast_streamfile(chan, fn, lang);
@@ -5765,7 +5773,8 @@ int ast_say_datetime_de(struct ast_channel *chan, time_t t, const char *ints, co
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_date(chan, t, ints, lang);
if (!res)
ast_say_time(chan, t, ints, lang);
@@ -5779,7 +5788,8 @@ int ast_say_datetime_fr(struct ast_channel *chan, time_t t, const char *ints, co
struct tm tm;
char fn[256];
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res)
res = ast_say_number(chan, tm.tm_mday, ints, lang, (char *) NULL);
@@ -5817,7 +5827,8 @@ int ast_say_datetime_nl(struct ast_channel *chan, time_t t, const char *ints, co
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_date(chan, t, ints, lang);
if (!res) {
res = ast_streamfile(chan, "digits/nl-om", lang);
@@ -5836,7 +5847,8 @@ int ast_say_datetime_pt(struct ast_channel *chan, time_t t, const char *ints, co
char fn[256];
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res) {
snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday);
res = ast_streamfile(chan, fn, lang);
@@ -5899,7 +5911,8 @@ int ast_say_datetime_pt_BR(struct ast_channel *chan, time_t t, const char *ints,
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_date(chan, t, ints, lang);
if (!res)
res = ast_say_time(chan, t, ints, lang);
@@ -5913,7 +5926,8 @@ int ast_say_datetime_tw(struct ast_channel *chan, time_t t, const char *ints, co
char fn[256];
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
if (!res)
res = ast_say_number(chan, tm.tm_year + 1900, ints, lang, (char *) NULL);
if (!res) {
@@ -5992,8 +6006,8 @@ int ast_say_datetime_from_now_en(struct ast_channel *chan, time_t t, const char
time(&nowt);
- localtime_r(&t,&tm);
- localtime_r(&nowt,&now);
+ ast_localtime(&t, &tm, NULL);
+ ast_localtime(&nowt,&now, NULL);
daydiff = now.tm_yday - tm.tm_yday;
if ((daydiff < 0) || (daydiff > 6)) {
/* Day of month and month */
@@ -6032,8 +6046,8 @@ int ast_say_datetime_from_now_fr(struct ast_channel *chan, time_t t, const char
time(&nowt);
- localtime_r(&t,&tm);
- localtime_r(&nowt,&now);
+ ast_localtime(&t, &tm, NULL);
+ ast_localtime(&nowt, &now, NULL);
daydiff = now.tm_yday - tm.tm_yday;
if ((daydiff < 0) || (daydiff > 6)) {
/* Day of month and month */
@@ -6072,8 +6086,8 @@ int ast_say_datetime_from_now_pt(struct ast_channel *chan, time_t t, const char
time(&nowt);
- localtime_r(&t,&tm);
- localtime_r(&nowt,&now);
+ ast_localtime(&t, &tm, NULL);
+ ast_localtime(&nowt, &now, NULL);
daydiff = now.tm_yday - tm.tm_yday;
if ((daydiff < 0) || (daydiff > 6)) {
/* Day of month and month */
@@ -6296,7 +6310,7 @@ static int ast_say_time_gr(struct ast_channel *chan, time_t t, const char *ints,
int res = 0;
int hour, pm=0;
- localtime_r(&t,&tm);
+ ast_localtime(&t, &tm, NULL);
hour = tm.tm_hour;
if (!hour)
@@ -6341,7 +6355,8 @@ static int ast_say_datetime_gr(struct ast_channel *chan, time_t t, const char *i
struct tm tm;
char fn[256];
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
/* W E E K - D A Y */
@@ -6829,7 +6844,8 @@ static int ast_say_time_ge(struct ast_channel *chan, time_t t, const char *ints,
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_number(chan, tm.tm_hour, ints, lang, (char*)NULL);
if (!res) {
@@ -6859,7 +6875,8 @@ static int ast_say_datetime_ge(struct ast_channel *chan, time_t t, const char *i
{
struct tm tm;
int res = 0;
- localtime_r(&t,&tm);
+
+ ast_localtime(&t, &tm, NULL);
res = ast_say_date(chan, t, ints, lang);
if (!res)
ast_say_time(chan, t, ints, lang);
@@ -6882,8 +6899,8 @@ static int ast_say_datetime_from_now_ge(struct ast_channel *chan, time_t t, cons
time(&nowt);
- localtime_r(&t,&tm);
- localtime_r(&nowt,&now);
+ ast_localtime(&t, &tm, NULL);
+ ast_localtime(&nowt, &now, NULL);
daydiff = now.tm_yday - tm.tm_yday;
if ((daydiff < 0) || (daydiff > 6)) {
/* Day of month and month */