This commit was manufactured by cvs2svn to create tag
'apache-1_3-merge-2-pre'.

git-svn-id: https://svn.apache.org/repos/asf/apr/apr-util/tags/apache-1_3-merge-2-pre@57777 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) */