stas        01/09/28 12:51:40

  Modified:    src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
                        modperl_config.c modperl_types.h
  Log:
  - implementation of PerlSetVar and PerlAddVar
  
  Revision  Changes    Path
  1.85      +3 -1      modperl-2.0/src/modules/perl/mod_perl.c
  
  Index: mod_perl.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
  retrieving revision 1.84
  retrieving revision 1.85
  diff -u -r1.84 -r1.85
  --- mod_perl.c        2001/09/28 19:33:58     1.84
  +++ mod_perl.c        2001/09/28 19:51:40     1.85
  @@ -173,7 +173,7 @@
           if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)) {
               exit(1);
           }
  -
  +        
   #ifdef USE_ITHREADS
   
           if (!MpSrvENABLE(scfg)) {
  @@ -415,6 +415,8 @@
       MP_CMD_SRV_ITERATE("PerlModule", modules, "PerlModule"),
       MP_CMD_SRV_ITERATE("PerlRequire", requires, "PerlRequire"),
       MP_CMD_DIR_ITERATE("PerlOptions", options, "Perl Options"),
  +    MP_CMD_DIR_TAKE2("PerlSetVar", set_var, "PerlSetVar"),
  +    MP_CMD_DIR_ITERATE2("PerlAddVar", add_var, "PerlAddVar"),
   #ifdef MP_TRACE
       MP_CMD_SRV_TAKE1("PerlTrace", trace, "Trace level"),
   #endif
  
  
  
  1.12      +32 -0     modperl-2.0/src/modules/perl/modperl_cmd.c
  
  Index: modperl_cmd.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- modperl_cmd.c     2001/09/27 19:41:44     1.11
  +++ modperl_cmd.c     2001/09/28 19:51:40     1.12
  @@ -60,6 +60,38 @@
       return NULL;
   }
   
  +MP_CMD_SRV_DECLARE2(set_var)
  +{
  +    MP_dSCFG(parms->server);
  +    modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig;
  + 
  +    if (parms->path) {
  +        apr_table_set(dcfg->SetVar, arg1, arg2);
  +        MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2);
  +    }
  +    else {
  +        apr_table_set(scfg->SetVar, arg1, arg2);
  +        MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2);
  +    }
  +    return NULL;
  +}
  +
  +MP_CMD_SRV_DECLARE2(add_var)
  +{
  +    MP_dSCFG(parms->server);
  +    modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig;
  + 
  +    if (parms->path) {
  +        apr_table_add(dcfg->SetVar, arg1, arg2);
  +        MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2);
  +    }
  +    else {
  +        apr_table_add(scfg->SetVar, arg1, arg2);
  +        MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2);
  +    }
  +    return NULL;
  +}
  +
   MP_CMD_SRV_DECLARE(options)
   {
       MP_dSCFG(parms->server);
  
  
  
  1.14      +14 -5     modperl-2.0/src/modules/perl/modperl_cmd.h
  
  Index: modperl_cmd.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- modperl_cmd.h     2001/09/27 19:41:44     1.13
  +++ modperl_cmd.h     2001/09/28 19:51:40     1.14
  @@ -4,14 +4,13 @@
   char *modperl_cmd_push_handlers(MpAV **handlers, const char *name,
                                   apr_pool_t *p);
   
  -
   #define MP_CMD_SRV_DECLARE(item) \
  -const char *modperl_cmd_##item(cmd_parms *parms, \
  -                               void *mconfig, const char *arg)
  +const char *modperl_cmd_##item(cmd_parms *parms, void *mconfig, \
  +                               const char *arg)
   
   #define MP_CMD_SRV_DECLARE2(item) \
  -const char *modperl_cmd_##item(cmd_parms *parms, \
  -                               void *mconfig, const char *arg1, const char *arg2)
  +const char *modperl_cmd_##item(cmd_parms *parms, void *mconfig, \
  +                               const char *arg1, const char *arg2)
   
   #define MP_CMD_SRV_DECLARE_FLAG(item) \
   const char *modperl_cmd_##item(cmd_parms *parms, \
  @@ -21,6 +20,8 @@
   MP_CMD_SRV_DECLARE(switches);
   MP_CMD_SRV_DECLARE(modules);
   MP_CMD_SRV_DECLARE(requires);
  +MP_CMD_SRV_DECLARE2(set_var);
  +MP_CMD_SRV_DECLARE2(add_var);
   MP_CMD_SRV_DECLARE(options);
   
   #ifdef MP_COMPAT_1X
  @@ -73,6 +74,10 @@
      AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \
         RSRC_CONF, desc )
   
  +#define MP_CMD_SRV_ITERATE2(name, item, desc) \
  +   AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \
  +      RSRC_CONF, desc )
  +
   #define MP_CMD_DIR_TAKE1(name, item, desc) \
       AP_INIT_TAKE1( name, modperl_cmd_##item, NULL, \
         OR_ALL, desc )
  @@ -83,6 +88,10 @@
   
   #define MP_CMD_DIR_ITERATE(name, item, desc) \
       AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \
  +      OR_ALL, desc )
  +
  +#define MP_CMD_DIR_ITERATE2(name, item, desc) \
  +    AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \
         OR_ALL, desc )
   
   #define MP_CMD_DIR_FLAG(name, item, desc) \
  
  
  
  1.42      +27 -1     modperl-2.0/src/modules/perl/modperl_config.c
  
  Index: modperl_config.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- modperl_config.c  2001/09/28 15:16:06     1.41
  +++ modperl_config.c  2001/09/28 19:51:40     1.42
  @@ -13,8 +13,26 @@
   }
   
   #define merge_item(item) \
  -mrg->item = add->item ? add->item : base->item
  +    mrg->item = add->item ? add->item : base->item
   
  +/* take the 'base' values, and override with 'add' values if any */
  +#define merge_table_overlap_item(item) \
  +    { \
  +        apr_array_header_t *arr = apr_table_elts(base->item); \
  +        apr_table_entry_t *entries  = (apr_table_entry_t *)arr->elts; \
  +        int i; \
  +        mrg->item = apr_table_copy(p, add->item); \
  +        for (i = 0; i < arr->nelts; i++) { \
  +            char *val; \
  +            if ((val = (char *)apr_table_get(mrg->item, entries[i].key))){ \
  +                continue; \
  +            } \
  +            else if ((val = (char *)apr_table_get(base->item, entries[i].key))){ \
  +                apr_table_set(mrg->item, entries[i].key, val); \
  +            } \
  +        } \
  +    }
  +
   #define merge_handlers(merge_flag, array) \
       if (merge_flag(mrg)) { \
           mrg->array = modperl_handler_array_merge(p, \
  @@ -42,6 +60,8 @@
   
       mrg->flags = modperl_options_merge(p, base->flags, add->flags);
   
  +    merge_table_overlap_item(SetVar);
  +
       /* XXX: check if Perl*Handler is disabled */
       for (i=0; i < MP_HANDLER_NUM_PER_DIR; i++) {
           merge_handlers(MpDirMERGE_HANDLERS, handlers_per_dir[i]);
  @@ -76,6 +96,8 @@
   
       scfg->argv = apr_array_make(p, 2, sizeof(char *));
   
  +    scfg->SetVar = apr_table_make(p, 2);
  +    
       modperl_config_srv_argv_push((char *)ap_server_argv0);
   
       MP_TRACE_d(MP_FUNC, "0x%lx\n", (unsigned long)scfg);
  @@ -90,6 +112,8 @@
   
       dcfg->flags = modperl_options_new(p, MpDirType);
   
  +    dcfg->SetVar = apr_table_make(p, 2);
  +    
       MP_TRACE_d(MP_FUNC, "0x%lx\n", (unsigned long)dcfg);
   
       return dcfg;
  @@ -158,6 +182,8 @@
       merge_item(PerlModule);
       merge_item(PerlRequire);
   
  +    merge_table_overlap_item(SetVar);
  + 
       merge_item(threaded_mpm);
   
   #ifdef USE_ITHREADS
  
  
  
  1.51      +2 -2      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- modperl_types.h   2001/09/28 15:16:06     1.50
  +++ modperl_types.h   2001/09/28 19:51:40     1.51
  @@ -111,7 +111,7 @@
   } modperl_interp_scope_e;
   
   typedef struct {
  -    MpHV *SetVars;
  +    MpHV *SetVar;
       MpAV *PassEnv;
       MpAV *PerlRequire, *PerlModule;
       MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV];
  @@ -138,7 +138,7 @@
       char *PerlDispatchHandler;
       MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR];
       MpHV *SetEnv;
  -    MpHV *SetVars;
  +    MpHV *SetVar;
       modperl_options_t *flags;
   #ifdef USE_ITHREADS
       modperl_interp_scope_e interp_scope;
  
  
  


Reply via email to