]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9693 use existing date parsing functions in fulldate comparison that take timezone...
authorFrançois <fdelawarde@wirelessmundi.com>
Fri, 4 Nov 2016 10:42:02 +0000 (11:42 +0100)
committerBrian West <brian@freeswitch.org>
Mon, 7 Nov 2016 19:01:49 +0000 (13:01 -0600)
src/switch_utils.c

index 475f7b12d5345e7febe37ccc2b1a63aed08d4c8f..fd5ec0fee21b2ec8fa6413080e1684e76c2cf149 100644 (file)
@@ -3341,6 +3341,8 @@ SWITCH_DECLARE(int) switch_fulldate_cmp(const char *exp, switch_time_t *ts)
        char *sEnd;
        char *cur;
        char *p;
+       switch_time_t tsStart = 0;
+       switch_time_t tsEnd = 0;
 
        switch_assert(dup);
 
@@ -3351,70 +3353,26 @@ SWITCH_DECLARE(int) switch_fulldate_cmp(const char *exp, switch_time_t *ts)
 
        while (cur) {
                sStart = cur;
-               if ((sEnd=strchr(cur, '~'))) {
-                       char *sDate = sStart;
-                       char *sTime;
+               if ((sEnd = strchr(cur, '~'))) {
                        *sEnd++ = '\0';
-                       if ((sTime=strchr(sStart, ' '))) {
-                               switch_time_t tsStart;
-                               struct tm tmTmp;
-                               int year = 1970, month = 1, day = 1;
-                               int hour = 0, min = 0, sec = 0;
-                               *sTime++ = '\0';
-
-                               memset(&tmTmp, 0, sizeof(tmTmp));
-                               switch_split_date(sDate, &year, &month, &day);
-                               switch_split_time(sTime, &hour, &min, &sec);
-                               tmTmp.tm_year = year-1900;
-                               tmTmp.tm_mon = month-1;
-                               tmTmp.tm_mday = day;
-
-                               tmTmp.tm_hour = hour;
-                               tmTmp.tm_min = min;
-                               tmTmp.tm_sec = sec;
-                               tmTmp.tm_isdst = 0;
-                               tsStart = mktime(&tmTmp);
-
-                               sDate = sEnd;
-                               if ((sTime=strchr(sEnd, ' '))) {
-                                       switch_time_t tsEnd;
-                                       struct tm tmTmp;
-                                       int year = 1970, month = 1, day = 1;
-                                       int hour = 0, min = 0, sec = 0;
-                                       *sTime++ = '\0';
-
-                                       memset(&tmTmp, 0, sizeof(tmTmp));
-                                       switch_split_date(sDate, &year, &month, &day);
-                                       switch_split_time(sTime, &hour, &min, &sec);
-                                       tmTmp.tm_year = year-1900;
-                                       tmTmp.tm_mon = month-1;
-                                       tmTmp.tm_mday = day;
-
-                                       tmTmp.tm_hour = hour;
-                                       tmTmp.tm_min = min;
-                                       tmTmp.tm_sec = sec;
-                                       tmTmp.tm_isdst = 0;
-                                       tsEnd = mktime(&tmTmp);
-
-                                       if (tsStart <= *ts/1000000 && tsEnd > *ts/1000000) {
-                                               switch_safe_free(dup);
-                                               return 1;
-                                       }
-                               }
-                       }
+
+                       tsStart = switch_str_time(sStart);
+                       tsEnd = switch_str_time(sEnd);
+                       switch_safe_free(dup);
+
+                       if (tsStart == 0) return 0;
+                       if (tsEnd == 0) return 0;
+                       if (tsStart <= *ts && tsEnd > *ts) return 1;
                }
 
-               cur = p;
-               if (p) {
+               if ((cur = p)) {
                        if ((p = strchr(p, ','))) {
                                *p++ = '\0';
                        }
                }
-
        }
        switch_safe_free(dup);
        return 0;
-
 }