cvs commit: modperl-2.0/src/modules/perl modperl_perl_global.c modperl_perl_global.h
dougm 01/10/13 11:55:03 Modified:src/modules/perl modperl_perl_global.c modperl_perl_global.h Log: s/hv_fetch/hv_fetch_he/g Revision ChangesPath 1.10 +24 -9 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- modperl_perl_global.c 2001/10/08 21:09:08 1.9 +++ modperl_perl_global.c 2001/10/13 18:55:03 1.10 @@ -12,8 +12,14 @@ /* XXX: PL_modglobal thingers might be useful elsewhere */ +#define MP_MODGLOBAL_FETCH(gkey) \ +hv_fetch_he(PL_modglobal, (char *)gkey-val, gkey-len, gkey-hash) + +#define MP_MODGLOBAL_STORE_HV(gkey) \ +(HV*)*hv_store(PL_modglobal, gkey-val, gkey-len, (SV*)newHV(), gkey-hash) + #define MP_MODGLOBAL_ENT(key) \ -{key, ModPerl:: key, (sizeof(ModPerl::)-1)+(sizeof(key)-1)} +{key, ModPerl:: key, (sizeof(ModPerl::)-1)+(sizeof(key)-1), 0} static modperl_modglobal_key_t MP_modglobal_keys[] = { MP_MODGLOBAL_ENT(END), @@ -36,18 +42,18 @@ static AV *modperl_perl_global_avcv_fetch(pTHX_ modperl_modglobal_key_t *gkey, const char *package, I32 packlen) { -SV **svp = hv_fetch(PL_modglobal, gkey-val, gkey-len, FALSE); +HE *he = MP_MODGLOBAL_FETCH(gkey); HV *hv; -if (!(svp (hv = (HV*)*svp))) { +if (!(he (hv = (HV*)HeVAL(he { return Nullav; } -if (!(svp = hv_fetch(hv, package, packlen, FALSE))) { +if (!(he = hv_fetch_he(hv, (char *)package, packlen, 0))) { return Nullav; } -return (AV*)*svp; +return (AV*)HeVAL(he); } void modperl_perl_global_avcv_call(pTHX_ modperl_modglobal_key_t *gkey, @@ -76,6 +82,7 @@ static int modperl_perl_global_avcv_set(pTHX_ SV *sv, MAGIC *mg) { +HE *he; HV *hv; AV *mav, *av = (AV*)sv; const char *package = HvNAME(PL_curstash); @@ -83,11 +90,19 @@ modperl_modglobal_key_t *gkey = (modperl_modglobal_key_t *)mg-mg_ptr; -hv = (HV*)*hv_fetch(PL_modglobal, gkey-val, gkey-len, TRUE); -(void)SvUPGRADE((SV*)hv, SVt_PVHV); +if ((he = MP_MODGLOBAL_FETCH(gkey))) { +hv = (HV*)HeVAL(he); +} +else { +hv = MP_MODGLOBAL_STORE_HV(gkey); +} -mav = (AV*)*hv_fetch(hv, package, packlen, TRUE); -(void)SvUPGRADE((SV*)mav, SVt_PVAV); +if ((he = hv_fetch_he(hv, (char *)package, packlen, 0))) { +mav = (AV*)HeVAL(he); +} +else { +mav = (AV*)*hv_store(hv, package, packlen, (SV*)newAV(), 0); +} /* $cv = pop @av */ sv = AvARRAY(av)[AvFILLp(av)]; 1.8 +1 -0 modperl-2.0/src/modules/perl/modperl_perl_global.h Index: modperl_perl_global.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- modperl_perl_global.h 2001/10/07 22:07:15 1.7 +++ modperl_perl_global.h 2001/10/13 18:55:03 1.8 @@ -5,6 +5,7 @@ const char *name; const char *val; I32 len; +U32 hash; } modperl_modglobal_key_t; typedef enum {
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h
dougm 01/10/13 12:02:03 Modified:src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h Log: calculate hash of MP_modglobal_keys keys at startup Revision ChangesPath 1.91 +1 -0 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.90 retrieving revision 1.91 diff -u -r1.90 -r1.91 --- mod_perl.c2001/10/11 04:47:30 1.90 +++ mod_perl.c2001/10/13 19:02:03 1.91 @@ -332,6 +332,7 @@ ap_add_version_component(pconf, Perl_form(aTHX_ Perl/v%vd, PL_patchlevel)); modperl_mgv_hash_handlers(pconf, s); +modperl_modglobal_hash_keys(); #ifdef USE_ITHREADS modperl_init_clones(s, pconf); #endif 1.11 +10 -0 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- modperl_perl_global.c 2001/10/13 18:55:03 1.10 +++ modperl_perl_global.c 2001/10/13 19:02:03 1.11 @@ -26,6 +26,16 @@ { NULL }, }; +void modperl_modglobal_hash_keys(void) +{ +modperl_modglobal_key_t *gkey = MP_modglobal_keys; + +while (gkey-name) { +PERL_HASH(gkey-hash, gkey-val, gkey-len); +gkey++; +} +} + modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name) { int i; 1.9 +2 -0 modperl-2.0/src/modules/perl/modperl_perl_global.h Index: modperl_perl_global.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- modperl_perl_global.h 2001/10/13 18:55:03 1.8 +++ modperl_perl_global.h 2001/10/13 19:02:03 1.9 @@ -49,6 +49,8 @@ modperl_perl_global_svpv_t rs; } modperl_perl_globals_t; +void modperl_modglobal_hash_keys(void); + modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name); void modperl_perl_global_request_save(pTHX_ request_rec *r);
cvs commit: modperl-2.0/src/modules/perl modperl_perl_global.c
dougm 01/10/13 12:05:16 Modified:src/modules/perl modperl_perl_global.c Log: use consistent style to iterate over MP_modglobal_keys Revision ChangesPath 1.12 +5 -4 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_perl_global.c 2001/10/13 19:02:03 1.11 +++ modperl_perl_global.c 2001/10/13 19:05:16 1.12 @@ -38,12 +38,13 @@ modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name) { -int i; +modperl_modglobal_key_t *gkey = MP_modglobal_keys; -for (i=0; MP_modglobal_keys[i].name; i++) { -if (strEQ(MP_modglobal_keys[i].name, name)) { -return MP_modglobal_keys[i]; +while (gkey-name) { +if (strEQ(gkey-name, name)) { +return gkey; } +gkey++; } return NULL;
cvs commit: modperl-2.0/src/modules/perl modperl_env.c
dougm 01/10/13 12:12:17 Modified:src/modules/perl modperl_env.c Log: s/modperl_env_const_vars/MP_env_const_vars/g Revision ChangesPath 1.14 +4 -4 modperl-2.0/src/modules/perl/modperl_env.c Index: modperl_env.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- modperl_env.c 2001/10/13 19:11:32 1.13 +++ modperl_env.c 2001/10/13 19:12:17 1.14 @@ -31,7 +31,7 @@ #define MP_ENV_ENT(k,v) \ { k, sizeof(k)-1, v, sizeof(v)-1, 0 } -static modperl_env_ent_t modperl_env_const_vars[] = { +static modperl_env_ent_t MP_env_const_vars[] = { #ifdef MP_COMPAT_1X MP_ENV_ENT(GATEWAY_INTERFACE, CGI-Perl/1.1), #endif @@ -41,7 +41,7 @@ void modperl_env_hash_keys(void) { -modperl_env_ent_t *ent = modperl_env_const_vars; +modperl_env_ent_t *ent = MP_env_const_vars; while (ent-key) { PERL_HASH(ent-hash, ent-key, ent-klen); @@ -69,8 +69,8 @@ modperl_env_untie(mg_flags); -for (i = 0; modperl_env_const_vars[i].key; i++) { -const modperl_env_ent_t *ent = modperl_env_const_vars[i]; +for (i = 0; MP_env_const_vars[i].key; i++) { +const modperl_env_ent_t *ent = MP_env_const_vars[i]; hv_store(hv, ent-key, ent-klen, newSVpvn(ent-val, ent-vlen), ent-hash);
cvs commit: modperl-2.0/src/modules/perl modperl_env.c
dougm 01/10/13 12:14:58 Modified:src/modules/perl modperl_env.c Log: use consistent style to iterate over MP_env_const_vars Revision ChangesPath 1.15 +3 -4 modperl-2.0/src/modules/perl/modperl_env.c Index: modperl_env.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- modperl_env.c 2001/10/13 19:12:17 1.14 +++ modperl_env.c 2001/10/13 19:14:58 1.15 @@ -63,17 +63,16 @@ void modperl_env_default_populate(pTHX) { +modperl_env_ent_t *ent = MP_env_const_vars; HV *hv = ENVHV; U32 mg_flags; -int i; modperl_env_untie(mg_flags); -for (i = 0; MP_env_const_vars[i].key; i++) { -const modperl_env_ent_t *ent = MP_env_const_vars[i]; - +while (ent-key) { hv_store(hv, ent-key, ent-klen, newSVpvn(ent-val, ent-vlen), ent-hash); +ent++; } modperl_env_tie(mg_flags);