~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/aprutil/src/include/apr_optional_hooks.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
 
 * contributor license agreements.  See the NOTICE file distributed with
3
 
 * this work for additional information regarding copyright ownership.
4
 
 * The ASF licenses this file to You under the Apache License, Version 2.0
5
 
 * (the "License"); you may not use this file except in compliance with
6
 
 * the License.  You may obtain a copy of the License at
7
 
 *
8
 
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 
 *
10
 
 * Unless required by applicable law or agreed to in writing, software
11
 
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 
 * See the License for the specific language governing permissions and
14
 
 * limitations under the License.
15
 
 */
16
 
/**
17
 
 * @file apr_optional_hooks.h
18
 
 * @brief Apache optional hook functions
19
 
 */
20
 
 
21
 
 
22
 
#ifndef APR_OPTIONAL_HOOK_H
23
 
#define APR_OPTIONAL_HOOK_H
24
 
 
25
 
#include "apr_tables.h"
26
 
 
27
 
#ifdef __cplusplus
28
 
extern "C" {
29
 
#endif
30
 
/** 
31
 
 * @defgroup APR_Util_OPT_HOOK Optional Hook Functions
32
 
 * @ingroup APR_Util_Hook
33
 
 * @{
34
 
 */
35
 
/**
36
 
 * Function to implemnt the APR_OPTIONAL_HOOK Macro
37
 
 * @internal
38
 
 * @see APR_OPTIONAL_HOOK
39
 
 *
40
 
 * @param name The name of the hook
41
 
 * @param pfn A pointer to a function that will be called
42
 
 * @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
43
 
 * @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
44
 
 * @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
45
 
 */
46
 
 
47
 
 
48
 
APU_DECLARE(void) apr_optional_hook_add(const char *szName,void (*pfn)(void),
49
 
                                        const char * const *aszPre,
50
 
                                        const char * const *aszSucc,
51
 
                                        int nOrder);
52
 
 
53
 
/**
54
 
 * Hook to an optional hook.
55
 
 *
56
 
 * @param ns The namespace prefix of the hook functions
57
 
 * @param name The name of the hook
58
 
 * @param pfn A pointer to a function that will be called
59
 
 * @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
60
 
 * @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
61
 
 * @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
62
 
 */
63
 
 
64
 
#define APR_OPTIONAL_HOOK(ns,name,pfn,aszPre,aszSucc,nOrder) do { \
65
 
  ns##_HOOK_##name##_t *apu__hook = pfn; \
66
 
  apr_optional_hook_add(#name,(void (*)(void))apu__hook,aszPre, aszSucc, nOrder); \
67
 
} while (0)
68
 
 
69
 
/**
70
 
 * @internal
71
 
 * @param szName - the name of the function
72
 
 * @return the hook structure for a given hook
73
 
 */
74
 
APU_DECLARE(apr_array_header_t *) apr_optional_hook_get(const char *szName);
75
 
 
76
 
/**
77
 
 * Implement an optional hook that runs until one of the functions
78
 
 * returns something other than OK or DECLINE.
79
 
 *
80
 
 * @param ns The namespace prefix of the hook functions
81
 
 * @param link The linkage declaration prefix of the hook
82
 
 * @param ret The type of the return value of the hook
83
 
 * @param ret The type of the return value of the hook
84
 
 * @param name The name of the hook
85
 
 * @param args_decl The declaration of the arguments for the hook
86
 
 * @param args_use The names for the arguments for the hook
87
 
 * @param ok Success value
88
 
 * @param decline Decline value
89
 
 */
90
 
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
91
 
link##_DECLARE(ret) ns##_run_##name args_decl \
92
 
    { \
93
 
    ns##_LINK_##name##_t *pHook; \
94
 
    int n; \
95
 
    ret rv; \
96
 
    apr_array_header_t *pHookArray=apr_optional_hook_get(#name); \
97
 
\
98
 
    if(!pHookArray) \
99
 
        return ok; \
100
 
\
101
 
    pHook=(ns##_LINK_##name##_t *)pHookArray->elts; \
102
 
    for(n=0 ; n < pHookArray->nelts ; ++n) \
103
 
        { \
104
 
        rv=(pHook[n].pFunc)args_use; \
105
 
\
106
 
        if(rv != ok && rv != decline) \
107
 
            return rv; \
108
 
        } \
109
 
    return ok; \
110
 
    }
111
 
 
112
 
/** @} */
113
 
#ifdef __cplusplus
114
 
}
115
 
#endif
116
 
 
117
 
#endif /* APR_OPTIONAL_HOOK_H */