Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: third_party/libxslt/libexslt/date.c

Issue 1193533007: Upgrade to libxml 2.9.2 and libxslt 1.1.28 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: no iconv Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/libxslt/libexslt/crypto.c ('k') | third_party/libxslt/libexslt/dynamic.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * date.c: Implementation of the EXSLT -- Dates and Times module 2 * date.c: Implementation of the EXSLT -- Dates and Times module
3 * 3 *
4 * References: 4 * References:
5 * http://www.exslt.org/date/date.html 5 * http://www.exslt.org/date/date.html
6 * 6 *
7 * See Copyright for the status of this software. 7 * See Copyright for the status of this software.
8 * 8 *
9 * Authors: 9 * Authors:
10 * Charlie Bozeman <cbozeman@HiWAAY.net> 10 * Charlie Bozeman <cbozeman@HiWAAY.net>
(...skipping 10 matching lines...) Expand all
21 21
22 #define IN_LIBEXSLT 22 #define IN_LIBEXSLT
23 #include "libexslt/libexslt.h" 23 #include "libexslt/libexslt.h"
24 24
25 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) 25 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__)
26 #include <win32config.h> 26 #include <win32config.h>
27 #else 27 #else
28 #include "config.h" 28 #include "config.h"
29 #endif 29 #endif
30 30
31 #if HAVE_LOCALTIME_R» /* _POSIX_SOURCE required by gnu libc */ 31 #if defined(HAVE_LOCALTIME_R) && defined(__GLIBC__)» /* _POSIX_SOURCE require d by gnu libc */
32 #ifndef _AIX51 /* but on AIX we're not using gnu libc */ 32 #ifndef _AIX51 /* but on AIX we're not using gnu libc */
33 #define _POSIX_SOURCE 33 #define _POSIX_SOURCE
34 #endif 34 #endif
35 #endif 35 #endif
36 36
37 #include <libxml/tree.h> 37 #include <libxml/tree.h>
38 #include <libxml/xpath.h> 38 #include <libxml/xpath.h>
39 #include <libxml/xpathInternals.h> 39 #include <libxml/xpathInternals.h>
40 40
41 #include <libxslt/xsltconfig.h> 41 #include <libxslt/xsltconfig.h>
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 double sec; 92 double sec;
93 unsigned int tz_flag :1; /* is tzo explicitely set? */ 93 unsigned int tz_flag :1; /* is tzo explicitely set? */
94 signed int tzo :12; /* -1440 <= tzo <= 1440 currently only - 840 to +840 are needed */ 94 signed int tzo :12; /* -1440 <= tzo <= 1440 currently only - 840 to +840 are needed */
95 }; 95 };
96 96
97 /* Duration value */ 97 /* Duration value */
98 typedef struct _exsltDateValDuration exsltDateValDuration; 98 typedef struct _exsltDateValDuration exsltDateValDuration;
99 typedef exsltDateValDuration *exsltDateValDurationPtr; 99 typedef exsltDateValDuration *exsltDateValDurationPtr;
100 struct _exsltDateValDuration { 100 struct _exsltDateValDuration {
101 long mon; /* mon stores years also */ 101 long mon; /* mon stores years also */
102 long » day; 102 long» day;
103 double sec; /* sec stores min and hour also */ 103 double sec; /* sec stores min and hour also */
104 }; 104 };
105 105
106 typedef struct _exsltDateVal exsltDateVal; 106 typedef struct _exsltDateVal exsltDateVal;
107 typedef exsltDateVal *exsltDateValPtr; 107 typedef exsltDateVal *exsltDateValPtr;
108 struct _exsltDateVal { 108 struct _exsltDateVal {
109 exsltDateType type; 109 exsltDateType type;
110 union { 110 union {
111 exsltDateValDate date; 111 exsltDateValDate date;
112 exsltDateValDuration dur; 112 exsltDateValDuration dur;
113 } value; 113 } value;
114 }; 114 };
115 115
116 /**************************************************************** 116 /****************************************************************
117 * * 117 * *
118 * Compat./Port. macros * 118 * Compat./Port. macros *
119 * * 119 * *
120 ****************************************************************/ 120 ****************************************************************/
121 121
122 #if defined(HAVE_TIME_H) » » » » » \ 122 #if defined(HAVE_TIME_H)» » » » » \
123 && (defined(HAVE_LOCALTIME) || defined(HAVE_LOCALTIME_R)) \ 123 && (defined(HAVE_LOCALTIME) || defined(HAVE_LOCALTIME_R)) \
124 && (defined(HAVE_GMTIME) || defined(HAVE_GMTIME_R)) \ 124 && (defined(HAVE_GMTIME) || defined(HAVE_GMTIME_R)) \
125 && defined(HAVE_TIME) 125 && defined(HAVE_TIME)
126 #define WITH_TIME 126 #define WITH_TIME
127 #endif 127 #endif
128 128
129 /**************************************************************** 129 /****************************************************************
130 * * 130 * *
131 * Convenience macros and functions * 131 * Convenience macros and functions *
132 * * 132 * *
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 #if 0 784 #if 0
785 ret->value.date.tzo = (((ret->value.date.day * 1440) + 785 ret->value.date.tzo = (((ret->value.date.day * 1440) +
786 (ret->value.date.hour * 60) + 786 (ret->value.date.hour * 60) +
787 ret->value.date.min) - 787 ret->value.date.min) -
788 ((gmTm.tm_mday * 1440) + (gmTm.tm_hour * 60) + 788 ((gmTm.tm_mday * 1440) + (gmTm.tm_hour * 60) +
789 gmTm.tm_min)); 789 gmTm.tm_min));
790 #endif 790 #endif
791 local_s = localTm.tm_hour * SECS_PER_HOUR + 791 local_s = localTm.tm_hour * SECS_PER_HOUR +
792 localTm.tm_min * SECS_PER_MIN + 792 localTm.tm_min * SECS_PER_MIN +
793 localTm.tm_sec; 793 localTm.tm_sec;
794 794
795 gm_s = gmTm.tm_hour * SECS_PER_HOUR + 795 gm_s = gmTm.tm_hour * SECS_PER_HOUR +
796 gmTm.tm_min * SECS_PER_MIN + 796 gmTm.tm_min * SECS_PER_MIN +
797 gmTm.tm_sec; 797 gmTm.tm_sec;
798 798
799 if (localTm.tm_year < gmTm.tm_year) { 799 if (localTm.tm_year < gmTm.tm_year) {
800 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60; 800 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60;
801 } else if (localTm.tm_year > gmTm.tm_year) { 801 } else if (localTm.tm_year > gmTm.tm_year) {
802 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60; 802 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60;
803 } else if (localTm.tm_mon < gmTm.tm_mon) { 803 } else if (localTm.tm_mon < gmTm.tm_mon) {
804 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60; 804 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60;
805 } else if (localTm.tm_mon > gmTm.tm_mon) { 805 } else if (localTm.tm_mon > gmTm.tm_mon) {
806 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60; 806 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60;
807 } else if (localTm.tm_mday < gmTm.tm_mday) { 807 } else if (localTm.tm_mday < gmTm.tm_mday) {
808 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60; 808 » ret->value.date.tzo = -((SECS_PER_DAY - local_s) + gm_s)/60;
809 } else if (localTm.tm_mday > gmTm.tm_mday) { 809 } else if (localTm.tm_mday > gmTm.tm_mday) {
810 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60; 810 » ret->value.date.tzo = ((SECS_PER_DAY - gm_s) + local_s)/60;
811 } else { 811 } else {
812 » ret->value.date.tzo = (local_s - gm_s)/60; 812 » ret->value.date.tzo = (local_s - gm_s)/60;
813 } 813 }
814 814
815 return ret; 815 return ret;
816 } 816 }
817 #endif 817 #endif
818 818
819 /** 819 /**
820 * exsltDateParse: 820 * exsltDateParse:
821 * @dateTime: string to analyze 821 * @dateTime: string to analyze
822 * 822 *
823 * Parses a date/time string 823 * Parses a date/time string
824 * 824 *
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 exsltDateFormatDuration (const exsltDateValDurationPtr dt) 1104 exsltDateFormatDuration (const exsltDateValDurationPtr dt)
1105 { 1105 {
1106 xmlChar buf[100], *cur = buf; 1106 xmlChar buf[100], *cur = buf;
1107 double secs, days; 1107 double secs, days;
1108 double years, months; 1108 double years, months;
1109 1109
1110 if (dt == NULL) 1110 if (dt == NULL)
1111 return NULL; 1111 return NULL;
1112 1112
1113 /* quick and dirty check */ 1113 /* quick and dirty check */
1114 if ((dt->sec == 0.0) && (dt->day == 0) && (dt->mon == 0)) 1114 if ((dt->sec == 0.0) && (dt->day == 0) && (dt->mon == 0))
1115 return xmlStrdup((xmlChar*)"P0D"); 1115 return xmlStrdup((xmlChar*)"P0D");
1116 1116
1117 secs = dt->sec; 1117 secs = dt->sec;
1118 days = (double)dt->day; 1118 days = (double)dt->day;
1119 years = (double)(dt->mon / 12); 1119 years = (double)(dt->mon / 12);
1120 months = (double)(dt->mon % 12); 1120 months = (double)(dt->mon % 12);
1121 1121
1122 *cur = '\0'; 1122 *cur = '\0';
1123 if (secs < 0.0) { 1123 if (secs < 0.0) {
1124 secs = -secs; 1124 secs = -secs;
1125 *cur = '-'; 1125 *cur = '-';
1126 } 1126 }
1127 if (days < 0) { 1127 if (days < 0) {
1128 days = -days; 1128 days = -days;
1129 *cur = '-'; 1129 *cur = '-';
1130 } 1130 }
1131 if (years < 0) { 1131 if (years < 0) {
1132 years = -years; 1132 years = -years;
1133 *cur = '-'; 1133 *cur = '-';
1134 } 1134 }
1135 if (months < 0) { 1135 if (months < 0) {
1136 months = -months; 1136 months = -months;
1137 *cur = '-'; 1137 *cur = '-';
1138 } 1138 }
1139 if (*cur == '-') 1139 if (*cur == '-')
1140 cur++; 1140 cur++;
1141 1141
1142 *cur++ = 'P'; 1142 *cur++ = 'P';
1143 1143
1144 if (years != 0.0) { 1144 if (years != 0.0) {
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 return xmlStrdup(buf); 1294 return xmlStrdup(buf);
1295 } 1295 }
1296 1296
1297 return NULL; 1297 return NULL;
1298 } 1298 }
1299 1299
1300 /** 1300 /**
1301 * _exsltDateCastYMToDays: 1301 * _exsltDateCastYMToDays:
1302 * @dt: an #exsltDateValPtr 1302 * @dt: an #exsltDateValPtr
1303 * 1303 *
1304 * Convert mon and year of @dt to total number of days. Take the 1304 * Convert mon and year of @dt to total number of days. Take the
1305 * number of years since (or before) 1 AD and add the number of leap 1305 * number of years since (or before) 1 AD and add the number of leap
1306 * years. This is a function because negative 1306 * years. This is a function because negative
1307 * years must be handled a little differently and there is no zero year. 1307 * years must be handled a little differently and there is no zero year.
1308 * 1308 *
1309 * Returns number of days. 1309 * Returns number of days.
1310 */ 1310 */
1311 static long 1311 static long
1312 _exsltDateCastYMToDays (const exsltDateValPtr dt) 1312 _exsltDateCastYMToDays (const exsltDateValPtr dt)
1313 { 1313 {
1314 long ret; 1314 long ret;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 1407
1408 return 0; 1408 return 0;
1409 } 1409 }
1410 1410
1411 /** 1411 /**
1412 * _exsltDayInWeek: 1412 * _exsltDayInWeek:
1413 * @yday: year day (1-366) 1413 * @yday: year day (1-366)
1414 * @yr: year 1414 * @yr: year
1415 * 1415 *
1416 * Determine the day-in-week from @yday and @yr. 0001-01-01 was 1416 * Determine the day-in-week from @yday and @yr. 0001-01-01 was
1417 * a Monday so all other days are calculated from there. Take the 1417 * a Monday so all other days are calculated from there. Take the
1418 * number of years since (or before) add the number of leap years and 1418 * number of years since (or before) add the number of leap years and
1419 * the day-in-year and mod by 7. This is a function because negative 1419 * the day-in-year and mod by 7. This is a function because negative
1420 * years must be handled a little differently and there is no zero year. 1420 * years must be handled a little differently and there is no zero year.
1421 * 1421 *
1422 * Returns day in week (Sunday = 0). 1422 * Returns day in week (Sunday = 0).
1423 */ 1423 */
1424 static long 1424 static long
1425 _exsltDateDayInWeek(long yday, long yr) 1425 _exsltDateDayInWeek(long yday, long yr)
1426 { 1426 {
1427 long ret; 1427 long ret;
1428 1428
1429 if (yr < 0) { 1429 if (yr < 0) {
1430 ret = ((yr + (((yr+1)/4)-((yr+1)/100)+((yr+1)/400)) + yday) % 7); 1430 ret = ((yr + (((yr+1)/4)-((yr+1)/100)+((yr+1)/400)) + yday) % 7);
1431 if (ret < 0) 1431 if (ret < 0)
1432 ret += 7; 1432 ret += 7;
1433 } else 1433 } else
1434 ret = (((yr-1) + (((yr-1)/4)-((yr-1)/100)+((yr-1)/400)) + yday) % 7); 1434 ret = (((yr-1) + (((yr-1)/4)-((yr-1)/100)+((yr-1)/400)) + yday) % 7);
1435 1435
1436 return ret; 1436 return ret;
1437 } 1437 }
1438 1438
1439 /* 1439 /*
1440 * macros for adding date/times and durations 1440 * macros for adding date/times and durations
1441 */ 1441 */
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 1535
1536 tempdays += u->day + carry; 1536 tempdays += u->day + carry;
1537 1537
1538 while (1) { 1538 while (1) {
1539 if (tempdays < 1) { 1539 if (tempdays < 1) {
1540 long tmon = (long)MODULO_RANGE((int)r->mon-1, 1, 13); 1540 long tmon = (long)MODULO_RANGE((int)r->mon-1, 1, 13);
1541 long tyr = r->year + (long)FQUOTIENT_RANGE((int)r->mon-1, 1, 13); 1541 long tyr = r->year + (long)FQUOTIENT_RANGE((int)r->mon-1, 1, 13);
1542 if (tyr == 0) 1542 if (tyr == 0)
1543 tyr--; 1543 tyr--;
1544 /* 1544 /*
1545 » * Coverity detected an overrun in daysInMonth 1545 » * Coverity detected an overrun in daysInMonth
1546 * of size 12 at position 12 with index variable "((r)->mon - 1)" 1546 * of size 12 at position 12 with index variable "((r)->mon - 1)"
1547 */ 1547 */
1548 if (tmon < 0) 1548 if (tmon < 0)
1549 tmon = 0; 1549 tmon = 0;
1550 if (tmon > 12) 1550 if (tmon > 12)
1551 tmon = 12; 1551 tmon = 12;
1552 tempdays += MAX_DAYINMONTH(tyr, tmon); 1552 tempdays += MAX_DAYINMONTH(tyr, tmon);
1553 carry = -1; 1553 carry = -1;
1554 } else if (tempdays > (long)MAX_DAYINMONTH(r->year, r->mon)) { 1554 } else if (tempdays > (long)MAX_DAYINMONTH(r->year, r->mon)) {
1555 tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon); 1555 tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
1556 carry = 1; 1556 carry = 1;
1557 } else 1557 } else
1558 break; 1558 break;
1559 1559
1560 temp = r->mon + carry; 1560 temp = r->mon + carry;
1561 r->mon = (unsigned int)MODULO_RANGE(temp, 1, 13); 1561 r->mon = (unsigned int)MODULO_RANGE(temp, 1, 13);
1562 r->year = r->year + (long)FQUOTIENT_RANGE(temp, 1, 13); 1562 r->year = r->year + (long)FQUOTIENT_RANGE(temp, 1, 13);
1563 if (r->year == 0) { 1563 if (r->year == 0) {
1564 if (temp < 1) 1564 if (temp < 1)
1565 r->year--; 1565 r->year--;
1566 else 1566 else
1567 r->year++; 1567 r->year++;
1568 } 1568 }
1569 } 1569 }
1570 1570
1571 r->day = tempdays; 1571 r->day = tempdays;
1572 1572
1573 /* 1573 /*
1574 * adjust the date/time type to the date values 1574 * adjust the date/time type to the date values
1575 */ 1575 */
1576 if (ret->type != XS_DATETIME) { 1576 if (ret->type != XS_DATETIME) {
1577 if ((r->hour) || (r->min) || (r->sec)) 1577 if ((r->hour) || (r->min) || (r->sec))
1578 ret->type = XS_DATETIME; 1578 ret->type = XS_DATETIME;
1579 else if (ret->type != XS_DATE) { 1579 else if (ret->type != XS_DATE) {
1580 if ((r->mon != 1) && (r->day != 1)) 1580 if (r->day != 1)
1581 ret->type = XS_DATE; 1581 ret->type = XS_DATE;
1582 else if ((ret->type != XS_GYEARMONTH) && (r->mon != 1)) 1582 else if ((ret->type != XS_GYEARMONTH) && (r->mon != 1))
1583 ret->type = XS_GYEARMONTH; 1583 ret->type = XS_GYEARMONTH;
1584 } 1584 }
1585 } 1585 }
1586 1586
1587 return ret; 1587 return ret;
1588 } 1588 }
1589 1589
1590 /** 1590 /**
1591 * exsltDateNormalize: 1591 * exsltDateNormalize:
1592 * @dt: an #exsltDateValPtr 1592 * @dt: an #exsltDateValPtr
1593 * 1593 *
1594 * Normalize @dt to GMT time. 1594 * Normalize @dt to GMT time.
1595 * 1595 *
1596 */ 1596 */
1597 static void 1597 static void
1598 exsltDateNormalize (exsltDateValPtr dt) 1598 exsltDateNormalize (exsltDateValPtr dt)
1599 { 1599 {
1600 exsltDateValPtr dur, tmp; 1600 exsltDateValPtr dur, tmp;
1601 1601
1602 if (dt == NULL) 1602 if (dt == NULL)
1603 return; 1603 return;
1604 1604
1605 if (((dt->type & XS_TIME) != XS_TIME) || (dt->value.date.tzo == 0)) 1605 if (((dt->type & XS_TIME) != XS_TIME) && (dt->value.date.tzo == 0))
1606 return; 1606 return;
1607 1607
1608 dur = exsltDateCreateDate(XS_DURATION); 1608 dur = exsltDateCreateDate(XS_DURATION);
1609 if (dur == NULL) 1609 if (dur == NULL)
1610 return; 1610 return;
1611 1611
1612 tmp = _exsltDateAdd(dt, dur); 1612 tmp = _exsltDateAdd(dt, dur);
1613 if (tmp == NULL) 1613 if (tmp == NULL)
1614 return; 1614 return;
1615 1615
(...skipping 19 matching lines...) Expand all
1635 */ 1635 */
1636 static exsltDateValPtr 1636 static exsltDateValPtr
1637 _exsltDateDifference (exsltDateValPtr x, exsltDateValPtr y, int flag) 1637 _exsltDateDifference (exsltDateValPtr x, exsltDateValPtr y, int flag)
1638 { 1638 {
1639 exsltDateValPtr ret; 1639 exsltDateValPtr ret;
1640 1640
1641 if ((x == NULL) || (y == NULL)) 1641 if ((x == NULL) || (y == NULL))
1642 return NULL; 1642 return NULL;
1643 1643
1644 if (((x->type < XS_GYEAR) || (x->type > XS_DATETIME)) || 1644 if (((x->type < XS_GYEAR) || (x->type > XS_DATETIME)) ||
1645 ((y->type < XS_GYEAR) || (y->type > XS_DATETIME))) 1645 ((y->type < XS_GYEAR) || (y->type > XS_DATETIME)))
1646 return NULL; 1646 return NULL;
1647 1647
1648 exsltDateNormalize(x); 1648 exsltDateNormalize(x);
1649 exsltDateNormalize(y); 1649 exsltDateNormalize(y);
1650 1650
1651 /* 1651 /*
1652 * the operand with the most specific format must be converted to 1652 * the operand with the most specific format must be converted to
1653 * the same type as the operand with the least specific format. 1653 * the same type as the operand with the least specific format.
1654 */ 1654 */
1655 if (x->type != y->type) { 1655 if (x->type != y->type) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 * * 1772 * *
1773 * EXSLT - Dates and Times functions * 1773 * EXSLT - Dates and Times functions *
1774 * * 1774 * *
1775 ****************************************************************/ 1775 ****************************************************************/
1776 1776
1777 /** 1777 /**
1778 * exsltDateDateTime: 1778 * exsltDateDateTime:
1779 * 1779 *
1780 * Implements the EXSLT - Dates and Times date-time() function: 1780 * Implements the EXSLT - Dates and Times date-time() function:
1781 * string date:date-time() 1781 * string date:date-time()
1782 * 1782 *
1783 * Returns the current date and time as a date/time string. 1783 * Returns the current date and time as a date/time string.
1784 */ 1784 */
1785 static xmlChar * 1785 static xmlChar *
1786 exsltDateDateTime (void) 1786 exsltDateDateTime (void)
1787 { 1787 {
1788 xmlChar *ret = NULL; 1788 xmlChar *ret = NULL;
1789 #ifdef WITH_TIME 1789 #ifdef WITH_TIME
1790 exsltDateValPtr cur; 1790 exsltDateValPtr cur;
1791 1791
1792 cur = exsltDateCurrent(); 1792 cur = exsltDateCurrent();
1793 if (cur != NULL) { 1793 if (cur != NULL) {
1794 ret = exsltDateFormatDateTime(&(cur->value.date)); 1794 ret = exsltDateFormatDateTime(&(cur->value.date));
1795 exsltDateFreeDate(cur); 1795 exsltDateFreeDate(cur);
1796 } 1796 }
1797 #endif 1797 #endif
1798 1798
1799 return ret; 1799 return ret;
1800 } 1800 }
1801 1801
1802 /** 1802 /**
1803 * exsltDateDate: 1803 * exsltDateDate:
1804 * @dateTime: a date/time string 1804 * @dateTime: a date/time string
1805 * 1805 *
1806 * Implements the EXSLT - Dates and Times date() function: 1806 * Implements the EXSLT - Dates and Times date() function:
1807 * string date:date (string?) 1807 * string date:date (string?)
1808 * 1808 *
1809 * Returns the date specified in the date/time string given as the 1809 * Returns the date specified in the date/time string given as the
1810 * argument. If no argument is given, then the current local 1810 * argument. If no argument is given, then the current local
1811 * date/time, as returned by date:date-time is used as a default 1811 * date/time, as returned by date:date-time is used as a default
1812 * argument. 1812 * argument.
1813 * The date/time string specified as an argument must be a string in 1813 * The date/time string specified as an argument must be a string in
1814 * the format defined as the lexical representation of either 1814 * the format defined as the lexical representation of either
1815 * xs:dateTime or xs:date. If the argument is not in either of these 1815 * xs:dateTime or xs:date. If the argument is not in either of these
1816 * formats, returns NULL. 1816 * formats, returns NULL.
1817 */ 1817 */
1818 static xmlChar * 1818 static xmlChar *
(...skipping 23 matching lines...) Expand all
1842 1842
1843 return ret; 1843 return ret;
1844 } 1844 }
1845 1845
1846 /** 1846 /**
1847 * exsltDateTime: 1847 * exsltDateTime:
1848 * @dateTime: a date/time string 1848 * @dateTime: a date/time string
1849 * 1849 *
1850 * Implements the EXSLT - Dates and Times time() function: 1850 * Implements the EXSLT - Dates and Times time() function:
1851 * string date:time (string?) 1851 * string date:time (string?)
1852 * 1852 *
1853 * Returns the time specified in the date/time string given as the 1853 * Returns the time specified in the date/time string given as the
1854 * argument. If no argument is given, then the current local 1854 * argument. If no argument is given, then the current local
1855 * date/time, as returned by date:date-time is used as a default 1855 * date/time, as returned by date:date-time is used as a default
1856 * argument. 1856 * argument.
1857 * The date/time string specified as an argument must be a string in 1857 * The date/time string specified as an argument must be a string in
1858 * the format defined as the lexical representation of either 1858 * the format defined as the lexical representation of either
1859 * xs:dateTime or xs:time. If the argument is not in either of these 1859 * xs:dateTime or xs:time. If the argument is not in either of these
1860 * formats, returns NULL. 1860 * formats, returns NULL.
1861 */ 1861 */
1862 static xmlChar * 1862 static xmlChar *
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
2623 * given, then the current local date/time, as returned by 2623 * given, then the current local date/time, as returned by
2624 * date:date-time is used the default argument. 2624 * date:date-time is used the default argument.
2625 * The date/time string specified as the argument is a left or 2625 * The date/time string specified as the argument is a left or
2626 * right-truncated string in the format defined as the lexical 2626 * right-truncated string in the format defined as the lexical
2627 * representation of xs:dateTime in one of the formats defined in [XML 2627 * representation of xs:dateTime in one of the formats defined in [XML
2628 * Schema Part 2: Datatypes]. The permitted formats are as follows: 2628 * Schema Part 2: Datatypes]. The permitted formats are as follows:
2629 * - xs:dateTime (CCYY-MM-DDThh:mm:ss) 2629 * - xs:dateTime (CCYY-MM-DDThh:mm:ss)
2630 * - xs:time (hh:mm:ss) 2630 * - xs:time (hh:mm:ss)
2631 * If the date/time string is not in one of these formats, then NaN is 2631 * If the date/time string is not in one of these formats, then NaN is
2632 * returned. 2632 * returned.
2633 * 2633 *
2634 * Returns the second or NaN. 2634 * Returns the second or NaN.
2635 */ 2635 */
2636 static double 2636 static double
2637 exsltDateSecondInMinute (const xmlChar *dateTime) 2637 exsltDateSecondInMinute (const xmlChar *dateTime)
2638 { 2638 {
2639 exsltDateValPtr dt; 2639 exsltDateValPtr dt;
2640 double ret; 2640 double ret;
2641 2641
2642 if (dateTime == NULL) { 2642 if (dateTime == NULL) {
2643 #ifdef WITH_TIME 2643 #ifdef WITH_TIME
(...skipping 16 matching lines...) Expand all
2660 2660
2661 return ret; 2661 return ret;
2662 } 2662 }
2663 2663
2664 /** 2664 /**
2665 * exsltDateAdd: 2665 * exsltDateAdd:
2666 * @xstr: date/time string 2666 * @xstr: date/time string
2667 * @ystr: date/time string 2667 * @ystr: date/time string
2668 * 2668 *
2669 * Implements the date:add (string,string) function which returns the 2669 * Implements the date:add (string,string) function which returns the
2670 * date/time * resulting from adding a duration to a date/time. 2670 * date/time * resulting from adding a duration to a date/time.
2671 * The first argument (@xstr) must be right-truncated date/time 2671 * The first argument (@xstr) must be right-truncated date/time
2672 * strings in one of the formats defined in [XML Schema Part 2: 2672 * strings in one of the formats defined in [XML Schema Part 2:
2673 * Datatypes]. The permitted formats are as follows: 2673 * Datatypes]. The permitted formats are as follows:
2674 * - xs:dateTime (CCYY-MM-DDThh:mm:ss) 2674 * - xs:dateTime (CCYY-MM-DDThh:mm:ss)
2675 * - xs:date (CCYY-MM-DD) 2675 * - xs:date (CCYY-MM-DD)
2676 * - xs:gYearMonth (CCYY-MM) 2676 * - xs:gYearMonth (CCYY-MM)
2677 * - xs:gYear (CCYY) 2677 * - xs:gYear (CCYY)
2678 * The second argument (@ystr) is a string in the format defined for 2678 * The second argument (@ystr) is a string in the format defined for
2679 * xs:duration in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. 2679 * xs:duration in [3.2.6 duration] of [XML Schema Part 2: Datatypes].
2680 * The return value is a right-truncated date/time strings in one of 2680 * The return value is a right-truncated date/time strings in one of
2681 * the formats defined in [XML Schema Part 2: Datatypes] and listed 2681 * the formats defined in [XML Schema Part 2: Datatypes] and listed
2682 * above. This value is calculated using the algorithm described in 2682 * above. This value is calculated using the algorithm described in
2683 * [Appendix E Adding durations to dateTimes] of [XML Schema Part 2: 2683 * [Appendix E Adding durations to dateTimes] of [XML Schema Part 2:
2684 * Datatypes]. 2684 * Datatypes].
2685 2685
2686 * Returns date/time string or NULL. 2686 * Returns date/time string or NULL.
2687 */ 2687 */
2688 static xmlChar * 2688 static xmlChar *
2689 exsltDateAdd (const xmlChar *xstr, const xmlChar *ystr) 2689 exsltDateAdd (const xmlChar *xstr, const xmlChar *ystr)
2690 { 2690 {
2691 exsltDateValPtr dt, dur, res; 2691 exsltDateValPtr dt, dur, res;
2692 xmlChar *ret; 2692 xmlChar *ret;
2693 2693
2694 if ((xstr == NULL) || (ystr == NULL)) 2694 if ((xstr == NULL) || (ystr == NULL))
2695 return NULL; 2695 return NULL;
2696 2696
2697 dt = exsltDateParse(xstr); 2697 dt = exsltDateParse(xstr);
2698 if (dt == NULL) 2698 if (dt == NULL)
2699 return NULL; 2699 return NULL;
2700 else if ((dt->type < XS_GYEAR) || (dt->type > XS_DATETIME)) { 2700 else if ((dt->type < XS_GYEAR) || (dt->type > XS_DATETIME)) {
2701 exsltDateFreeDate(dt); 2701 exsltDateFreeDate(dt);
2702 return NULL; 2702 return NULL;
(...skipping 18 matching lines...) Expand all
2721 2721
2722 return ret; 2722 return ret;
2723 } 2723 }
2724 2724
2725 /** 2725 /**
2726 * exsltDateAddDuration: 2726 * exsltDateAddDuration:
2727 * @xstr: first duration string 2727 * @xstr: first duration string
2728 * @ystr: second duration string 2728 * @ystr: second duration string
2729 * 2729 *
2730 * Implements the date:add-duration (string,string) function which returns 2730 * Implements the date:add-duration (string,string) function which returns
2731 * the duration resulting from adding two durations together. 2731 * the duration resulting from adding two durations together.
2732 * Both arguments are strings in the format defined for xs:duration 2732 * Both arguments are strings in the format defined for xs:duration
2733 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. If either 2733 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. If either
2734 * argument is not in this format, the function returns an empty string 2734 * argument is not in this format, the function returns an empty string
2735 * (''). 2735 * ('').
2736 * The return value is a string in the format defined for xs:duration 2736 * The return value is a string in the format defined for xs:duration
2737 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. 2737 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes].
2738 * The durations can usually be added by summing the numbers given for 2738 * The durations can usually be added by summing the numbers given for
2739 * each of the components in the durations. However, if the durations 2739 * each of the components in the durations. However, if the durations
2740 * are differently signed, then this sometimes results in durations 2740 * are differently signed, then this sometimes results in durations
2741 * that are impossible to express in this syntax (e.g. 'P1M' + '-P1D'). 2741 * that are impossible to express in this syntax (e.g. 'P1M' + '-P1D').
2742 * In these cases, the function returns an empty string (''). 2742 * In these cases, the function returns an empty string ('').
2743 * 2743 *
2744 * Returns duration string or NULL. 2744 * Returns duration string or NULL.
2745 */ 2745 */
2746 static xmlChar * 2746 static xmlChar *
2747 exsltDateAddDuration (const xmlChar *xstr, const xmlChar *ystr) 2747 exsltDateAddDuration (const xmlChar *xstr, const xmlChar *ystr)
2748 { 2748 {
2749 exsltDateValPtr x, y, res; 2749 exsltDateValPtr x, y, res;
2750 xmlChar *ret; 2750 xmlChar *ret;
2751 2751
2752 if ((xstr == NULL) || (ystr == NULL)) 2752 if ((xstr == NULL) || (ystr == NULL))
2753 return NULL; 2753 return NULL;
2754 2754
2755 x = exsltDateParseDuration(xstr); 2755 x = exsltDateParseDuration(xstr);
2756 if (x == NULL) 2756 if (x == NULL)
2757 return NULL; 2757 return NULL;
2758 2758
2759 y = exsltDateParseDuration(ystr); 2759 y = exsltDateParseDuration(ystr);
2760 if (y == NULL) { 2760 if (y == NULL) {
(...skipping 12 matching lines...) Expand all
2773 ret = exsltDateFormatDuration(&(res->value.dur)); 2773 ret = exsltDateFormatDuration(&(res->value.dur));
2774 exsltDateFreeDate(res); 2774 exsltDateFreeDate(res);
2775 2775
2776 return ret; 2776 return ret;
2777 } 2777 }
2778 2778
2779 /** 2779 /**
2780 * exsltDateSumFunction: 2780 * exsltDateSumFunction:
2781 * @ns: a node set of duration strings 2781 * @ns: a node set of duration strings
2782 * 2782 *
2783 * The date:sum function adds a set of durations together. 2783 * The date:sum function adds a set of durations together.
2784 * The string values of the nodes in the node set passed as an argument 2784 * The string values of the nodes in the node set passed as an argument
2785 * are interpreted as durations and added together as if using the 2785 * are interpreted as durations and added together as if using the
2786 * date:add-duration function. (from exslt.org) 2786 * date:add-duration function. (from exslt.org)
2787 * 2787 *
2788 * The return value is a string in the format defined for xs:duration 2788 * The return value is a string in the format defined for xs:duration
2789 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. 2789 * in [3.2.6 duration] of [XML Schema Part 2: Datatypes].
2790 * The durations can usually be added by summing the numbers given for 2790 * The durations can usually be added by summing the numbers given for
2791 * each of the components in the durations. However, if the durations 2791 * each of the components in the durations. However, if the durations
2792 * are differently signed, then this sometimes results in durations 2792 * are differently signed, then this sometimes results in durations
2793 * that are impossible to express in this syntax (e.g. 'P1M' + '-P1D'). 2793 * that are impossible to express in this syntax (e.g. 'P1M' + '-P1D').
2794 * In these cases, the function returns an empty string (''). 2794 * In these cases, the function returns an empty string ('').
2795 * 2795 *
2796 * Returns duration string or NULL. 2796 * Returns duration string or NULL.
2797 */ 2797 */
2798 static void 2798 static void
2799 exsltDateSumFunction (xmlXPathParserContextPtr ctxt, int nargs) 2799 exsltDateSumFunction (xmlXPathParserContextPtr ctxt, int nargs)
2800 { 2800 {
2801 xmlNodeSetPtr ns; 2801 xmlNodeSetPtr ns;
2802 void *user = NULL; 2802 void *user = NULL;
2803 xmlChar *tmp; 2803 xmlChar *tmp;
2804 exsltDateValPtr x, total; 2804 exsltDateValPtr x, total;
(...skipping 23 matching lines...) Expand all
2828 return; 2828 return;
2829 } 2829 }
2830 2830
2831 total = exsltDateCreateDate (XS_DURATION); 2831 total = exsltDateCreateDate (XS_DURATION);
2832 if (total == NULL) { 2832 if (total == NULL) {
2833 xmlXPathFreeNodeSet (ns); 2833 xmlXPathFreeNodeSet (ns);
2834 return; 2834 return;
2835 } 2835 }
2836 2836
2837 for (i = 0; i < ns->nodeNr; i++) { 2837 for (i = 0; i < ns->nodeNr; i++) {
2838 » int result; 2838 » int result;
2839 tmp = xmlXPathCastNodeToString (ns->nodeTab[i]); 2839 tmp = xmlXPathCastNodeToString (ns->nodeTab[i]);
2840 if (tmp == NULL) { 2840 if (tmp == NULL) {
2841 xmlXPathFreeNodeSet (ns); 2841 xmlXPathFreeNodeSet (ns);
2842 exsltDateFreeDate (total); 2842 exsltDateFreeDate (total);
2843 return; 2843 return;
2844 } 2844 }
2845 2845
2846 x = exsltDateParseDuration (tmp); 2846 x = exsltDateParseDuration (tmp);
2847 if (x == NULL) { 2847 if (x == NULL) {
2848 xmlFree (tmp); 2848 xmlFree (tmp);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2881 * exsltDateSeconds: 2881 * exsltDateSeconds:
2882 * @dateTime: a date/time string 2882 * @dateTime: a date/time string
2883 * 2883 *
2884 * Implements the EXSLT - Dates and Times seconds() function: 2884 * Implements the EXSLT - Dates and Times seconds() function:
2885 * number date:seconds(string?) 2885 * number date:seconds(string?)
2886 * The date:seconds function returns the number of seconds specified 2886 * The date:seconds function returns the number of seconds specified
2887 * by the argument string. If no argument is given, then the current 2887 * by the argument string. If no argument is given, then the current
2888 * local date/time, as returned by exsltDateCurrent() is used as the 2888 * local date/time, as returned by exsltDateCurrent() is used as the
2889 * default argument. If the date/time string is a xs:duration, then the 2889 * default argument. If the date/time string is a xs:duration, then the
2890 * years and months must be zero (or not present). Parsing a duration 2890 * years and months must be zero (or not present). Parsing a duration
2891 * converts the fields to seconds. If the date/time string is not a 2891 * converts the fields to seconds. If the date/time string is not a
2892 * duration (and not null), then the legal formats are: 2892 * duration (and not null), then the legal formats are:
2893 * - xs:dateTime (CCYY-MM-DDThh:mm:ss) 2893 * - xs:dateTime (CCYY-MM-DDThh:mm:ss)
2894 * - xs:date (CCYY-MM-DD) 2894 * - xs:date (CCYY-MM-DD)
2895 * - xs:gYearMonth (CCYY-MM) 2895 * - xs:gYearMonth (CCYY-MM)
2896 * - xs:gYear (CCYY) 2896 * - xs:gYear (CCYY)
2897 * In these cases the difference between the @dateTime and 2897 * In these cases the difference between the @dateTime and
2898 * 1970-01-01T00:00:00Z is calculated and converted to seconds. 2898 * 1970-01-01T00:00:00Z is calculated and converted to seconds.
2899 * 2899 *
2900 * Note that there was some confusion over whether "difference" meant 2900 * Note that there was some confusion over whether "difference" meant
2901 * that a dateTime of 1970-01-01T00:00:01Z should be a positive one or 2901 * that a dateTime of 1970-01-01T00:00:01Z should be a positive one or
2902 * a negative one. After correspondence with exslt.org, it was determined 2902 * a negative one. After correspondence with exslt.org, it was determined
2903 * that the intent of the specification was to have it positive. The 2903 * that the intent of the specification was to have it positive. The
2904 * coding was modified in July 2003 to reflect this. 2904 * coding was modified in July 2003 to reflect this.
2905 * 2905 *
2906 * Returns seconds or Nan. 2906 * Returns seconds or Nan.
2907 */ 2907 */
(...skipping 27 matching lines...) Expand all
2935 */ 2935 */
2936 y = exsltDateCreateDate(XS_DATETIME); 2936 y = exsltDateCreateDate(XS_DATETIME);
2937 if (y != NULL) { 2937 if (y != NULL) {
2938 y->value.date.year = 1970; 2938 y->value.date.year = 1970;
2939 y->value.date.mon = 1; 2939 y->value.date.mon = 1;
2940 y->value.date.day = 1; 2940 y->value.date.day = 1;
2941 y->value.date.tz_flag = 1; 2941 y->value.date.tz_flag = 1;
2942 2942
2943 dur = _exsltDateDifference(y, dt, 1); 2943 dur = _exsltDateDifference(y, dt, 1);
2944 if (dur != NULL) { 2944 if (dur != NULL) {
2945 ret = exsltDateCastDateToNumber(dur); 2945 ret = exsltDateCastDateToNumber(dur);
2946 exsltDateFreeDate(dur); 2946 exsltDateFreeDate(dur);
2947 } 2947 }
2948 exsltDateFreeDate(y); 2948 exsltDateFreeDate(y);
2949 } 2949 }
2950 2950
2951 } else if ((dt->type == XS_DURATION) && (dt->value.dur.mon == 0)) 2951 } else if ((dt->type == XS_DURATION) && (dt->value.dur.mon == 0))
2952 ret = exsltDateCastDateToNumber(dt); 2952 ret = exsltDateCastDateToNumber(dt);
2953 2953
2954 exsltDateFreeDate(dt); 2954 exsltDateFreeDate(dt);
2955 2955
2956 return ret; 2956 return ret;
2957 } 2957 }
2958 2958
2959 /** 2959 /**
2960 * exsltDateDifference: 2960 * exsltDateDifference:
2961 * @xstr: date/time string 2961 * @xstr: date/time string
2962 * @ystr: date/time string 2962 * @ystr: date/time string
2963 * 2963 *
2964 * Implements the date:difference (string,string) function which returns 2964 * Implements the date:difference (string,string) function which returns
2965 * the duration between the first date and the second date. If the first 2965 * the duration between the first date and the second date. If the first
2966 * date occurs before the second date, then the result is a positive 2966 * date occurs before the second date, then the result is a positive
2967 * duration; if it occurs after the second date, the result is a 2967 * duration; if it occurs after the second date, the result is a
2968 * negative duration. The two dates must both be right-truncated 2968 * negative duration. The two dates must both be right-truncated
2969 * date/time strings in one of the formats defined in [XML Schema Part 2969 * date/time strings in one of the formats defined in [XML Schema Part
2970 * 2: Datatypes]. The date/time with the most specific format (i.e. the 2970 * 2: Datatypes]. The date/time with the most specific format (i.e. the
2971 * least truncation) is converted into the same format as the date with 2971 * least truncation) is converted into the same format as the date with
2972 * the least specific format (i.e. the most truncation). The permitted 2972 * the least specific format (i.e. the most truncation). The permitted
2973 * formats are as follows, from most specific to least specific: 2973 * formats are as follows, from most specific to least specific:
2974 * - xs:dateTime (CCYY-MM-DDThh:mm:ss) 2974 * - xs:dateTime (CCYY-MM-DDThh:mm:ss)
2975 * - xs:date (CCYY-MM-DD) 2975 * - xs:date (CCYY-MM-DD)
2976 * - xs:gYearMonth (CCYY-MM) 2976 * - xs:gYearMonth (CCYY-MM)
2977 * - xs:gYear (CCYY) 2977 * - xs:gYear (CCYY)
2978 * If either of the arguments is not in one of these formats, 2978 * If either of the arguments is not in one of these formats,
2979 * date:difference returns the empty string (''). 2979 * date:difference returns the empty string ('').
2980 * The difference between the date/times is returned as a string in the 2980 * The difference between the date/times is returned as a string in the
2981 * format defined for xs:duration in [3.2.6 duration] of [XML Schema 2981 * format defined for xs:duration in [3.2.6 duration] of [XML Schema
2982 * Part 2: Datatypes]. 2982 * Part 2: Datatypes].
2983 * If the date/time string with the least specific format is in either 2983 * If the date/time string with the least specific format is in either
2984 * xs:gYearMonth or xs:gYear format, then the number of days, hours, 2984 * xs:gYearMonth or xs:gYear format, then the number of days, hours,
2985 * minutes and seconds in the duration string must be equal to zero. 2985 * minutes and seconds in the duration string must be equal to zero.
2986 * (The format of the string will be PnYnM.) The number of months 2986 * (The format of the string will be PnYnM.) The number of months
2987 * specified in the duration must be less than 12. 2987 * specified in the duration must be less than 12.
2988 * Otherwise, the number of years and months in the duration string 2988 * Otherwise, the number of years and months in the duration string
2989 * must be equal to zero. (The format of the string will be 2989 * must be equal to zero. (The format of the string will be
2990 * PnDTnHnMnS.) The number of seconds specified in the duration string 2990 * PnDTnHnMnS.) The number of seconds specified in the duration string
2991 * must be less than 60; the number of minutes must be less than 60; 2991 * must be less than 60; the number of minutes must be less than 60;
2992 * the number of hours must be less than 24. 2992 * the number of hours must be less than 24.
2993 * 2993 *
2994 * Returns duration string or NULL. 2994 * Returns duration string or NULL.
2995 */ 2995 */
2996 static xmlChar * 2996 static xmlChar *
2997 exsltDateDifference (const xmlChar *xstr, const xmlChar *ystr) 2997 exsltDateDifference (const xmlChar *xstr, const xmlChar *ystr)
2998 { 2998 {
2999 exsltDateValPtr x, y, dur; 2999 exsltDateValPtr x, y, dur;
3000 xmlChar *ret = NULL; 3000 xmlChar *ret = NULL;
3001 3001
3002 if ((xstr == NULL) || (ystr == NULL)) 3002 if ((xstr == NULL) || (ystr == NULL))
3003 return NULL; 3003 return NULL;
3004 3004
3005 x = exsltDateParse(xstr); 3005 x = exsltDateParse(xstr);
3006 if (x == NULL) 3006 if (x == NULL)
3007 return NULL; 3007 return NULL;
3008 3008
3009 y = exsltDateParse(ystr); 3009 y = exsltDateParse(ystr);
3010 if (y == NULL) { 3010 if (y == NULL) {
(...skipping 22 matching lines...) Expand all
3033 return ret; 3033 return ret;
3034 } 3034 }
3035 3035
3036 /** 3036 /**
3037 * exsltDateDuration: 3037 * exsltDateDuration:
3038 * @number: a xmlChar string 3038 * @number: a xmlChar string
3039 * 3039 *
3040 * Implements the The date:duration function returns a duration string 3040 * Implements the The date:duration function returns a duration string
3041 * representing the number of seconds specified by the argument string. 3041 * representing the number of seconds specified by the argument string.
3042 * If no argument is given, then the result of calling date:seconds 3042 * If no argument is given, then the result of calling date:seconds
3043 * without any arguments is used as a default argument. 3043 * without any arguments is used as a default argument.
3044 * The duration is returned as a string in the format defined for 3044 * The duration is returned as a string in the format defined for
3045 * xs:duration in [3.2.6 duration] of [XML Schema Part 2: Datatypes]. 3045 * xs:duration in [3.2.6 duration] of [XML Schema Part 2: Datatypes].
3046 * The number of years and months in the duration string must be equal 3046 * The number of years and months in the duration string must be equal
3047 * to zero. (The format of the string will be PnDTnHnMnS.) The number 3047 * to zero. (The format of the string will be PnDTnHnMnS.) The number
3048 * of seconds specified in the duration string must be less than 60; 3048 * of seconds specified in the duration string must be less than 60;
3049 * the number of minutes must be less than 60; the number of hours must 3049 * the number of minutes must be less than 60; the number of hours must
3050 * be less than 24. 3050 * be less than 24.
3051 * If the argument is Infinity, -Infinity or NaN, then date:duration 3051 * If the argument is Infinity, -Infinity or NaN, then date:duration
3052 * returns an empty string (''). 3052 * returns an empty string ('').
3053 * 3053 *
3054 * Returns duration string or NULL. 3054 * Returns duration string or NULL.
3055 */ 3055 */
3056 static xmlChar * 3056 static xmlChar *
3057 exsltDateDuration (const xmlChar *number) 3057 exsltDateDuration (const xmlChar *number)
3058 { 3058 {
3059 exsltDateValPtr dur; 3059 exsltDateValPtr dur;
3060 double secs; 3060 double secs;
3061 xmlChar *ret; 3061 xmlChar *ret;
3062 3062
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
3905 (const xmlChar *) EXSLT_DATE_NAMESPACE, 3905 (const xmlChar *) EXSLT_DATE_NAMESPACE,
3906 exsltDateWeekInYearFunction) 3906 exsltDateWeekInYearFunction)
3907 && !xmlXPathRegisterFuncNS(ctxt, 3907 && !xmlXPathRegisterFuncNS(ctxt,
3908 (const xmlChar *) "year", 3908 (const xmlChar *) "year",
3909 (const xmlChar *) EXSLT_DATE_NAMESPACE, 3909 (const xmlChar *) EXSLT_DATE_NAMESPACE,
3910 exsltDateYearFunction)) { 3910 exsltDateYearFunction)) {
3911 return 0; 3911 return 0;
3912 } 3912 }
3913 return -1; 3913 return -1;
3914 } 3914 }
OLDNEW
« no previous file with comments | « third_party/libxslt/libexslt/crypto.c ('k') | third_party/libxslt/libexslt/dynamic.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698