dreid 99/10/08 04:29:55
Modified:src/lib/apr/misc/beos misc.h start.c
Log:
Continuing to bring the beos APR into line.
Revision ChangesPath
1.3 +7 -0 apache-2.0/src/lib/apr/misc/beos/misc.h
Index: misc.h
===
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/beos/misc.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- misc.h1999/08/27 16:25:41 1.2
+++ misc.h1999/10/08 11:29:54 1.3
@@ -60,6 +60,13 @@
#include "apr_file_io.h"
#include "apr_errno.h"
+typedef struct datastruct {
+void *data;
+char *key;
+struct datastruct *next;
+struct datastruct *prev;
+} datastruct;
+
struct context_t {
struct ap_pool_t *pool;
void *prog_data;
1.6 +41 -11apache-2.0/src/lib/apr/misc/beos/start.c
Index: start.c
===
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/beos/start.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- start.c 1999/10/04 16:37:00 1.5
+++ start.c 1999/10/08 11:29:54 1.6
@@ -63,7 +63,7 @@
#include
#include
-ap_status_t ap_create_context(ap_context_t **newcont, ap_context_t *cont,
void *data)
+ap_status_t ap_create_context(struct context_t **newcont, struct context_t
*cont)
{
ap_context_t *new;
ap_pool_t *pool;
@@ -87,12 +87,7 @@
}
new->pool = pool;
-if (data == NULL && cont) {
-new->prog_data = cont->prog_data;
-}
-else {
-new->prog_data = data;
-}
+new->prog_data = NULL;
*newcont = new;
return APR_SUCCESS;
@@ -104,19 +99,54 @@
return APR_SUCCESS;
}
-ap_status_t ap_set_userdata(struct context_t *cont, void *data)
+ap_status_t ap_set_userdata(struct context_t *cont, void *data, char *key,
+ap_status_t (*cleanup) (void *))
{
+datastruct *dptr = NULL, *dptr2 = NULL;
if (cont) {
-cont->prog_data = data;
+dptr = cont->prog_data;
+while (dptr) {
+if (!strcmp(dptr->key, key))
+break;
+dptr2 = dptr;
+dptr = dptr->next;
+}
+if (dptr == NULL) {
+dptr = ap_palloc(cont, sizeof(datastruct));
+dptr->next = dptr->prev = NULL;
+dptr->key = strdup(key);
+if (dptr2) {
+dptr2->next = dptr;
+dptr->prev = dptr2;
+}
+else {
+cont->prog_data = dptr;
+}
+}
+dptr->data = data;
+ap_register_cleanup(cont, dptr->data, cleanup, cleanup);
return APR_SUCCESS;
}
return APR_ENOCONT;
}
-ap_status_t ap_get_userdata(void **data, struct context_t *cont)
+ap_status_t ap_get_userdata(void **data, struct context_t *cont, char *key)
{
+datastruct *dptr = NULL;
if (cont) {
-(*data) = cont->prog_data;
+dptr = cont->prog_data;
+while (dptr) {
+if (!strcmp(dptr->key, key)) {
+break;
+}
+dptr = dptr->next;
+}
+if (dptr) {
+(*data) = dptr->data;
+}
+else {
+(*data) = NULL;
+}
return APR_SUCCESS;
}
return APR_ENOCONT;