This commit was manufactured by cvs2svn to create tag
'apache-1_3-merge-2-post'.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr-util/tags/apache-1_3-merge-2-post@57776 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/hooks/ap_hooks.c b/hooks/ap_hooks.c
deleted file mode 100644
index 54adc6e..0000000
--- a/hooks/ap_hooks.c
+++ /dev/null
@@ -1,220 +0,0 @@
-#include "httpd.h"
-#include "ap_hooks.h"
-#include <assert.h>
-
-#if 0
-#define ap_palloc(pool,size) malloc(size)
-#endif
-
-/* NB: This must echo the LINK_##name structure */
-typedef struct
-{
- void (*dummy)(void *);
- const char *szName;
- const char * const *aszPredecessors;
- const char * const *aszSuccessors;
- int nOrder;
-} TSortData;
-
-typedef struct tsort_
-{
- void *pData;
- int nPredecessors;
- struct tsort_ **ppPredecessors;
- struct tsort_ *pNext;
-} TSort;
-
-static int crude_order(const void *a_,const void *b_)
-{
- const TSortData *a=a_;
- const TSortData *b=b_;
-
- return a->nOrder-b->nOrder;
-}
-
-static TSort *prepare(pool *p,TSortData *pItems,int nItems)
-{
- TSort *pData=ap_palloc(p,nItems*sizeof *pData);
- int n;
-
- qsort(pItems,nItems,sizeof *pItems,crude_order);
- for(n=0 ; n < nItems ; ++n) {
- pData[n].nPredecessors=0;
- pData[n].ppPredecessors=ap_palloc(p,nItems*sizeof *pData[n].ppPredecessors);
- pData[n].pNext=NULL;
- pData[n].pData=&pItems[n];
- }
-
- for(n=0 ; n < nItems ; ++n) {
- int i,k;
-
- for(i=0 ; pItems[n].aszPredecessors && pItems[n].aszPredecessors[i] ; ++i)
- for(k=0 ; k < nItems ; ++k)
- if(!strcmp(pItems[k].szName,pItems[n].aszPredecessors[i])) {
- int l;
-
- for(l=0 ; l < pData[n].nPredecessors ; ++l)
- if(pData[n].ppPredecessors[l] == &pData[k])
- goto got_it;
- pData[n].ppPredecessors[pData[n].nPredecessors]=&pData[k];
- ++pData[n].nPredecessors;
- got_it:
- break;
- }
- for(i=0 ; pItems[n].aszSuccessors && pItems[n].aszSuccessors[i] ; ++i)
- for(k=0 ; k < nItems ; ++k)
- if(!strcmp(pItems[k].szName,pItems[n].aszSuccessors[i])) {
- int l;
-
- for(l=0 ; l < pData[k].nPredecessors ; ++l)
- if(pData[k].ppPredecessors[l] == &pData[n])
- goto got_it2;
- pData[k].ppPredecessors[pData[k].nPredecessors]=&pData[n];
- ++pData[k].nPredecessors;
- got_it2:
- break;
- }
- }
-
- return pData;
-}
-
-static TSort *tsort(TSort *pData,int nItems)
-{
- int nTotal;
- TSort *pHead=NULL;
- TSort *pTail=NULL;
-
- for(nTotal=0 ; nTotal < nItems ; ++nTotal) {
- int n,i,k;
-
- for(n=0 ; ; ++n) {
- if(n == nItems)
- assert(0); /* // we have a loop... */
- if(!pData[n].pNext && !pData[n].nPredecessors)
- break;
- }
- if(pTail)
- pTail->pNext=&pData[n];
- else
- pHead=&pData[n];
- pTail=&pData[n];
- pTail->pNext=pTail; /* // fudge it so it looks linked */
- for(i=0 ; i < nItems ; ++i)
- for(k=0 ; pData[i].ppPredecessors[k] ; ++k)
- if(pData[i].ppPredecessors[k] == &pData[n]) {
- --pData[i].nPredecessors;
- break;
- }
- }
- pTail->pNext=NULL; /* // unfudge the tail */
- return pHead;
-}
-
-static array_header *sort_hook(array_header *pHooks,const char *szName)
-{
- pool *p=ap_make_sub_pool(g_pHookPool);
- TSort *pSort;
- array_header *pNew;
- int n;
-
- pSort=prepare(p,(TSortData *)pHooks->elts,pHooks->nelts);
- tsort(pSort,pHooks->nelts);
- pNew=ap_make_array(g_pHookPool,pHooks->nelts,sizeof(TSortData));
- if(g_bDebugHooks)
- printf("Sorting %s:",szName);
- for(n=0 ; pSort ; pSort=pSort->pNext,++n) {
- TSortData *pHook;
- assert(n < pHooks->nelts);
- pHook=ap_push_array(pNew);
- memcpy(pHook,pSort->pData,sizeof *pHook);
- if(g_bDebugHooks)
- printf(" %s",pHook->szName);
- }
- if(g_bDebugHooks)
- fputc('\n',stdout);
- return pNew;
-}
-
-static array_header *s_aHooksToSort;
-typedef struct
-{
- const char *szHookName;
- array_header **paHooks;
-} HookSortEntry;
-
-void ap_hook_sort_register(const char *szHookName,array_header **paHooks)
-{
- HookSortEntry *pEntry;
-
- if(!s_aHooksToSort)
- s_aHooksToSort=ap_make_array(g_pHookPool,1,sizeof(HookSortEntry));
- pEntry=ap_push_array(s_aHooksToSort);
- pEntry->szHookName=szHookName;
- pEntry->paHooks=paHooks;
-}
-
-void ap_sort_hooks()
-{
- int n;
-
- for(n=0 ; n < s_aHooksToSort->nelts ; ++n) {
- HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n];
- *pEntry->paHooks=sort_hook(*pEntry->paHooks,pEntry->szHookName);
- }
-}
-
-void ap_show_hook(const char *szName,const char * const *aszPre,
- const char * const *aszSucc)
-{
- int nFirst;
-
- printf(" Hooked %s",szName);
- if(aszPre) {
- fputs(" pre(",stdout);
- nFirst=1;
- while(*aszPre) {
- if(!nFirst)
- fputc(',',stdout);
- nFirst=0;
- fputs(*aszPre,stdout);
- ++aszPre;
- }
- fputc(')',stdout);
- }
- if(aszSucc) {
- fputs(" succ(",stdout);
- nFirst=1;
- while(*aszSucc) {
- if(!nFirst)
- fputc(',',stdout);
- nFirst=0;
- fputs(*aszSucc,stdout);
- ++aszSucc;
- }
- fputc(')',stdout);
- }
- fputc('\n',stdout);
-}
-
-#if 0
-void main()
-{
- const char *aszAPre[]={"b","c",NULL};
- const char *aszBPost[]={"a",NULL};
- const char *aszCPost[]={"b",NULL};
- TSortData t1[]=
- {
- { "a",aszAPre,NULL },
- { "b",NULL,aszBPost },
- { "c",NULL,aszCPost }
- };
- TSort *pResult;
-
- pResult=prepare(t1,3);
- pResult=tsort(pResult,3);
-
- for( ; pResult ; pResult=pResult->pNext)
- printf("%s\n",pResult->pData->szName);
-}
-#endif
diff --git a/hooks/apr_hooks.c b/hooks/apr_hooks.c
deleted file mode 100644
index 54adc6e..0000000
--- a/hooks/apr_hooks.c
+++ /dev/null
@@ -1,220 +0,0 @@
-#include "httpd.h"
-#include "ap_hooks.h"
-#include <assert.h>
-
-#if 0
-#define ap_palloc(pool,size) malloc(size)
-#endif
-
-/* NB: This must echo the LINK_##name structure */
-typedef struct
-{
- void (*dummy)(void *);
- const char *szName;
- const char * const *aszPredecessors;
- const char * const *aszSuccessors;
- int nOrder;
-} TSortData;
-
-typedef struct tsort_
-{
- void *pData;
- int nPredecessors;
- struct tsort_ **ppPredecessors;
- struct tsort_ *pNext;
-} TSort;
-
-static int crude_order(const void *a_,const void *b_)
-{
- const TSortData *a=a_;
- const TSortData *b=b_;
-
- return a->nOrder-b->nOrder;
-}
-
-static TSort *prepare(pool *p,TSortData *pItems,int nItems)
-{
- TSort *pData=ap_palloc(p,nItems*sizeof *pData);
- int n;
-
- qsort(pItems,nItems,sizeof *pItems,crude_order);
- for(n=0 ; n < nItems ; ++n) {
- pData[n].nPredecessors=0;
- pData[n].ppPredecessors=ap_palloc(p,nItems*sizeof *pData[n].ppPredecessors);
- pData[n].pNext=NULL;
- pData[n].pData=&pItems[n];
- }
-
- for(n=0 ; n < nItems ; ++n) {
- int i,k;
-
- for(i=0 ; pItems[n].aszPredecessors && pItems[n].aszPredecessors[i] ; ++i)
- for(k=0 ; k < nItems ; ++k)
- if(!strcmp(pItems[k].szName,pItems[n].aszPredecessors[i])) {
- int l;
-
- for(l=0 ; l < pData[n].nPredecessors ; ++l)
- if(pData[n].ppPredecessors[l] == &pData[k])
- goto got_it;
- pData[n].ppPredecessors[pData[n].nPredecessors]=&pData[k];
- ++pData[n].nPredecessors;
- got_it:
- break;
- }
- for(i=0 ; pItems[n].aszSuccessors && pItems[n].aszSuccessors[i] ; ++i)
- for(k=0 ; k < nItems ; ++k)
- if(!strcmp(pItems[k].szName,pItems[n].aszSuccessors[i])) {
- int l;
-
- for(l=0 ; l < pData[k].nPredecessors ; ++l)
- if(pData[k].ppPredecessors[l] == &pData[n])
- goto got_it2;
- pData[k].ppPredecessors[pData[k].nPredecessors]=&pData[n];
- ++pData[k].nPredecessors;
- got_it2:
- break;
- }
- }
-
- return pData;
-}
-
-static TSort *tsort(TSort *pData,int nItems)
-{
- int nTotal;
- TSort *pHead=NULL;
- TSort *pTail=NULL;
-
- for(nTotal=0 ; nTotal < nItems ; ++nTotal) {
- int n,i,k;
-
- for(n=0 ; ; ++n) {
- if(n == nItems)
- assert(0); /* // we have a loop... */
- if(!pData[n].pNext && !pData[n].nPredecessors)
- break;
- }
- if(pTail)
- pTail->pNext=&pData[n];
- else
- pHead=&pData[n];
- pTail=&pData[n];
- pTail->pNext=pTail; /* // fudge it so it looks linked */
- for(i=0 ; i < nItems ; ++i)
- for(k=0 ; pData[i].ppPredecessors[k] ; ++k)
- if(pData[i].ppPredecessors[k] == &pData[n]) {
- --pData[i].nPredecessors;
- break;
- }
- }
- pTail->pNext=NULL; /* // unfudge the tail */
- return pHead;
-}
-
-static array_header *sort_hook(array_header *pHooks,const char *szName)
-{
- pool *p=ap_make_sub_pool(g_pHookPool);
- TSort *pSort;
- array_header *pNew;
- int n;
-
- pSort=prepare(p,(TSortData *)pHooks->elts,pHooks->nelts);
- tsort(pSort,pHooks->nelts);
- pNew=ap_make_array(g_pHookPool,pHooks->nelts,sizeof(TSortData));
- if(g_bDebugHooks)
- printf("Sorting %s:",szName);
- for(n=0 ; pSort ; pSort=pSort->pNext,++n) {
- TSortData *pHook;
- assert(n < pHooks->nelts);
- pHook=ap_push_array(pNew);
- memcpy(pHook,pSort->pData,sizeof *pHook);
- if(g_bDebugHooks)
- printf(" %s",pHook->szName);
- }
- if(g_bDebugHooks)
- fputc('\n',stdout);
- return pNew;
-}
-
-static array_header *s_aHooksToSort;
-typedef struct
-{
- const char *szHookName;
- array_header **paHooks;
-} HookSortEntry;
-
-void ap_hook_sort_register(const char *szHookName,array_header **paHooks)
-{
- HookSortEntry *pEntry;
-
- if(!s_aHooksToSort)
- s_aHooksToSort=ap_make_array(g_pHookPool,1,sizeof(HookSortEntry));
- pEntry=ap_push_array(s_aHooksToSort);
- pEntry->szHookName=szHookName;
- pEntry->paHooks=paHooks;
-}
-
-void ap_sort_hooks()
-{
- int n;
-
- for(n=0 ; n < s_aHooksToSort->nelts ; ++n) {
- HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n];
- *pEntry->paHooks=sort_hook(*pEntry->paHooks,pEntry->szHookName);
- }
-}
-
-void ap_show_hook(const char *szName,const char * const *aszPre,
- const char * const *aszSucc)
-{
- int nFirst;
-
- printf(" Hooked %s",szName);
- if(aszPre) {
- fputs(" pre(",stdout);
- nFirst=1;
- while(*aszPre) {
- if(!nFirst)
- fputc(',',stdout);
- nFirst=0;
- fputs(*aszPre,stdout);
- ++aszPre;
- }
- fputc(')',stdout);
- }
- if(aszSucc) {
- fputs(" succ(",stdout);
- nFirst=1;
- while(*aszSucc) {
- if(!nFirst)
- fputc(',',stdout);
- nFirst=0;
- fputs(*aszSucc,stdout);
- ++aszSucc;
- }
- fputc(')',stdout);
- }
- fputc('\n',stdout);
-}
-
-#if 0
-void main()
-{
- const char *aszAPre[]={"b","c",NULL};
- const char *aszBPost[]={"a",NULL};
- const char *aszCPost[]={"b",NULL};
- TSortData t1[]=
- {
- { "a",aszAPre,NULL },
- { "b",NULL,aszBPost },
- { "c",NULL,aszCPost }
- };
- TSort *pResult;
-
- pResult=prepare(t1,3);
- pResult=tsort(pResult,3);
-
- for( ; pResult ; pResult=pResult->pNext)
- printf("%s\n",pResult->pData->szName);
-}
-#endif
diff --git a/include/apr_hooks.h b/include/apr_hooks.h
deleted file mode 100644
index 9c4821c..0000000
--- a/include/apr_hooks.h
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef APACHE_AP_HOOKS_H
-#define APACHE_AP_HOOKS_H
-
-#define DECLARE_HOOK(ret,name,args) \
-typedef ret HOOK_##name args; \
-void ap_hook_##name(HOOK_##name *pf,const char * const *aszPre, \
- const char * const *aszSucc,int nOrder); \
-ret ap_run_##name args; \
-typedef struct _LINK_##name \
- { \
- HOOK_##name *pFunc; \
- const char *szName; \
- const char * const *aszPredecessors; \
- const char * const *aszSuccessors; \
- int nOrder; \
- } LINK_##name;
-
-#define HOOK_STRUCT(members) \
-static struct { members } _hooks;
-
-#define HOOK_LINK(name) \
- array_header *link_##name;
-
-#define IMPLEMENT_HOOK_BASE(name) \
-void ap_hook_##name(HOOK_##name *pf,const char * const *aszPre, \
- const char * const *aszSucc,int nOrder) \
- { \
- LINK_##name *pHook; \
- if(!_hooks.link_##name) \
- { \
- _hooks.link_##name=ap_make_array(g_pHookPool,1,sizeof(LINK_##name)); \
- ap_hook_sort_register(#name,&_hooks.link_##name); \
- } \
- pHook=ap_push_array(_hooks.link_##name); \
- pHook->pFunc=pf; \
- pHook->aszPredecessors=aszPre; \
- pHook->aszSuccessors=aszSucc; \
- pHook->nOrder=nOrder; \
- pHook->szName=g_szCurrentHookName; \
- if(g_bDebugHooks) \
- ap_show_hook(#name,aszPre,aszSucc); \
- }
-
-/* RUN_ALL runs to the first one to return other than ok or decline
- RUN_FIRST runs to the first one to return other than decline
- VOID runs all
-*/
-
-#define IMPLEMENT_HOOK_VOID(name,args_decl,args_use) \
-IMPLEMENT_HOOK_BASE(name) \
-void ap_run_##name args_decl \
- { \
- LINK_##name *pHook; \
- int n; \
-\
- if(!_hooks.link_##name) \
- return; \
-\
- pHook=(LINK_##name *)_hooks.link_##name->elts; \
- for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
- pHook[n].pFunc args_use; \
- }
-
-/* FIXME: note that this returns ok when nothing is run. I suspect it should
- really return decline, but that breaks Apache currently - Ben
-*/
-#define IMPLEMENT_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok,decline) \
-IMPLEMENT_HOOK_BASE(name) \
-ret ap_run_##name args_decl \
- { \
- LINK_##name *pHook; \
- int n; \
- ret rv; \
-\
- if(!_hooks.link_##name) \
- return ok; \
-\
- pHook=(LINK_##name *)_hooks.link_##name->elts; \
- for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
- { \
- rv=pHook[n].pFunc args_use; \
-\
- if(rv != ok && rv != decline) \
- return rv; \
- } \
- return ok; \
- }
-
-#define IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \
-IMPLEMENT_HOOK_BASE(name) \
-ret ap_run_##name args_decl \
- { \
- LINK_##name *pHook; \
- int n; \
- ret rv; \
-\
- if(!_hooks.link_##name) \
- return decline; \
-\
- pHook=(LINK_##name *)_hooks.link_##name->elts; \
- for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
- { \
- rv=pHook[n].pFunc args_use; \
-\
- if(rv != decline) \
- return rv; \
- } \
- return decline; \
- }
-
- /* Hook orderings */
-#define HOOK_REALLY_FIRST (-10)
-#define HOOK_FIRST 0
-#define HOOK_MIDDLE 10
-#define HOOK_LAST 20
-#define HOOK_REALLY_LAST 30
-
-extern pool *g_pHookPool;
-extern int g_bDebugHooks;
-extern const char *g_szCurrentHookName;
-
-void ap_hook_sort_register(const char *szHookName,array_header **aHooks);
-void ap_sort_hooks(void);
-void ap_show_hook(const char *szName,const char * const *aszPre,
- const char * const *aszSucc);
-
-#endif /* ndef(AP_HOOKS_H) */