strerror \
initgroups \
waitpid \
-difftime \
gettimeofday \
memmove \
bzero \
*/
/* Time */
-API_EXPORT(struct tm *) ap_get_gmtoff(int *tz);
API_EXPORT(char *) ap_get_time(void);
API_EXPORT(char *) ap_field_noparam(ap_context_t *p, const char *intype);
API_EXPORT(char *) ap_ht_time(ap_context_t *p, ap_time_t *t, const char *fmt, int gmt);
#define BAD_DATE (time_t)0
API_EXPORT(int) ap_checkmask(const char *data, const char *mask);
-API_EXPORT(time_t) ap_tm2sec(const struct tm *t);
API_EXPORT(ap_time_t *) ap_parseHTTPdate(const char *date, ap_context_t *cont);
#ifdef __cplusplus
static const char *log_request_time(request_rec *r, char *a)
{
int timz;
- struct tm *t;
+ ap_int32_t mday, year, hour, min, sec, month;
+ ap_time_t *t;
char tstr[MAX_STRING_LEN];
- t = ap_get_gmtoff(&timz);
+ ap_make_time(&t, r->pool);
+ ap_get_gmtoff(&timz, t, r->pool);
if (a && *a) { /* Custom format */
- strftime(tstr, MAX_STRING_LEN, a, t);
+ ap_strftime(tstr, MAX_STRING_LEN, a, t);
}
else { /* CLF format */
char sign = (timz < 0 ? '-' : '+');
if (timz < 0) {
timz = -timz;
}
+ ap_get_mday(t, &mday);
+ ap_get_year(t, &year);
+ ap_get_hour(t, &month);
+ ap_get_hour(t, &hour);
+ ap_get_min(t, &min);
+ ap_get_sec(t, &sec);
ap_snprintf(tstr, sizeof(tstr), "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
- t->tm_mday, ap_month_snames[t->tm_mon], t->tm_year+1900,
- t->tm_hour, t->tm_min, t->tm_sec,
+ mday, ap_month_snames[month], year+1900,
+ hour, min, sec,
sign, timz / 60, timz % 60);
}
API_EXPORT(char *) ap_get_time()
{
- time_t t;
- char *time_string;
+ ap_time_t *t = NULL;
+ char *time_string = NULL;
- t = time(NULL);
- time_string = ctime(&t);
- time_string[strlen(time_string) - 1] = '\0';
+ ap_make_time(&t, NULL);
+ ap_current_time(t);
+
+ ap_timestr(&time_string, t, APR_LOCALTIME, NULL);
return (time_string);
}
return ap_pstrdup(p, ts);
}
-/* What a pain in the ass. */
-#if defined(HAVE_GMTOFF)
-API_EXPORT(struct tm *) ap_get_gmtoff(int *tz)
-{
- time_t tt = time(NULL);
- struct tm *t;
-
- t = localtime(&tt);
- *tz = (int) (t->tm_gmtoff / 60);
- return t;
-}
-#else
-API_EXPORT(struct tm *) ap_get_gmtoff(int *tz)
-{
- time_t tt = time(NULL);
- struct tm gmt;
- struct tm *t;
- int days, hours, minutes;
-
- /* Assume we are never more than 24 hours away. */
- gmt = *gmtime(&tt); /* remember gmtime/localtime return ptr to static */
- t = localtime(&tt); /* buffer... so be careful */
- days = t->tm_yday - gmt.tm_yday;
- hours = ((days < -1 ? 24 : 1 < days ? -24 : days * 24)
- + t->tm_hour - gmt.tm_hour);
- minutes = hours * 60 + t->tm_min - gmt.tm_min;
- *tz = minutes;
- return t;
-}
-#endif
-
/* Roy owes Rob beer. */
/* Rob owes Roy dinner. */
}
#endif
-#ifndef HAVE_DIFFTIME
-double difftime(time_t time1, time_t time0)
-{
- return (time1 - time0);
-}
-#endif
-
/* we want to downcase the type/subtype for comparison purposes
* but nothing else because ;parameter=foo values are case sensitive.
* XXX: in truth we want to downcase parameter names... but really,
return 0; /* We only get here if mask is corrupted (exceeds 256) */
}
-/*
- * tm2sec converts a GMT tm structure into the number of seconds since
- * 1st January 1970 UT. Note that we ignore tm_wday, tm_yday, and tm_dst.
- *
- * The return value is always a valid time_t value -- (time_t)0 is returned
- * if the input date is outside that capable of being represented by time(),
- * i.e., before Thu, 01 Jan 1970 00:00:00 for all systems and
- * beyond 2038 for 32bit systems.
- *
- * This routine is intended to be very fast, much faster than mktime().
- */
-API_EXPORT(time_t) ap_tm2sec(const struct tm * t)
-{
- int year;
- time_t days;
- static const int dayoffset[12] =
- {306, 337, 0, 31, 61, 92, 122, 153, 184, 214, 245, 275};
-
- year = t->tm_year;
-
- if (year < 70 || ((sizeof(time_t) <= 4) && (year >= 138)))
- return BAD_DATE;
-
- /* shift new year to 1st March in order to make leap year calc easy */
-
- if (t->tm_mon < 2)
- year--;
-
- /* Find number of days since 1st March 1900 (in the Gregorian calendar). */
-
- days = year * 365 + year / 4 - year / 100 + (year / 100 + 3) / 4;
- days += dayoffset[t->tm_mon] + t->tm_mday - 1;
- days -= 25508; /* 1 jan 1970 is 25508 days since 1 mar 1900 */
-
- days = ((days * 24 + t->tm_hour) * 60 + t->tm_min) * 60 + t->tm_sec;
-
- if (days < 0)
- return BAD_DATE; /* must have overflowed */
- else
- return days; /* must be a valid time */
-}
-
/*
* Parses an HTTP date in one of three standard forms:
*