| /* Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef MODPERL_PERL_GLOBAL_H |
| #define MODPERL_PERL_GLOBAL_H |
| |
| #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) |
| |
| typedef struct { |
| const char *name; |
| const char *val; |
| I32 len; |
| U32 hash; |
| } modperl_modglobal_key_t; |
| |
| typedef enum { |
| MP_MODGLOBAL_END |
| } modperl_modglobal_key_e; |
| |
| typedef struct { |
| AV **av; |
| modperl_modglobal_key_e key; |
| } modperl_perl_global_avcv_t; |
| |
| typedef struct { |
| GV *gv; |
| AV *tmpav; |
| AV *origav; |
| } modperl_perl_global_gvav_t; |
| |
| typedef struct { |
| GV *gv; |
| HV *tmphv; |
| HV *orighv; |
| } modperl_perl_global_gvhv_t; |
| |
| typedef struct { |
| GV *gv; |
| char flags; |
| } modperl_perl_global_gvio_t; |
| |
| typedef struct { |
| SV **sv; |
| char pv[256]; /* XXX: only need enough for $/ at the moment */ |
| I32 cur; |
| } modperl_perl_global_svpv_t; |
| |
| typedef struct { |
| modperl_perl_global_avcv_t end; |
| modperl_perl_global_gvhv_t env; |
| modperl_perl_global_gvav_t inc; |
| modperl_perl_global_gvio_t defout; |
| modperl_perl_global_svpv_t rs; |
| } modperl_perl_globals_t; |
| |
| void modperl_modglobal_hash_keys(pTHX); |
| |
| modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name); |
| |
| void modperl_perl_global_request_save(pTHX_ request_rec *r); |
| |
| void modperl_perl_global_request_restore(pTHX_ request_rec *r); |
| |
| void modperl_perl_global_avcv_register(pTHX_ modperl_modglobal_key_t *gkey, |
| const char *package, I32 packlen); |
| |
| void modperl_perl_global_avcv_call(pTHX_ modperl_modglobal_key_t *gkey, |
| const char *package, I32 packlen); |
| |
| void modperl_perl_global_avcv_clear(pTHX_ modperl_modglobal_key_t *gkey, |
| const char *package, I32 packlen); |
| |
| #endif |
| |
| /* |
| * Local Variables: |
| * c-basic-offset: 4 |
| * indent-tabs-mode: nil |
| * End: |
| */ |