From 9baba73625c08ec7230fcc62b9b72e78d7d513c0 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Mon, 31 Mar 2003 03:19:34 +0000 Subject: [PATCH] Eliminate localtime calls, various cleanups git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@723 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_voicemail.c | 23 ++++++------- apps/app_zapateller.c | 13 ++++---- callerid.c | 8 ++--- cdr/cdr_csv.c | 6 ++-- cdr/cdr_mysql.c | 6 ++-- channels/chan_mgcp.c | 6 ++-- channels/chan_phone.c | 14 ++++---- channels/chan_sip.c | 12 ++----- logger.c | 12 +++---- pbx.c | 16 ++++----- say.c | 75 +++++++++++++++++++++---------------------- 11 files changed, 91 insertions(+), 100 deletions(-) diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 13ddcd8cbb..82150d9ee7 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -98,10 +98,11 @@ static char *synopsis_vmain = "Enter voicemail system"; static char *descrip_vmain = -" VoiceMailMain(): Enters the main voicemail system for the checking of voicemail. The mailbox\n" -"can be passed as the option, which will stop the voicemail system from prompting the user\n" -"for the mailbox. If the mailbox is preceeded by 's' then the passsword check will be skipped.\n" -"Returns -1 if the user hangs up or 0 otherwise.\n"; +" VoiceMailMain(): Enters the main voicemail system for the checking of\n" +"voicemail. The mailbox can be passed as the option, which will stop the\n" +"voicemail system from prompting the user for the mailbox. If the mailbox\n" +"is preceded by 's' then the password check will be skipped. Returns -1 if\n" +"the user hangs up or 0 otherwise.\n"; /* Leave a message */ static char *app = "VoiceMail"; @@ -332,7 +333,7 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m char fname[256]; char dur[256]; time_t t; - struct tm *tm; + struct tm tm; char *astattach; struct ast_config *cfg; p = popen(SENDMAIL, "w"); @@ -348,8 +349,8 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m } snprintf(dur, sizeof(dur), "%ld:%02ld", duration / 60, duration % 60); time(&t); - tm = localtime(&t); - strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", tm); + localtime_r(&t,&tm); + strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", &tm); fprintf(p, "Date: %s\n", date); fprintf(p, "From: Asterisk PBX <%s>\n", who); fprintf(p, "To: %s <%s>\n", name, email); @@ -365,7 +366,7 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m fprintf(p, "--%s\n", bound); } fprintf(p, "Content-Type: TEXT/PLAIN; charset=US-ASCII\n\n"); - strftime(date, sizeof(date), "%A, %B %d, %Y at %r", tm); + strftime(date, sizeof(date), "%A, %B %d, %Y at %r", &tm); fprintf(p, "Dear %s:\n\n\tJust wanted to let you know you were just left a %s long message (number %d)\n" "in mailbox %s from %s, on %s so you might\n" @@ -392,11 +393,11 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m static int get_date(char *s, int len) { - struct tm *tm; + struct tm tm; time_t t; t = time(0); - tm = localtime(&t); - return strftime(s, len, "%a %b %e %r %Z %Y", tm); + localtime_r(&t,&tm); + return strftime(s, len, "%a %b %e %r %Z %Y", &tm); } static int invent_message(struct ast_channel *chan, char *ext, int busy, char *ecodes) diff --git a/apps/app_zapateller.c b/apps/app_zapateller.c index 55de6bf31b..497bd3a051 100755 --- a/apps/app_zapateller.c +++ b/apps/app_zapateller.c @@ -29,12 +29,13 @@ static char *app = "Zapateller"; static char *synopsis = "Block telemarketers with SIT"; static char *descrip = -" Zapateller(options): Generates special information tone to block telemarketers\n" -"from calling you. Returns 0 normally or -1 on hangup. Options is a pipe-delimited\n" -"list of options. The following options are available: 'answer' causes the line to\n" -"be answered before playing the tone, 'nocallerid' causes Zapateller to only play\n" -"the tone if there is no callerid information available. Options should be\n" -"seperated by | characters.\n"; +" Zapateller(options): Generates special information tone to block\n" +"telemarketers from calling you. Returns 0 normally or -1 on hangup.\n" +"Options is a pipe-delimited list of options. The following options\n" +"are available: 'answer' causes the line to be answered before playing\n" +"the tone, 'nocallerid' causes Zapateller to only play the tone if there\n" +"is no callerid information available. Options should be separated by |\n" +"characters\n"; STANDARD_LOCAL_USER; diff --git a/callerid.c b/callerid.c index f1827b76be..d1a8545f41 100755 --- a/callerid.c +++ b/callerid.c @@ -324,19 +324,19 @@ void callerid_free(struct callerid_state *cid) static int callerid_genmsg(char *msg, int size, char *number, char *name, int flags) { time_t t; - struct tm *tm; + struct tm tm; char *ptr; int res; int i,x; /* Get the time */ time(&t); - tm = localtime(&t); + localtime_r(&t,&tm); ptr = msg; /* Format time and message header */ - res = snprintf(ptr, size, "\001\010%02d%02d%02d%02d", tm->tm_mon + 1, - tm->tm_mday, tm->tm_hour, tm->tm_min); + res = snprintf(ptr, size, "\001\010%02d%02d%02d%02d", tm.tm_mon + 1, + tm.tm_mday, tm.tm_hour, tm.tm_min); size -= res; ptr += res; if (!number || !strlen(number) || (flags & CID_UNKNOWN_NUMBER)) { diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c index da7b07edc3..17170a990d 100755 --- a/cdr/cdr_csv.c +++ b/cdr/cdr_csv.c @@ -107,7 +107,7 @@ static int append_int(char *buf, int s, int len) static int append_date(char *buf, struct timeval tv, int len) { char tmp[80]; - struct tm *tm; + struct tm tm; time_t t; t = tv.tv_sec; if (strlen(buf) > len - 3) @@ -116,8 +116,8 @@ static int append_date(char *buf, struct timeval tv, int len) strncat(buf, ",", len); return 0; } - tm = localtime(&t); - strftime(tmp, sizeof(tmp), DATE_FORMAT, tm); + localtime_r(&t,&tm); + strftime(tmp, sizeof(tmp), DATE_FORMAT, &tm); return append_string(buf, tmp, len); } diff --git a/cdr/cdr_mysql.c b/cdr/cdr_mysql.c index 137febb46e..f285629981 100755 --- a/cdr/cdr_mysql.c +++ b/cdr/cdr_mysql.c @@ -38,7 +38,7 @@ static MYSQL *mysql; static int mysql_log(struct ast_cdr *cdr) { - struct tm *tm; + struct tm tm; struct timeval tv; struct timezone tz; char *sqlcmd, timestr[128]; @@ -51,8 +51,8 @@ static int mysql_log(struct ast_cdr *cdr) gettimeofday(&tv,&tz); t = tv.tv_sec; - tm = localtime(&t); - strftime(timestr,128,DATE_FORMAT,tm); + localtime_r(&t,&tm); + strftime(timestr,128,DATE_FORMAT,&tm); ast_log(LOG_DEBUG,"cdr_mysql: inserting a CDR record.\n"); diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index fdf6e1dbad..09cdfabb03 100755 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -1223,10 +1223,10 @@ static int transmit_notify_request_with_callerid(struct mgcp_endpoint *p, char * char tone2[256]; char *l, *n; time_t t; - struct tm *tm; + struct tm tm; time(&t); - tm = localtime(&t); + localtime_r(&t,&tm); if (callerid) strncpy(cid, callerid, sizeof(cid) - 1); else @@ -1244,7 +1244,7 @@ static int transmit_notify_request_with_callerid(struct mgcp_endpoint *p, char * if (!l) l = ""; snprintf(tone2, sizeof(tone2), "%s,L/ci(%02d/%02d/%02d/%02d,%s,%s)", tone, - tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, l, n); + tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, l, n); strncpy(p->curtone, tone, sizeof(p->curtone) - 1); reqprep(&resp, p, "RQNT"); add_header(&resp, "X", p->txident); diff --git a/channels/chan_phone.c b/channels/chan_phone.c index b8ce778f9d..b0a54443af 100755 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -146,18 +146,18 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout) PHONE_CID cid; time_t UtcTime; - struct tm *t; + struct tm tm; if (ast->callerid) { time(&UtcTime); - t = localtime(&UtcTime); + localtime_r(&UtcTime,&tm); - if(t != NULL) { - sprintf(cid.month, "%02d",(t->tm_mon + 1)); - sprintf(cid.day, "%02d", t->tm_mday); - sprintf(cid.hour, "%02d", t->tm_hour); - sprintf(cid.min, "%02d", t->tm_min); + if(&tm != NULL) { + sprintf(cid.month, "%02d",(tm.tm_mon + 1)); + sprintf(cid.day, "%02d", tm.tm_mday); + sprintf(cid.hour, "%02d", tm.tm_hour); + sprintf(cid.min, "%02d", tm.tm_min); } strcpy(cid.name, "Unknown"); sprintf(cid.number,"%s",ast->callerid); diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 2d6ddcd98b..e1322a4d67 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -747,16 +747,8 @@ static void sip_destroy(struct sip_pvt *p) /* Interface lookup code courtesy Tilghman of DrunkCoder.com. Thanks! */ struct my_ifreq { - union - { char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ - } ifr_ifrn; - - union - { struct sockaddr_in ifru_addr; - char ifru_data[512]; - } ifr_ifru; }; struct in_addr *lookup_iface(char *iface) { @@ -764,7 +756,7 @@ struct in_addr *lookup_iface(char *iface) { int res; static struct my_ifreq ifreq; memset(&ifreq, 0, sizeof(ifreq)); - strncpy(ifreq.ifr_ifrn.ifrn_name,iface,sizeof(ifreq.ifr_ifrn.ifrn_name) - 1); + strncpy(ifreq.ifrn_name,iface,sizeof(ifreq.ifrn_name) - 1); mysock = socket(PF_INET,SOCK_DGRAM,IPPROTO_IP); res = ioctl(mysock,SIOCGIFADDR,&ifreq); @@ -774,7 +766,7 @@ struct in_addr *lookup_iface(char *iface) { ast_log(LOG_WARNING, "Unable to get IP of %s: %s\n", iface, strerror(errno)); return &__ourip; } - return( (struct in_addr *) &ifreq.ifr_ifru.ifru_addr.sin_addr ); + return( (struct in_addr *) &ifreq.ifru_addr.sin_addr ); } static struct in_addr *myaddrfor(struct in_addr *them) diff --git a/logger.c b/logger.c index fac8dc13be..66375de27a 100755 --- a/logger.c +++ b/logger.c @@ -228,7 +228,7 @@ extern void ast_log(int level, const char *file, int line, const char *function, char tmp4[80]; char linestr[80]; time_t t; - struct tm *tm; + struct tm tm; struct logfile *f; va_list ap; @@ -238,10 +238,10 @@ extern void ast_log(int level, const char *file, int line, const char *function, ast_pthread_mutex_lock(&loglock); if (level == 1 /* Event */) { time(&t); - tm = localtime(&t); - if (tm) { + localtime_r(&t,&tm); + if (&tm) { /* Log events into the event log file, with a different format */ - strftime(date, sizeof(date), "%b %e %T", tm); + strftime(date, sizeof(date), "%b %e %T", &tm); fprintf(eventlog, "%s asterisk[%d]: ", date, getpid()); va_start(ap, fmt); vfprintf(eventlog, fmt, ap); @@ -258,8 +258,8 @@ extern void ast_log(int level, const char *file, int line, const char *function, if (f->logflags & (1 << level) && f->f) { if ((f->f != stdout) && (f->f != stderr)) { time(&t); - tm = localtime(&t); - strftime(date, sizeof(date), "%b %e %T", tm); + localtime_r(&t,&tm); + strftime(date, sizeof(date), "%b %e %T", &tm); fprintf(f->f, "%s %s[%ld]: File %s, Line %d (%s): ", date, levels[level], pthread_self(), file, line, function); } else { sprintf(linestr, "%d", line); diff --git a/pbx.c b/pbx.c index 655f9bd7d4..718fec5313 100755 --- a/pbx.c +++ b/pbx.c @@ -406,40 +406,40 @@ static struct ast_switch *pbx_findswitch(char *sw) static inline int include_valid(struct ast_include *i) { - struct tm *tm; + struct tm tm; time_t t; if (!i->hastime) return 1; time(&t); - tm = localtime(&t); - if (!tm) { + localtime_r(&t,&tm); + if (!&tm) { ast_log(LOG_WARNING, "Failed to get local time\n"); return 0; } /* If it's not the right month, return */ - if (!(i->monthmask & (1 << tm->tm_mon))) { + if (!(i->monthmask & (1 << tm.tm_mon))) { return 0; } /* If it's not that time of the month.... */ /* Warning, tm_mday has range 1..31! */ - if (!(i->daymask & (1 << (tm->tm_mday-1)))) + if (!(i->daymask & (1 << (tm.tm_mday-1)))) return 0; /* If it's not the right day of the week */ - if (!(i->dowmask & (1 << tm->tm_wday))) + if (!(i->dowmask & (1 << tm.tm_wday))) return 0; /* Sanity check the hour just to be safe */ - if ((tm->tm_hour < 0) || (tm->tm_hour > 23)) { + if ((tm.tm_hour < 0) || (tm.tm_hour > 23)) { ast_log(LOG_WARNING, "Insane time...\n"); return 0; } /* Now the tough part, we calculate if it fits in the right time based on min/hour */ - if (!(i->minmask[tm->tm_hour] & (1 << (tm->tm_min / 2)))) + if (!(i->minmask[tm.tm_hour] & (1 << (tm.tm_min / 2)))) return 0; /* If we got this far, then we're good */ diff --git a/say.c b/say.c index cee2b4e554..fec0812a55 100755 --- a/say.c +++ b/say.c @@ -191,47 +191,47 @@ int ast_say_number(struct ast_channel *chan, int num, char *ints, char *language } int ast_say_date(struct ast_channel *chan, time_t t, char *ints, char *lang) { - struct tm *tm; + struct tm tm; char fn[256]; int res = 0; - tm = localtime(&t); - if (!tm) { + localtime_r(&t,&tm); + if (!&tm) { ast_log(LOG_WARNING, "Unable to derive local time\n"); return -1; } if (!res) { - snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday); + snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); } if (!res) { - snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon); + snprintf(fn, sizeof(fn), "digits/mon-%d", tm.tm_mon); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); } if (!res) - res = ast_say_number(chan, tm->tm_mday, ints, lang); + res = ast_say_number(chan, tm.tm_mday, ints, lang); if (!res) res = ast_waitstream(chan, ints); if (!res) - res = ast_say_number(chan, tm->tm_year + 1900, ints, lang); + res = ast_say_number(chan, tm.tm_year + 1900, ints, lang); return res; } int ast_say_time(struct ast_channel *chan, time_t t, char *ints, char *lang) { - struct tm *tm; + struct tm tm; int res = 0; int hour, pm=0; - tm = localtime(&t); - if (!tm) { + localtime_r(&t,&tm); + if (!&tm) { ast_log(LOG_WARNING, "Unable to derive local time\n"); return -1; } - hour = tm->tm_hour; + hour = tm.tm_hour; if (!hour) hour = 12; else if (hour == 12) @@ -243,16 +243,16 @@ int ast_say_time(struct ast_channel *chan, time_t t, char *ints, char *lang) if (!res) res = ast_say_number(chan, hour, ints, lang); - if (tm->tm_min > 9) { + if (tm.tm_min > 9) { if (!res) - res = ast_say_number(chan, tm->tm_min, ints, lang); - } else if (tm->tm_min) { + res = ast_say_number(chan, tm.tm_min, ints, lang); + } else if (tm.tm_min) { if (!res) res = ast_streamfile(chan, "digits/oh", lang); if (!res) res = ast_waitstream(chan, ints); if (!res) - res = ast_say_number(chan, tm->tm_min, ints, lang); + res = ast_say_number(chan, tm.tm_min, ints, lang); } else { if (!res) res = ast_streamfile(chan, "digits/oclock", lang); @@ -273,31 +273,31 @@ int ast_say_time(struct ast_channel *chan, time_t t, char *ints, char *lang) int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang) { - struct tm *tm; + struct tm tm; char fn[256]; int res = 0; int hour, pm=0; - tm = localtime(&t); - if (!tm) { + localtime_r(&t,&tm); + if (!&tm) { ast_log(LOG_WARNING, "Unable to derive local time\n"); return -1; } if (!res) { - snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday); + snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); } if (!res) { - snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon); + snprintf(fn, sizeof(fn), "digits/mon-%d", tm.tm_mon); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); } if (!res) - res = ast_say_number(chan, tm->tm_mday, ints, lang); + res = ast_say_number(chan, tm.tm_mday, ints, lang); - hour = tm->tm_hour; + hour = tm.tm_hour; if (!hour) hour = 12; else if (hour == 12) @@ -309,16 +309,16 @@ int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang) if (!res) res = ast_say_number(chan, hour, ints, lang); - if (tm->tm_min > 9) { + if (tm.tm_min > 9) { if (!res) - res = ast_say_number(chan, tm->tm_min, ints, lang); - } else if (tm->tm_min) { + res = ast_say_number(chan, tm.tm_min, ints, lang); + } else if (tm.tm_min) { if (!res) res = ast_streamfile(chan, "digits/oh", lang); if (!res) res = ast_waitstream(chan, ints); if (!res) - res = ast_say_number(chan, tm->tm_min, ints, lang); + res = ast_say_number(chan, tm.tm_min, ints, lang); } else { if (!res) res = ast_streamfile(chan, "digits/oclock", lang); @@ -335,7 +335,7 @@ int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang) if (!res) res = ast_waitstream(chan, ints); if (!res) - res = ast_say_number(chan, tm->tm_year + 1900, ints, lang); + res = ast_say_number(chan, tm.tm_year + 1900, ints, lang); return res; } @@ -344,37 +344,34 @@ int ast_say_datetime_from_now(struct ast_channel *chan, time_t t, char *ints, ch int res=0; time_t nowt; int daydiff; - struct tm *tm; - struct tm tm2; - struct tm *now; + struct tm tm; + struct tm now; char fn[256]; time(&nowt); - tm = localtime(&t); - if (!tm) { + localtime_r(&t,&tm); + if (!&tm) { ast_log(LOG_WARNING, "Unable to derive local time\n"); return -1; } - memcpy(&tm2, tm, sizeof(struct tm)); - tm = &tm2; - now = localtime(&nowt); - daydiff = now->tm_yday - tm->tm_yday; + localtime_r(&nowt,&now); + daydiff = now.tm_yday - tm.tm_yday; if ((daydiff < 0) || (daydiff > 6)) { /* Day of month and month */ if (!res) { - snprintf(fn, sizeof(fn), "digits/mon-%d", tm->tm_mon); + snprintf(fn, sizeof(fn), "digits/mon-%d", tm.tm_mon); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); } if (!res) - res = ast_say_number(chan, tm->tm_mday, ints, lang); + res = ast_say_number(chan, tm.tm_mday, ints, lang); } else if (daydiff) { /* Just what day of the week */ if (!res) { - snprintf(fn, sizeof(fn), "digits/day-%d", tm->tm_wday); + snprintf(fn, sizeof(fn), "digits/day-%d", tm.tm_wday); res = ast_streamfile(chan, fn, lang); if (!res) res = ast_waitstream(chan, ints); -- GitLab