[svn:mod_parrot] r435 - in mod_parrot/branches/hll-modules: include lib/ModParrot/HLL src

[email protected] Fri, 19 Sep 2008 12:48:05 -0700 (PDT)
Newsgroups perl.cvs.mod_parrot
Message-ID <[email protected]>
Author: jhorwitz
Date: Fri Sep 19 12:48:04 2008
New Revision: 435

Modified:
   mod_parrot/branches/hll-modules/include/modparrot_config.h
   mod_parrot/branches/hll-modules/lib/ModParrot/HLL/pir.pir
   mod_parrot/branches/hll-modules/src/modparrot_config.c
   mod_parrot/branches/hll-modules/src/module.c

Log:
refactor argument processing callbacks
remove references to child_exit, which is apache 1.3 specific


Modified: mod_parrot/branches/hll-modules/include/modparrot_config.h
==============================================================================
--- mod_parrot/branches/hll-modules/include/modparrot_config.h	(original)
+++ mod_parrot/branches/hll-modules/include/modparrot_config.h	Fri Sep 19 12:48:04 2008
@@ -103,7 +103,6 @@
     apr_hash_t *module_hash;
     modparrot_handler_info *open_logs_handler;
     modparrot_handler_info *child_init_handler;
-    modparrot_handler_info *child_exit_handler;
     modparrot_handler_info *post_config_handler;
     modparrot_handler_info *pre_connection_handler;
     modparrot_handler_info *process_connection_handler;
@@ -177,7 +176,6 @@
 const char *modparrot_cmd_open_logs_handler(cmd_parms *, void *, const char *);
 const char *modparrot_cmd_post_config_handler(cmd_parms *, void *, const char *);
 const char *modparrot_cmd_child_init_handler(cmd_parms *, void *, const char *);
-const char *modparrot_cmd_child_exit_handler(cmd_parms *, void *, const char *);
 const char *modparrot_cmd_pre_connection_handler(cmd_parms *, void *, const char *);
 const char *modparrot_cmd_process_connection_handler(cmd_parms *, void *, const char *);
 const char *modparrot_cmd_input_filter_handler(cmd_parms *, void *, const char *);
@@ -206,26 +204,6 @@
 const char *modparrot_cmd_add_handler(cmd_parms *, void *, const char *, const char *);
 const char *modparrot_cmd_options(cmd_parms *, void *, const char *);
 
-/* for HLL apache modules */
-const char *modparrot_set_config_ptrs(cmd_parms *, void *);
-const char *modparrot_module_cmd_take1(cmd_parms *, void *, const char *);
-const char *modparrot_module_cmd_take2(cmd_parms *, void *, const char *,
-    const char*);
-const char *modparrot_module_cmd_take12(cmd_parms *, void *, const char *,
-    const char*);
-const char *modparrot_module_cmd_take3(cmd_parms *, void *, const char *,
-    const char *, const char*);
-const char *modparrot_module_cmd_take23(cmd_parms *, void *, const char *,
-    const char *, const char*);
-const char *modparrot_module_cmd_take123(cmd_parms *, void *, const char *,
-    const char *, const char*);
-const char *modparrot_module_cmd_raw_args(cmd_parms *, void *, const char *);
-const char *modparrot_module_cmd_flag(cmd_parms *, void *, int);
-const char *modparrot_module_cmd_iterate(cmd_parms *, void *, const char *);
-const char *modparrot_module_cmd_iterate2(cmd_parms *, void *, const char *,
-    const char *);
-const char *modparrot_module_cmd_no_args(cmd_parms *, void *);
-
 /* handlers for HLL apache modules */
 int modparrot_meta_response_handler(request_rec *);
 int modparrot_meta_authen_handler(request_rec *);

Modified: mod_parrot/branches/hll-modules/lib/ModParrot/HLL/pir.pir
==============================================================================
--- mod_parrot/branches/hll-modules/lib/ModParrot/HLL/pir.pir	(original)
+++ mod_parrot/branches/hll-modules/lib/ModParrot/HLL/pir.pir	Fri Sep 19 12:48:04 2008
@@ -32,8 +32,6 @@
     cmds.push($P0)
     $P0 = new_cmd('ParrotChildInitHandler', 'TAKE1', 'cmd_parrotchildinithandler', 'RSRC_CONF', 'usage: ParrotChildInitHandler handler-name')
     cmds.push($P0)
-    $P0 = new_cmd('ParrotChildExitHandler', 'TAKE1', 'cmd_parrotchildexithandler', 'RSRC_CONF', 'usage: ParrotChildExitHandler handler-name')
-    cmds.push($P0)
     $P0 = new_cmd('ParrotPreConnectionHandler', 'TAKE1', 'cmd_parrotpreconnectionhandler', 'RSRC_CONF', 'usage: ParrotPreConnectionHandler handler-name')
     cmds.push($P0)
     $P0 = new_cmd('ParrotProcessConnectionHandler', 'TAKE1', 'cmd_parrotprocessconnectionhandler', 'RSRC_CONF', 'usage: ParrotProcessConnectionHandler handler-name')

Modified: mod_parrot/branches/hll-modules/src/modparrot_config.c
==============================================================================
--- mod_parrot/branches/hll-modules/src/modparrot_config.c	(original)
+++ mod_parrot/branches/hll-modules/src/modparrot_config.c	Fri Sep 19 12:48:04 2008
@@ -397,245 +397,3 @@
     }
     return errmsg;
 }
-
-static Parrot_PMC make_cmd_args_array(Parrot_Interp interp, apr_pool_t *p,
-    int nargs, ...)
-{
-    va_list ap;
-    Parrot_PMC args;
-    int i=0, typenum;
-
-    typenum = Parrot_PMC_typenum(interp, "SArray");
-    args = (Parrot_PMC)Parrot_PMC_new(interp, typenum);
-    Parrot_register_pmc(interp, args);
-    Parrot_PMC_set_intval(interp, args, nargs);
-
-    va_start(ap, nargs);
-    for (i = 0; i < nargs; i++) {
-        char *arg = va_arg(ap, char *);
-        Parrot_PMC_set_cstring_intkey(interp, args, i, arg);
-    }
-    va_end(ap);
-
-    return(args);
-}
-
-/* use only for setting mod_parrot's config, not HLL module configs */
-static void set_mp_config_vectors(modparrot_context *ctxp, module *modp,
-                                  cmd_parms *cmd)
-{
-    modparrot_dir_config *cfg = (modparrot_dir_config *)ap_set_config_vectors(
-            cmd->server, cmd->context, cmd->path, modp, cmd->pool);
-
-    ctxp->dircfg = cfg;
-    ctxp->srvcfg = (modparrot_srv_config *)ap_get_module_config(
-        cmd->server->module_config, modp);
-}
-
-#if 0 /* working... */
-static Parrot_PMC modparrot_module_hll_config(Parrot_PMC, int scope)
-#endif
-
-const char *modparrot_module_cmd_take1(cmd_parms *cmd, void *mconfig,
-                                       const char *arg)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    modparrot_module_info *minfo = data->modp->dynamic_load_handle;
-    modparrot_module_config *srvcfg, *dircfg;
-    int ret;
-
-    /* mod_parrot specific stuff */
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    
-    /* create/fetch module server config */
-    srvcfg = (modparrot_module_config *)ap_get_module_config(
-        cmd->server->module_config, data->modp);
-    if (srvcfg) {
-        if (!srvcfg->cfg) {
-            srvcfg->name = apr_pstrdup(cmd->pool, data->modp->name);
-            if (minfo->server_create_sub) {
-                /* XXX pass in pool and server_rec objects when implemented */
-                srvcfg->cfg = Parrot_call_sub(ctxp->interp,
-                    minfo->server_create_sub, "P");
-            }
-        }
-    }
-
-    /* create/fetch module directory config */
-    dircfg = (modparrot_module_config *)mconfig;
-    if (dircfg) {
-        if (!dircfg->cfg) {
-            srvcfg->name = apr_pstrdup(cmd->pool, data->modp->name);
-            if (minfo->dir_create_sub) {
-                /* XXX pass in pool and server_rec objects when implemented */
-                dircfg->cfg = Parrot_call_sub(ctxp->interp,
-                    minfo->dir_create_sub, "P");
-            }
-        }
-    }
-
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 1, arg);
-
-    /* XXX add cmd_parms to this when it's implemented */
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IPP",
-        dircfg->cfg, args);
-
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_take2(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 2, arg1, arg2);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_take12(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 2, arg1, arg2);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_take3(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2,
-                                       const char *arg3)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 3, arg1, arg2, arg3);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_take23(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2,
-                                       const char *arg3)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 3, arg1, arg2, arg3);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_take123(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2,
-                                       const char *arg3)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 3, arg1, arg2, arg3);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_raw_args(cmd_parms *cmd, void *mconfig,
-                                       const char *arg)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 1, arg);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_flag(cmd_parms *cmd, void *mconfig, int arg)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "II", arg);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_iterate(cmd_parms *cmd, void *mconfig,
-                                       const char *arg)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 1, arg);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_iterate2(cmd_parms *cmd, void *mconfig,
-                                       const char *arg1,
-                                       const char *arg2)
-{
-    modparrot_context *ctxp;
-    Parrot_PMC args;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    args = make_cmd_args_array(ctxp->interp, cmd->pool, 2, arg1, arg2);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IP", args);
-    release_ctx(ctxp);
-    return NULL;
-}
-
-const char *modparrot_module_cmd_no_args(cmd_parms *cmd, void *mconfig)
-{
-    modparrot_context *ctxp;
-    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
-    int ret;
-
-    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
-    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "I");
-    release_ctx(ctxp);
-    return NULL;
-}

Modified: mod_parrot/branches/hll-modules/src/module.c
==============================================================================
--- mod_parrot/branches/hll-modules/src/module.c	(original)
+++ mod_parrot/branches/hll-modules/src/module.c	Fri Sep 19 12:48:04 2008
@@ -24,6 +24,7 @@
 #include "http_connection.h"
 #include "http_main.h"
 #include "mpm.h"
+#include "apr_strings.h"
 
 #include "parrot/parrot.h"
 #include "parrot/embed.h"
@@ -86,6 +87,120 @@
     return(NULL);
 }
 
+static Parrot_PMC make_cmd_args_array(Parrot_Interp interp, apr_pool_t *p,
+    int nargs, ...)
+{
+    va_list ap;
+    Parrot_PMC args;
+    int i=0, typenum;
+
+    typenum = Parrot_PMC_typenum(interp, "SArray");
+    args = (Parrot_PMC)Parrot_PMC_new(interp, typenum);
+    Parrot_register_pmc(interp, args);
+    Parrot_PMC_set_intval(interp, args, nargs);
+
+    va_start(ap, nargs);
+    for (i = 0; i < nargs; i++) {
+        char *arg = va_arg(ap, char *);
+        if (arg) {
+            Parrot_PMC_set_cstring_intkey(interp, args, i, arg);
+        }
+        else {
+            Parrot_PMC_set_pmc_intkey(interp, args, i, PMCNULL);
+        }
+    }
+    va_end(ap);
+
+    return(args);
+}
+
+static const char *modparrot_module_cmd_take123(cmd_parms *cmd, void *mconfig,
+                                       const char *arg1,
+                                       const char *arg2,
+                                       const char *arg3)
+{
+    modparrot_context *ctxp;
+    Parrot_PMC args;
+    modparrot_module_cmd_data *data = cmd->cmd->cmd_data;
+    modparrot_module_info *minfo = data->modp->dynamic_load_handle;
+    modparrot_module_config *srvcfg, *dircfg;
+    int ret;
+
+    /* mod_parrot specific stuff */
+    ctxp = modparrot_startup(cmd->pool, cmd->server, NULL);
+
+    /* create/fetch module server config */
+    srvcfg = (modparrot_module_config *)ap_get_module_config(
+        cmd->server->module_config, data->modp);
+    if (srvcfg) {
+        if (!srvcfg->cfg) {
+            srvcfg->name = apr_pstrdup(cmd->pool, data->modp->name);
+            if (minfo->server_create_sub) {
+                /* XXX pass in pool and server_rec objects when implemented */
+                srvcfg->cfg = Parrot_call_sub(ctxp->interp,
+                    minfo->server_create_sub, "P");
+            }
+        }
+    }
+
+    /* create/fetch module directory config */
+    dircfg = (modparrot_module_config *)mconfig;
+    if (dircfg) {
+        if (!dircfg->cfg) {
+            srvcfg->name = apr_pstrdup(cmd->pool, data->modp->name);
+            if (minfo->dir_create_sub) {
+                /* XXX pass in pool and server_rec objects when implemented */
+                dircfg->cfg = Parrot_call_sub(ctxp->interp,
+                    minfo->dir_create_sub, "P");
+            }
+        }
+    }
+
+    args = make_cmd_args_array(ctxp->interp, cmd->pool, 3, arg1, arg2, arg3);
+
+    /* XXX add cmd_parms to this when it's implemented */
+    ret = Parrot_call_sub_ret_int(ctxp->interp, data->func, "IPP",
+        dircfg->cfg, args);
+
+    release_ctx(ctxp);
+    return NULL;
+}
+
+static const char *modparrot_module_cmd_take1(cmd_parms *cmd, void *mconfig,
+                                      const char *arg)
+{
+    return modparrot_module_cmd_take123(cmd, mconfig, arg, NULL, NULL);
+}
+
+
+static const char *modparrot_module_cmd_take2(cmd_parms *cmd, void *mconfig,
+                                      const char *arg1, const char *arg2)
+{
+    return modparrot_module_cmd_take123(cmd, mconfig, arg1, arg2, NULL);
+}
+
+static const char *modparrot_module_cmd_no_args(cmd_parms *cmd, void *mconfig)
+{
+    return modparrot_module_cmd_take123(cmd, mconfig, NULL, NULL, NULL);
+}
+
+static const char *modparrot_module_cmd_flag(cmd_parms *cmd, void *mconfig,
+                                             int flag)
+{
+    char buf[2];
+
+    apr_snprintf(buf, sizeof(buf), "%d", flag);
+    return modparrot_module_cmd_take123(cmd, mconfig, NULL, NULL, NULL);
+}
+
+#define modparrot_module_cmd_raw_args modparrot_module_cmd_take1
+#define modparrot_module_cmd_iterate  modparrot_module_cmd_take1
+#define modparrot_module_cmd_iterate2 modparrot_module_cmd_take2
+#define modparrot_module_cmd_take12   modparrot_module_cmd_take2
+#define modparrot_module_cmd_take23   modparrot_module_cmd_take123
+#define modparrot_module_cmd_take3    modparrot_module_cmd_take123
+#define modparrot_module_cmd_take13   modparrot_module_cmd_take123
+
 static void register_meta_hooks(apr_pool_t *p)
 {
     /* XXX does this also work for Apache >= 2.3 */