aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_sayunixtime.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-02-15 00:24:24 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-02-15 00:24:24 +0000
commit15db46a445a4d6d71993475369b4a4906861f362 (patch)
tree6572dc8ac1336a5e0c0859186138a5313e88bd85 /apps/app_sayunixtime.c
parent69f7e69869d726709046bffd71fd109b7dc4560d (diff)
add API function for parsing strings to time_t (issue #6320, with mods)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@10105 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_sayunixtime.c')
-rw-r--r--apps/app_sayunixtime.c47
1 files changed, 14 insertions, 33 deletions
diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c
index c6db4f140..ad96c6d6f 100644
--- a/apps/app_sayunixtime.c
+++ b/apps/app_sayunixtime.c
@@ -76,45 +76,26 @@ static int sayunixtime_exec(struct ast_channel *chan, void *data)
struct localuser *u;
char *s,*zone=NULL,*timec,*format;
time_t unixtime;
- struct timeval tv;
+ s = ast_strdupa(data);
+ if (!s)
+ return data ? -1 : 0;
LOCAL_USER_ADD(u);
- tv = ast_tvnow();
- unixtime = (time_t)tv.tv_sec;
-
- if( !strcasecmp(chan->language, "da" ) ) {
- format = "A dBY HMS";
- } else if ( !strcasecmp(chan->language, "de" ) ) {
- format = "A dBY HMS";
- } else {
- format = "ABdY 'digits/at' IMp";
- }
-
- if (data) {
- s = data;
- if ((s = ast_strdupa(s))) {
- timec = strsep(&s,"|");
- if ((timec) && (*timec != '\0')) {
- long timein;
- if (sscanf(timec,"%ld",&timein) == 1) {
- unixtime = (time_t)timein;
- }
- }
- if (s) {
- zone = strsep(&s,"|");
- if (zone && (*zone == '\0'))
- zone = NULL;
- if (s) {
- format = s;
- }
- }
- }
+ format = "c"; /* default datetime */
+
+ timec = strsep(&s,"|");
+ ast_get_time_t(timec, &unixtime, time(NULL));
+ if (s) {
+ zone = strsep(&s,"|");
+ if (ast_strlen_zero(zone))
+ zone = NULL;
}
+ if (s) /* override format */
+ format = s;
- if (chan->_state != AST_STATE_UP) {
+ if (chan->_state != AST_STATE_UP)
res = ast_answer(chan);
- }
if (!res)
res = ast_say_date_with_format(chan, unixtime, AST_DIGIT_ANY, chan->language, format, zone);