stoddard 99/09/22 06:29:29
Modified: src/lib/apr/misc/win32 start.c misc.h
Log:
More syncing with the unix tree. There really should be a 'common' tree
to put much of this stuff.
Revision Changes Path
1.5 +49 -19 apache-2.0/src/lib/apr/misc/win32/start.c
Index: start.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/win32/start.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- start.c 1999/09/22 13:13:40 1.4
+++ start.c 1999/09/22 13:29:27 1.5
@@ -78,29 +78,24 @@
ap_pool_t *pool;
if (cont) {
- ap_context_t = ap_make_sub_pool(cont->pool);
+ pool = ap_make_sub_pool(cont->pool);
}
else {
- ap_context_t = ap_init_alloc();;
+ pool = ap_init_alloc();;
}
- if (ap_context_t == NULL) {
+ if (pool == NULL) {
return APR_ENOPOOL;
}
- if (cont) {
- new = (ap_context_t *)ap_palloc(cont, sizeof(ap_context_t));
- }
- else {
- new = (ap_context_t *)malloc(sizeof(ap_context_t));
- }
- new->pool = pool;
- if (data == NULL && cont) {
- new->prog_data = cont->prog_data;
+ if (cont) {
+ new = (ap_context_t *)ap_palloc(cont, sizeof(ap_context_t));
}
else {
- new->prog_data = data;
+ new = (ap_context_t *)malloc(sizeof(ap_context_t));
}
+ new->pool = pool;
+ new->prog_data = NULL;
iVersionRequested = MAKEWORD(WSAHighByte, WSALowByte);
err = WSAStartup((WORD) iVersionRequested, &wsaData);
@@ -109,8 +104,8 @@
}
if (LOBYTE(wsaData.wVersion) != WSAHighByte ||
HIBYTE(wsaData.wVersion) != WSALowByte) {
- WSACleanup();
- return APR_EEXIST;
+ WSACleanup();
+ return APR_EEXIST;
}
ap_register_cleanup(new, NULL, clean_cont, NULL);
@@ -151,19 +146,54 @@
return APR_EEXIST;
}
-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(struct context_t *cont, void **data)
+ap_status_t ap_get_userdata(struct context_t *cont, char *key, void **data)
{
+ 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;
1.3 +7 -0 apache-2.0/src/lib/apr/misc/win32/misc.h
Index: misc.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/misc/win32/misc.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- misc.h 1999/08/27 16:26:01 1.2
+++ misc.h 1999/09/22 13:29:28 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;