httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Stoddard" <b...@wstoddard.com>
Subject Re: cvs commit: httpd-2.0 CHANGES
Date Wed, 16 May 2001 20:45:13 GMT
This breaks the Windows compile on this line...

    {"Post-Read Request", ap_hook_get_post_read_request},

because the ap_hook_* functions are all declared as standard call but the
declaration of hook_get_t presumes the calling convention is non standard.
At least I believe this is why the compile fails :-)

I see two solutions... either declare ALL our hooks as AP_DECLARE_NONSTD
(yech) or introduce static wrapper functions around the ap_hook* calls in
mod_info.  For example...

    {"Post-Read Request", static_wrapper_ap_hook_get_post_read_request},...

Where static_wrapper_ap_hook_get_post_read_request is defined thusly...

static apr_array_header_t * static_wrapper_ap_hook_get_post_read_request() {
       return ap_hook_get_post_read_request();
}

I can think of no way to stuff the AP_DECLARE into the hook_get_t typedef...

Any other thoughts?

Bill

----- Original Message -----
From: <dougm@apache.org>
To: <httpd-2.0-cvs@apache.org>
Sent: Tuesday, May 15, 2001 12:25 AM
Subject: cvs commit: httpd-2.0 CHANGES


> dougm       01/05/14 21:25:17
>
>   Modified:    modules/generators mod_info.c
>                .        CHANGES
>   Log:
>   add "Request Phase Participation" info to mod_info
>   Submitted by: dougm
>   Reviewed by: gstein
>
>   Revision  Changes    Path
>   1.36      +90 -1     httpd-2.0/modules/generators/mod_info.c
>
>   Index: mod_info.c
>   ===================================================================
>   RCS file: /home/cvs/httpd-2.0/modules/generators/mod_info.c,v
>   retrieving revision 1.35
>   retrieving revision 1.36
>   diff -u -r1.35 -r1.36
>   --- mod_info.c 2001/04/13 19:00:36 1.35
>   +++ mod_info.c 2001/05/15 04:25:15 1.36
>   @@ -92,6 +92,7 @@
>    #include "http_log.h"
>    #include "http_main.h"
>    #include "http_protocol.h"
>   +#include "http_request.h"
>    #include "util_script.h"
>    #include "apr_strings.h"
>    #include "apr_lib.h"
>   @@ -247,6 +248,86 @@
>
>        }
>    }
>   +
>   +typedef struct { /*XXX: should get something from apr_hooks.h instead
*/
>   +    void (*pFunc)(void); /* just to get the right size */
>   +    const char *szName;
>   +    const char * const *aszPredecessors;
>   +    const char * const *aszSuccessors;
>   +    int nOrder;
>   +} hook_struct_t;
>   +
>   +typedef apr_array_header_t * (*hook_get_t)(void);
>   +
>   +typedef struct {
>   +    const char *name;
>   +    hook_get_t get;
>   +} hook_lookup_t;
>   +
>   +static hook_lookup_t request_hooks[] = {
>   +    {"Post-Read Request", ap_hook_get_post_read_request},
>   +    {"Header Parse", ap_hook_get_header_parser},
>   +    {"Translate Path", ap_hook_get_translate_name},
>   +    {"Check Access", ap_hook_get_access_checker},
>   +    {"Verify User ID", ap_hook_get_check_user_id},
>   +    {"Verify User Access", ap_hook_get_auth_checker},
>   +    {"Check Type", ap_hook_get_type_checker},
>   +    {"Fixups", ap_hook_get_fixups},
>   +    {"Logging", ap_hook_get_log_transaction},
>   +    {NULL},
>   +};
>   +
>   +static int module_find_hook(module *modp,
>   +                            hook_get_t hook_get)
>   +{
>   +    int i;
>   +    apr_array_header_t *hooks = hook_get();
>   +    hook_struct_t *elts;
>   +
>   +    if (!hooks) {
>   +        return 0;
>   +    }
>   +
>   +    elts = (hook_struct_t *)hooks->elts;
>   +
>   +    for (i=0; i< hooks->nelts; i++) {
>   +        if (strcmp(elts[i].szName, modp->name) == 0) {
>   +            return 1;
>   +        }
>   +    }
>   +
>   +    return 0;
>   +}
>   +
>   +static void module_participate(request_rec *r,
>   +                               module *modp,
>   +                               hook_lookup_t *lookup,
>   +                               int *comma)
>   +{
>   +    if (module_find_hook(modp, lookup->get)) {
>   +        if (*comma) {
>   +            ap_rputs(", ", r);
>   +        }
>   +        ap_rvputs(r, "<tt>", lookup->name, "</tt>", NULL);
>   +        *comma = 1;
>   +    }
>   +}
>   +
>   +static void module_request_hook_participate(request_rec *r, module
*modp)
>   +{
>   +    int i, comma=0;
>   +
>   +    ap_rputs("<dt><strong>Request Phase Participation:</strong>
\n",
r);
>   +
>   +    for (i=0; request_hooks[i].name; i++) {
>   +        module_participate(r, modp, &request_hooks[i], &comma);
>   +    }
>   +
>   +    if (!comma) {
>   +        ap_rputs("<tt> <EM>none</EM></tt>", r);
>   +    }
>   +}
>   +
>    static const char *find_more_info(server_rec *s, const char
*module_name)
>    {
>        int i;
>   @@ -364,7 +445,12 @@
>                        ap_rputs("<tt> <EM>none</EM></tt>", r);
>                    }
>    #else
>   -                ap_rputs("<tt> <EM>(code broken)</EM></tt>",
r);
>   +                if (module_find_hook(modp, ap_hook_get_handler)) {
>   +                    ap_rputs("<tt> <EM>yes</EM></tt>", r);
>   +                }
>   +                else {
>   +                    ap_rputs("<tt> <EM>none</EM></tt>", r);
>   +                }
>    #endif
>                    ap_rputs("<dt><strong>Configuration Phase
Participation:</strong> \n",
>                          r);
>   @@ -399,6 +485,9 @@
>                    if (!comma)
>                        ap_rputs("<tt> <EM>none</EM></tt>", r);
>                    comma = 0;
>   +
>   +                module_request_hook_participate(r, modp);
>   +
>                    ap_rputs("<dt><strong>Module Directives:</strong>
",
r);
>                    cmd = modp->cmds;
>                    if (cmd) {
>
>
>
>   1.199     +2 -0      httpd-2.0/CHANGES
>
>   Index: CHANGES
>   ===================================================================
>   RCS file: /home/cvs/httpd-2.0/CHANGES,v
>   retrieving revision 1.198
>   retrieving revision 1.199
>   diff -u -r1.198 -r1.199
>   --- CHANGES 2001/05/15 02:38:08 1.198
>   +++ CHANGES 2001/05/15 04:25:16 1.199
>   @@ -1,4 +1,6 @@
>    Changes with Apache 2.0.18-dev
>   +  *) add "Request Phase Participation" info to mod_info
>   +     [Doug MacEachern]
>
>      *) Make first phase changes to the scoreboard data structures in
>         preparation for the rewriting of the scoreboard per my posted
>
>
>


Mime
View raw message