You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@hyperreal.org on 1999/12/20 17:10:20 UTC
cvs commit: apache-2.0/src/lib/apr/time/unix timestr.c Makefile.in access.c atime.h time.c
rbb 99/12/20 08:10:19
Modified: src/lib/apr/include apr.h.in apr_errno.h apr_time.h
src/lib/apr/time/unix Makefile.in access.c atime.h time.c
Added: src/lib/apr/time/unix timestr.c
Log:
A bunch more time functions for use in Apache. This is really the first cut
at making the time library usable in an actual program.
Revision Changes Path
1.7 +1 -0 apache-2.0/src/lib/apr/include/apr.h.in
Index: apr.h.in
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr.h.in,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- apr.h.in 1999/12/06 18:19:33 1.6
+++ apr.h.in 1999/12/20 16:10:10 1.7
@@ -70,6 +70,7 @@
#define API_EXPORT(type) type
#define API_EXPORT_NONSTD(type) type
#define API_VAR_IMPORT extern
+#define API_VAR_EXPORT
#endif /* APR_H */
1.12 +3 -0 apache-2.0/src/lib/apr/include/apr_errno.h
Index: apr_errno.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_errno.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- apr_errno.h 1999/12/09 21:00:20 1.11
+++ apr_errno.h 1999/12/20 16:10:11 1.12
@@ -124,6 +124,9 @@
#define APR_BADARG (APR_OS_START_STATUS + 13)
#define APR_EOF (APR_OS_START_STATUS + 14)
#define APR_NOTFOUND (APR_OS_START_STATUS + 15)
+#define APR_LESS (APR_OS_START_STATUS + 16)
+#define APR_EQUAL (APR_OS_START_STATUS + 17)
+#define APR_MORE (APR_OS_START_STATUS + 18)
/* A simple value to be used to initialze a status variable. */
#define APR_EINIT (APR_OS_START_STATUS + 16)
1.4 +8 -0 apache-2.0/src/lib/apr/include/apr_time.h
Index: apr_time.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_time.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- apr_time.h 1999/10/04 16:36:55 1.3
+++ apr_time.h 1999/12/20 16:10:11 1.4
@@ -67,12 +67,18 @@
typedef struct atime_t ap_time_t;
+API_VAR_IMPORT const char ap_month_snames[12][4];
+API_VAR_IMPORT const char ap_day_snames[7][4];
+
/* Function Definitions */
ap_status_t ap_make_time(ap_time_t **, ap_context_t *);
ap_status_t ap_current_time(ap_time_t *);
ap_status_t ap_explode_time(ap_time_t *, ap_timetype_e);
ap_status_t ap_implode_time(ap_time_t *);
+ap_status_t ap_gm_timestr_822(char **date_str, struct atime_t *t, ap_context_t *p);
+ap_status_t ap_strftime(char *s, ap_size_t max, const char *format, ap_time_t *tm);
+
/* accessor functions */
ap_status_t ap_get_curtime(ap_time_t *, ap_int64_t *);
ap_status_t ap_timediff(ap_time_t *, ap_time_t *, ap_int32_t *);
@@ -85,6 +91,7 @@
ap_status_t ap_get_year(ap_time_t *, ap_int32_t *);
ap_status_t ap_get_wday(ap_time_t *, ap_int32_t *);
+ap_status_t ap_set_curtime(ap_time_t *, ap_int64_t);
ap_status_t ap_set_sec(ap_time_t *, ap_int32_t);
ap_status_t ap_set_min(ap_time_t *, ap_int32_t);
ap_status_t ap_set_hour(ap_time_t *, ap_int32_t);
@@ -92,6 +99,7 @@
ap_status_t ap_set_mon(ap_time_t *, ap_int32_t);
ap_status_t ap_set_year(ap_time_t *, ap_int32_t);
ap_status_t ap_set_wday(ap_time_t *, ap_int32_t);
+ap_status_t ap_timecmp(ap_time_t *a, ap_time_t *b);
ap_status_t ap_get_timedata(ap_time_t *, char *, void *);
ap_status_t ap_set_timedata(ap_time_t *, void *, char *,
1.8 +11 -4 apache-2.0/src/lib/apr/time/unix/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/Makefile.in,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Makefile.in 1999/12/19 18:10:05 1.7
+++ Makefile.in 1999/12/20 16:10:15 1.8
@@ -15,7 +15,8 @@
LIB=libtime.a
OBJS=time.o \
- access.o
+ access.o \
+ timestr.o
.c.o:
$(CC) $(CFLAGS) -c $(INCLUDES) $<
@@ -53,10 +54,16 @@
access.o: access.c atime.h ../../include/apr_config.h \
../../include/apr_time.h ../../include/apr_general.h \
../../include/apr.h ../../include/apr_errno.h ../../include/apr_lib.h \
- ../../include/apr_file_io.h
+ ../../include/apr_file_io.h ../../include/apr_thread_proc.h
time.o: time.c atime.h ../../include/apr_config.h \
../../include/apr_time.h ../../include/apr_general.h \
../../include/apr.h ../../include/apr_errno.h ../../include/apr_lib.h \
- ../../include/apr_file_io.h ../../include/apr_portable.h \
- ../../include/apr_thread_proc.h ../../include/apr_network_io.h \
+ ../../include/apr_file_io.h ../../include/apr_thread_proc.h \
+ ../../include/apr_portable.h ../../include/apr_network_io.h \
+ ../../include/apr_lock.h
+timestr.o: timestr.c atime.h ../../include/apr_config.h \
+ ../../include/apr_time.h ../../include/apr_general.h \
+ ../../include/apr.h ../../include/apr_errno.h ../../include/apr_lib.h \
+ ../../include/apr_file_io.h ../../include/apr_thread_proc.h \
+ ../../include/apr_portable.h ../../include/apr_network_io.h \
../../include/apr_lock.h
1.8 +18 -0 apache-2.0/src/lib/apr/time/unix/access.c
Index: access.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/access.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- access.c 1999/12/03 15:18:48 1.7
+++ access.c 1999/12/20 16:10:15 1.8
@@ -176,6 +176,24 @@
}
/* ***APRDOC********************************************************
+ * ap_status_t ap_set_curtime(ap_time_t *, ap_int64_t)
+ * Set the current time in seconds since Jan 1, 1970.
+ * arg 1) The time value we care about.
+ * arg 2) Integer to store time value in
+ */
+ap_status_t ap_set_curtime(struct atime_t *atime, ap_int64_t sec)
+{
+ if (atime) {
+ if (!atime->currtime) {
+ atime->currtime = ap_pcalloc(atime->cntxt, sizeof(struct timeval));
+ }
+ atime->currtime->tv_sec = sec;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
+}
+
+/* ***APRDOC********************************************************
* ap_status_t ap_set_sec(ap_time_t *, ap_int64_t)
* Set the number of sec since the top of the minute
* arg 1) The time value we care about.
1.4 +1 -0 apache-2.0/src/lib/apr/time/unix/atime.h
Index: atime.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/atime.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- atime.h 1999/12/06 18:19:48 1.3
+++ atime.h 1999/12/20 16:10:16 1.4
@@ -73,6 +73,7 @@
ap_context_t *cntxt;
struct timeval *currtime;
struct tm *explodedtime;
+ int time_ex; /* have we already exploded the time? */
};
1.13 +40 -0 apache-2.0/src/lib/apr/time/unix/time.c
Index: time.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/time.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- time.c 1999/12/03 15:18:49 1.12
+++ time.c 1999/12/20 16:10:16 1.13
@@ -72,6 +72,7 @@
(*new)->cntxt = cont;
(*new)->explodedtime = ap_palloc(cont, sizeof(struct tm));
+ (*new)->time_ex = 0;
(*new)->currtime = NULL;
return APR_SUCCESS;
}
@@ -85,6 +86,7 @@
{
new->currtime = ap_palloc(new->cntxt, sizeof(struct timeval));
gettimeofday(new->currtime, NULL);
+ new->time_ex = 0;
return APR_SUCCESS;
}
@@ -117,6 +119,7 @@
break;
}
}
+ atime->time_ex = 1;
return APR_SUCCESS;
}
@@ -160,6 +163,7 @@
atime->currtime = ap_palloc(atime->cntxt, sizeof(struct timeval));
atime->currtime->tv_sec = days; /* must be a valid time */
atime->currtime->tv_usec = 0;
+ atime->time_ex = 1;
return APR_SUCCESS;
}
@@ -199,6 +203,7 @@
(*thetime)->cntxt = cont;
}
(*thetime)->currtime = atime;
+ (*thetime)->time_ex = 0;
return APR_SUCCESS;
}
@@ -220,4 +225,39 @@
*rv = s + us;
return APR_SUCCESS;
}
+
+/* ***APRDOC********************************************************
+ * ap_status_t ap_timecmp(ap_time_t **, ap_time_t *, ap_time_t *)
+ * Compare two time values.
+ * arg 1) The first time value
+ * arg 2) The second time value.
+ * return) APR_LESS -- arg 1 < arg 2
+ * APR_MORE -- arg 1 > arg 2
+ * APR_EQUAL -- arg 1 = arg 2
+ */
+ap_status_t ap_timecmp(struct atime_t *a, struct atime_t *b)
+{
+ if (a == NULL) {
+ return APR_LESS;
+ }
+ else if (b == NULL) {
+ return APR_MORE;
+ }
+
+ if (a->currtime->tv_sec > b->currtime->tv_sec) {
+ return APR_MORE;
+ }
+ else if (a->currtime->tv_sec < b->currtime->tv_sec) {
+ return APR_LESS;
+ }
+ else {
+ if (a->currtime->tv_usec > b->currtime->tv_sec) {
+ return APR_MORE;
+ }
+ else {
+ return APR_LESS;
+ }
+ }
+ return APR_EQUAL;
+}
1.1 apache-2.0/src/lib/apr/time/unix/timestr.c
Index: timestr.c
===================================================================
/* ====================================================================
* Copyright (c) 1999 The Apache Group. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* 4. The names "Apache Server" and "Apache Group" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Group.
* For more information on the Apache Group and the Apache HTTP server
* project, please see <http://www.apache.org/>.
*
*/
#include "atime.h"
#include "apr_portable.h"
API_VAR_EXPORT const char ap_month_snames[12][4] =
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
API_VAR_EXPORT const char ap_day_snames[7][4] =
{
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
ap_status_t ap_gm_timestr_822(char **date_str, struct atime_t *t, ap_context_t *p)
{
struct tm *tms;
char *date_str_ptr;
int real_year;
(*date_str) = ap_palloc(p, 48 * sizeof(char));
date_str_ptr = (*date_str);
if (t->time_ex == 0) {
ap_explode_time(t, APR_UTCTIME);
}
/* Assumption: this is always 3 */
/* i = strlen(ap_day_snames[tms->tm_wday]); */
memcpy(date_str_ptr, ap_day_snames[t->explodedtime->tm_wday], 3);
date_str_ptr += 3;
*date_str_ptr++ = ',';
*date_str_ptr++ = ' ';
*date_str_ptr++ = t->explodedtime->tm_mday / 10 + '0';
*date_str_ptr++ = t->explodedtime->tm_mday % 10 + '0';
*date_str_ptr++ = ' ';
/* Assumption: this is also always 3 */
/* i = strlen(ap_month_snames[tms->tm_mon]); */
memcpy(date_str_ptr, ap_month_snames[t->explodedtime->tm_mon], 3);
date_str_ptr += 3;
*date_str_ptr++ = ' ';
real_year = 1900 + t->explodedtime->tm_year;
/* This routine isn't y10k ready. */
*date_str_ptr++ = real_year / 1000 + '0';
*date_str_ptr++ = real_year % 1000 / 100 + '0';
*date_str_ptr++ = real_year % 100 / 10 + '0';
*date_str_ptr++ = real_year % 10 + '0';
*date_str_ptr++ = ' ';
*date_str_ptr++ = t->explodedtime->tm_hour / 10 + '0';
*date_str_ptr++ = t->explodedtime->tm_hour % 10 + '0';
*date_str_ptr++ = ':';
*date_str_ptr++ = t->explodedtime->tm_min / 10 + '0';
*date_str_ptr++ = t->explodedtime->tm_min % 10 + '0';
*date_str_ptr++ = ':';
*date_str_ptr++ = t->explodedtime->tm_sec / 10 + '0';
*date_str_ptr++ = t->explodedtime->tm_sec % 10 + '0';
*date_str_ptr++ = ' ';
*date_str_ptr++ = 'G';
*date_str_ptr++ = 'M';
*date_str_ptr++ = 'T';
*date_str_ptr = '\0';
return APR_SUCCESS;
/* RFC date format; as strftime '%a, %d %b %Y %T GMT' */
/* The equivalent using sprintf. Use this for more legible but slower code
return ap_psprintf(p,
"%s, %.2d %s %d %.2d:%.2d:%.2d GMT",
ap_day_snames[t->explodedtime->tm_wday],
t->explodedtime->tm_mday,
ap_month_snames[t->explodedtime->tm_mon],
t->explodedtime->tm_year + 1900, t->explodedtime->tm_hour,
t->explodedtime->tm_min, t->explodedtime->tm_sec);
*/
}
ap_status_t ap_strftime(char *s, ap_size_t max, const char *format, struct atime_t *tm)
{
strftime(s, max, format, tm->explodedtime);
}