gozer 2004/08/22 13:47:37
Modified: . Changes src/modules/perl modperl_util.c modperl_util.h t/response/TestAPI request_rec.pm todo release xs/Apache/RequestRec Apache__RequestRec.h xs/maps apache_structures.map modperl_functions.map xs/tables/current/ModPerl FunctionTable.pm Log: Added $r->content_languages in Apache::RequestRec Revision Changes Path 1.460 +2 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.459 retrieving revision 1.460 diff -u -r1.459 -r1.460 --- Changes 20 Aug 2004 21:11:00 -0000 1.459 +++ Changes 22 Aug 2004 20:47:37 -0000 1.460 @@ -12,6 +12,8 @@ =item 1.99_16-dev +Added $r->content_languages in Apache::RequestRec [Gozer] + APR::Bucket: add delete() and destroy() methods [Stas] 1.76 +37 -0 modperl-2.0/src/modules/perl/modperl_util.c Index: modperl_util.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- modperl_util.c 15 Aug 2004 20:06:51 -0000 1.75 +++ modperl_util.c 22 Aug 2004 20:47:37 -0000 1.76 @@ -713,3 +713,40 @@ return text; } + +SV *modperl_apr_array_header2avrv(pTHX_ apr_array_header_t *array) +{ + AV *av = newAV(); + + if (array) { + int i; + for (i = 0; i < array->nelts; i++) { + av_push(av, newSVpv(((char **)array->elts)[i], 0)); + } + } + return newRV_noinc((SV*)av); +} + +apr_array_header_t *modperl_avrv2apr_array_header(pTHX_ apr_pool_t *p, + SV *avrv) +{ + AV *av; + apr_array_header_t *array; + int i, av_size; + + if (!(SvROK(avrv) && (SvTYPE(SvRV(avrv)) == SVt_PVAV))) { + Perl_croak(aTHX_ "Not an array reference"); + } + + av = (AV*)SvRV(avrv); + av_size = av_len(av); + array = apr_array_make(p, av_size+1, sizeof(char *)); + + for (i = 0; i <= av_size; i++) { + SV *sv = *av_fetch(av, i, FALSE); + char **entry = (char **)apr_array_push(array); + *entry = apr_pstrdup(p, SvPV(sv, PL_na)); + } + + return array; +} 1.66 +3 -0 modperl-2.0/src/modules/perl/modperl_util.h Index: modperl_util.h =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v retrieving revision 1.65 retrieving revision 1.66 diff -u -r1.65 -r1.66 --- modperl_util.h 15 Aug 2004 20:06:51 -0000 1.65 +++ modperl_util.h 22 Aug 2004 20:47:37 -0000 1.66 @@ -106,6 +106,9 @@ */ char *modperl_coderef2text(pTHX_ apr_pool_t *p, CV *cv); +SV *modperl_apr_array_header2avrv(pTHX_ apr_array_header_t *array); +apr_array_header_t *modperl_avrv2apr_array_header(pTHX_ apr_pool_t *p, + SV *avrv); #if defined(MP_TRACE) && defined(APR_HAS_THREADS) #define MP_TRACEf_TID "/tid 0x%lx" #define MP_TRACEv_TID (unsigned long)apr_os_thread_current() 1.31 +14 -2 modperl-2.0/t/response/TestAPI/request_rec.pm Index: request_rec.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestAPI/request_rec.pm,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- request_rec.pm 8 Aug 2004 21:32:00 -0000 1.30 +++ request_rec.pm 22 Aug 2004 20:47:37 -0000 1.31 @@ -23,7 +23,7 @@ sub handler { my $r = shift; - plan $r, tests => 45; + plan $r, tests => 49; #Apache->request($r); #PerlOptions +GlobalRequest takes care my $gr = Apache->request; @@ -164,7 +164,19 @@ ok $r->allowed & (1 << Apache::M_PUT); } + # content_languages + { + my $def = [qw(fr)]; #default value + my $l = [qw(fr us cn)]; #new value + ok t_cmp $r->content_languages, $def, '$r->content_languages'; + ok t_cmp $r->content_languages($l), $def, '$r->content_languages'; + ok t_cmp $r->content_languages, $l, '$r->content_languages'; + + eval { $r->content_languages({}) }; + ok t_cmp $@, qr/Not an array reference/, + '$r->content_languages(invalid)'; + } # tested in other tests # - input_filters: TestAPI::in_out_filters # - output_filters: TestAPI::in_out_filters @@ -174,7 +186,6 @@ # XXX: untested # - request_config - # - content_languages # - allowed_xmethods # - allowed_methods @@ -184,3 +195,4 @@ 1; __END__ PerlOptions +GlobalRequest +DefaultLanguage fr 1.51 +0 -2 modperl-2.0/todo/release Index: release =================================================================== RCS file: /home/cvs/modperl-2.0/todo/release,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- release 19 Aug 2004 00:57:32 -0000 1.50 +++ release 22 Aug 2004 20:47:37 -0000 1.51 @@ -14,8 +14,6 @@ * APR::URI missing $uri->rpath (was in mp1) -* Apache::RequestRec's $r->content_languages is missing (was in mp1) - * check other todo/features_missing items (some of them might be critical for 2.0 release, since missing methods might be a problem for migration) 1.16 +14 -0 modperl-2.0/xs/Apache/RequestRec/Apache__RequestRec.h Index: Apache__RequestRec.h =================================================================== RCS file: /home/cvs/modperl-2.0/xs/Apache/RequestRec/Apache__RequestRec.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- Apache__RequestRec.h 16 Jul 2004 01:10:46 -0000 1.15 +++ Apache__RequestRec.h 22 Aug 2004 20:47:37 -0000 1.16 @@ -31,6 +31,20 @@ } static MP_INLINE +SV *mpxs_Apache__RequestRec_content_languages(pTHX_ request_rec *r, + SV *languages) +{ + SV *retval = modperl_apr_array_header2avrv(aTHX_ + r->content_languages); + if (languages) { + r->content_languages = modperl_avrv2apr_array_header(aTHX_ + r->pool, + languages); + } + return retval; +} + +static MP_INLINE int mpxs_Apache__RequestRec_proxyreq(pTHX_ request_rec *r, SV *val) { int retval = r->proxyreq; 1.46 +1 -1 modperl-2.0/xs/maps/apache_structures.map Index: apache_structures.map =================================================================== RCS file: /home/cvs/modperl-2.0/xs/maps/apache_structures.map,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- apache_structures.map 17 Aug 2004 23:40:41 -0000 1.45 +++ apache_structures.map 22 Aug 2004 20:47:37 -0000 1.46 @@ -46,7 +46,7 @@ ~ content_type ~ handler content_encoding - content_languages +~ content_languages > vlist_validator user ap_auth_type 1.84 +1 -1 modperl-2.0/xs/maps/modperl_functions.map Index: modperl_functions.map =================================================================== RCS file: /home/cvs/modperl-2.0/xs/maps/modperl_functions.map,v retrieving revision 1.83 retrieving revision 1.84 diff -u -r1.83 -r1.84 --- modperl_functions.map 17 Aug 2004 23:40:41 -0000 1.83 +++ modperl_functions.map 22 Aug 2004 20:47:37 -0000 1.84 @@ -21,7 +21,7 @@ mpxs_Apache__RequestRec_subprocess_env | | r, key=NULL, val=Nullsv mpxs_Apache__RequestRec_finfo | | r, finfo=NULL mpxs_Apache__RequestRec_handler | | ... - + mpxs_Apache__RequestRec_content_languages | | r, languages=Nullsv MODULE=Apache::RequestUtil PACKAGE=guess mpxs_Apache__RequestRec_push_handlers 1.175 +50 -0 modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm Index: FunctionTable.pm =================================================================== RCS file: /home/cvs/modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm,v retrieving revision 1.174 retrieving revision 1.175 diff -u -r1.174 -r1.175 --- FunctionTable.pm 20 Aug 2004 21:00:19 -0000 1.174 +++ FunctionTable.pm 22 Aug 2004 20:47:37 -0000 1.175 @@ -18,6 +18,20 @@ ] }, { + 'return_type' => 'SV *', + 'name' => 'modperl_apr_array_header2avrv', + 'args' => [ + { + 'type' => 'PerlInterpreter *', + 'name' => 'my_perl' + }, + { + 'type' => 'apr_array_header_t *', + 'name' => 'array' + } + ] + }, + { 'return_type' => 'int', 'name' => 'modperl_authen_handler', 'args' => [ @@ -38,6 +52,24 @@ ] }, { + 'return_type' => 'apr_array_header_t *', + 'name' => 'modperl_avrv2apr_array_header', + 'args' => [ + { + 'type' => 'PerlInterpreter *', + 'name' => 'my_perl' + }, + { + 'type' => 'apr_pool_t *', + 'name' => 'p' + }, + { + 'type' => 'SV *', + 'name' => 'avrv' + } + ] + }, + { 'return_type' => 'void', 'name' => 'modperl_brigade_dump', 'args' => [ @@ -6265,6 +6297,24 @@ { 'type' => 'char *', 'name' => 'type' + } + ] + }, + { + 'return_type' => 'SV *', + 'name' => 'mpxs_Apache__RequestRec_content_languages', + 'args' => [ + { + 'type' => 'PerlInterpreter *', + 'name' => 'my_perl' + }, + { + 'type' => 'request_rec *', + 'name' => 'r' + }, + { + 'type' => 'SV *', + 'name' => 'languages' } ] },