httpd-apreq-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject cvs commit: httpd-apreq-2/glue/perl/xsbuilder/maps apreq_functions.map
Date Thu, 08 Jul 2004 19:55:57 GMT
joes        2004/07/08 12:55:57

  Modified:    .        CHANGES STATUS
               glue/perl/t/response/TestApReq request.pm
               glue/perl/xsbuilder apreq_xs_postperl.h apreq_xs_tables.h
               glue/perl/xsbuilder/Apache/Cookie Apache__Cookie.h Cookie_pm
               glue/perl/xsbuilder/Apache/Request Apache__Request.h
                        Request_pm Request_pod
               glue/perl/xsbuilder/Apache/Upload Apache__Upload.h Upload_pm
               glue/perl/xsbuilder/maps apreq_functions.map
  Log:
  Exception objects inherit from the object which raised the error.  This allows $@ to use
its methods with impunity.  Also fixed a related bug in $req->args, $req->body and $req->upload
not locating the correct object in derived classes (we must use apreq_xs_find_object throughout).
  
  Revision  Changes    Path
  1.55      +4 -0      httpd-apreq-2/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/CHANGES,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- CHANGES	7 Jul 2004 23:53:01 -0000	1.54
  +++ CHANGES	8 Jul 2004 19:55:56 -0000	1.55
  @@ -4,6 +4,10 @@
   
   @section v2_04_dev Changes with libapreq2-2.04-dev
   
  +- Perl API [joes]
  +  Exception objects inherit from the object which raised it,
  +  which allows $@ to invoke its methods with impunity (exceptions 
  +  are disabled for objects which derive from an exception class).
   
   - Perl API [joes]
     Implement HOOK_DATA and UPLOAD_HOOK.
  
  
  
  1.64      +1 -16     httpd-apreq-2/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/STATUS,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- STATUS	7 Jul 2004 23:53:01 -0000	1.63
  +++ STATUS	8 Jul 2004 19:55:56 -0000	1.64
  @@ -52,21 +52,6 @@
   
       - CuTest needs va_arg to print comments for a failed unit test.
   
  -    - Flesh out the APR::Error-derived exception objects.  What tables
  -      should we add to the exception's attributes?  Some early ideas:
  -
  -      -# Apache::Request::Error needs to provide args, body,
  -         and upload tables (if Apache::Upload is being used).
  -         .
  -      -# Apache::Upload::Error needs to provide nothing, since any
  -         per-upload errors would be due to exceptions from apr/APR (e.g. 
  -         can't make tempfile, can't create APR::PerlIO handle).
  -         .
  -      -# Apache::Cookie::Jar::Error needs to provide the jar->cookies table.
  -         .
  -      -# Apache::Cookie::Error needs to provide no additional attributes,
  -         for the same reason Apache::Upload::Error doesn't.
  -
       - Get env/ (Apache::Test) tests to work for --with-apache2-src option.
   
       - Bring Perl documentation up to speed.
  
  
  
  1.25      +3 -1      httpd-apreq-2/glue/perl/t/response/TestApReq/request.pm
  
  Index: request.pm
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/t/response/TestApReq/request.pm,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- request.pm	7 Jul 2004 23:53:01 -0000	1.24
  +++ request.pm	8 Jul 2004 19:55:57 -0000	1.25
  @@ -138,7 +138,9 @@
           $req->config(DISABLE_UPLOADS => 1);
           eval {my $upload = $req->upload('HTTPUPLOAD')};
           if (ref $@ eq "Apache::Request::Error") {
  -            $req->print("ok");
  +            my $args = $@->args('test');
  +            my $upload = $@->upload('HTTPUPLOAD'); # no exception this time!
  +            $@->print("ok") if $args eq $test;
           }
       }
   
  
  
  
  1.38      +10 -0     httpd-apreq-2/glue/perl/xsbuilder/apreq_xs_postperl.h
  
  Index: apreq_xs_postperl.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/apreq_xs_postperl.h,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- apreq_xs_postperl.h	7 Jul 2004 06:41:16 -0000	1.37
  +++ apreq_xs_postperl.h	8 Jul 2004 19:55:57 -0000	1.38
  @@ -268,6 +268,16 @@
       Perl_croak(aTHX_ Nullch);
   }
   
  +#define APREQ_XS_THROW_ERROR(attr, status, func, errpkg)  do {          \
  +    if (!sv_derived_from(sv, errpkg)) {                                 \
  +        HV *hv = newHV();                                               \
  +        SV *rv = sv_bless(newRV_inc(obj),SvSTASH(obj));                 \
  +        sv_setsv(*hv_fetch(hv, "_" #attr, 2, 1), sv_2mortal(rv));       \
  +        apreq_xs_croak(aTHX_ hv, status, func, errpkg);                 \
  +    }                                                                   \
  +} while (0)
  +
  +
   #define APREQ_XS_DEFINE_POOL(attr)                              \
   static XS(apreq_xs_##attr##_pool)                               \
   {                                                               \
  
  
  
  1.5       +10 -9     httpd-apreq-2/glue/perl/xsbuilder/apreq_xs_tables.h
  
  Index: apreq_xs_tables.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/apreq_xs_tables.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- apreq_xs_tables.h	7 Jul 2004 06:47:03 -0000	1.4
  +++ apreq_xs_tables.h	8 Jul 2004 19:55:57 -0000	1.5
  @@ -170,15 +170,16 @@
       const char *key = NULL;                                             \
       struct apreq_xs_do_arg d = { NULL, NULL, aTHX };                    \
       void *env;                                                          \
  -    SV *sv;                                                             \
  +    SV *sv, *obj;                                                       \
                                                                           \
       if (items == 0 || items > 2 || !SvROK(ST(0)))                       \
           Perl_croak(aTHX_ "Usage: $object->get($key)");                  \
                                                                           \
  -    sv = apreq_xs_find_obj(aTHX_ ST(0), #attr);                         \
  -    env = apreq_xs_##attr##_sv2env(sv);                                 \
  +    sv = ST(0);                                                         \
  +    obj = apreq_xs_find_obj(aTHX_ sv, #attr);                           \
  +    env = apreq_xs_##attr##_sv2env(obj);                                \
       d.env = env;                                                        \
  -    d.parent = sv;                                                      \
  +    d.parent = obj;                                                     \
       if (items == 2)                                                     \
           key = SvPV_nolen(ST(1));                                        \
                                                                           \
  @@ -188,22 +189,22 @@
                                                                           \
       case G_ARRAY:                                                       \
           PUTBACK;                                                        \
  -        apreq_xs_##attr##_push(sv, &d, key);                            \
  +        apreq_xs_##attr##_push(obj, &d, key);                           \
           break;                                                          \
                                                                           \
       case G_SCALAR:                                                      \
           if (items == 1) {                                               \
  -            apr_table_t *t = apreq_xs_##attr##_sv2table(sv);            \
  +            apr_table_t *t = apreq_xs_##attr##_sv2table(obj);           \
               if (t != NULL)                                              \
  -                XPUSHs(sv_2mortal(apreq_xs_table2sv(t,class,sv)));      \
  +                XPUSHs(sv_2mortal(apreq_xs_table2sv(t,class,obj)));     \
               PUTBACK;                                                    \
               break;                                                      \
           }                                                               \
                                                                           \
  -        RETVAL = apreq_xs_##attr##_##type(sv, key);                     \
  +        RETVAL = apreq_xs_##attr##_##type(obj, key);                    \
           if (RETVAL && (COND))                                           \
               XPUSHs(sv_2mortal(                                          \
  -                   apreq_xs_##type##2sv(RETVAL,subclass,sv)));          \
  +                   apreq_xs_##type##2sv(RETVAL,subclass,obj)));         \
                                                                           \
       default:                                                            \
           PUTBACK;                                                        \
  
  
  
  1.26      +16 -11    httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Apache__Cookie.h
  
  Index: Apache__Cookie.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Apache__Cookie.h,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- Apache__Cookie.h	7 Jul 2004 06:41:16 -0000	1.25
  +++ Apache__Cookie.h	8 Jul 2004 19:55:57 -0000	1.26
  @@ -40,11 +40,10 @@
           if (n == 1 && items == 2)                                       \
               break;                                                      \
       default:                                                            \
  -        s = ((apreq_jar_t *)SvIVX(sv))->status;                         \
  -        if (s != APR_SUCCESS) {                                         \
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Cookie::Jar::get",\
  -                           "Apache::Cookie::Error");                    \
  -        }                                                               \
  +        s = ((apreq_jar_t *)SvIVX(obj))->status;                        \
  +        if (s != APR_SUCCESS)                                           \
  +            APREQ_XS_THROW_ERROR(jar, s, "Apache::Cookie::Jar::get",    \
  +                                 "Apache::Cookie::Jar::Error");         \
       }                                                                   \
   } while (0)
   
  @@ -141,12 +140,15 @@
       apr_pool_t *p;
       apr_status_t status = APR_SUCCESS;
       int j = 1;
  +    SV *sv, *obj;
   
       if (items % 2 != 1 || ! SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $cookie->set_attr(%attrs)");
   
  -    c = apreq_xs_sv2(cookie,ST(0));
  -    p = apreq_env_pool(apreq_xs_sv2env(SvRV(ST(0))));
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "cookie");
  +    c = (apreq_cookie_t *)SvIVX(obj);
  +    p = apreq_env_pool(apreq_xs_sv2env(obj));
   
       for (j = 1; j + 1 < items; j += 2) {
           STRLEN alen, vlen;
  @@ -159,10 +161,13 @@
           case APR_SUCCESS:
               break;
           default:
  -            if (GIMME_V == G_VOID)
  -                apreq_xs_croak(aTHX_ newHV(), status, "Apache::Cookie::set_attr",
  -                               "Apache::Cookie::Error");
  -            XSRETURN_IV(status);
  +            if (GIMME_V == G_VOID) {
  +                APREQ_XS_THROW_ERROR(cookie, status, "Apache::Cookie::set_attr",
  +                                     "Apache::Cookie::Error");
  +                XSRETURN_EMPTY;
  +            }
  +            else
  +                XSRETURN_IV(status);
           }
       }
       XSRETURN_IV(status);
  
  
  
  1.19      +4 -1      httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Cookie_pm
  
  Index: Cookie_pm
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Cookie_pm,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Cookie_pm	6 Jul 2004 18:26:48 -0000	1.18
  +++ Cookie_pm	8 Jul 2004 19:55:57 -0000	1.19
  @@ -16,7 +16,10 @@
   }
   
   package Apache::Cookie::Error;
  -push our(@ISA), "APR::Error";
  +push our(@ISA), qw/APR::Error Apache::Cookie/;
  +
  +package Apache::Cookie::Jar::Error;
  +push our(@ISA), qw/APR::Error Apache::Cookie::Jar/;
   
   package Apache::Cookie;
   
  
  
  
  1.43      +43 -40    httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Apache__Request.h
  
  Index: Apache__Request.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Apache__Request.h,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- Apache__Request.h	7 Jul 2004 23:53:01 -0000	1.42
  +++ Apache__Request.h	8 Jul 2004 19:55:57 -0000	1.43
  @@ -19,6 +19,7 @@
   #define READ_BLOCK_SIZE (1024 * 256)
   #define PARAM_TABLE   "Apache::Request::Table"
   
  +
   #define apreq_xs_request_error_check do {                               \
       int n = PL_stack_sp - (PL_stack_base + ax - 1);                     \
       apreq_request_t *req;                                               \
  @@ -30,7 +31,7 @@
           if (n == 1 && items == 2)                                       \
               break;                                                      \
       default:                                                            \
  -        req = (apreq_request_t *)SvIVX(sv);                             \
  +        req = (apreq_request_t *)SvIVX(obj);                            \
           s = req->args_status;                                           \
           if (s == APR_SUCCESS && req->parser)                            \
               s = apreq_parse_request(req, NULL);                         \
  @@ -39,13 +40,13 @@
           case APR_SUCCESS:                                               \
               break;                                                      \
           default:                                                        \
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Request::param",  \
  -                           "Apache::Request::Error");                   \
  +            APREQ_XS_THROW_ERROR(request, s, "Apache::Request::param",  \
  +                                 "Apache::Request::Error");             \
          }                                                                \
       }                                                                   \
   } while (0)
   
  -#define apreq_xs_args_error_check do {                                  \
  +#define apreq_xs_request_args_error_check do {                          \
       int n = PL_stack_sp - (PL_stack_base + ax - 1);                     \
       apreq_request_t *req;                                               \
       apr_status_t s;                                                     \
  @@ -56,15 +57,15 @@
           if (n == 1 && items == 2)                                       \
               break;                                                      \
       default:                                                            \
  -        req = (apreq_request_t *)SvIVX(sv);                             \
  +        req = (apreq_request_t *)SvIVX(obj);                            \
           s = req->args_status;                                           \
           if (s != APR_SUCCESS)                                           \
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Request::args",   \
  -                           "Apache::Request::Error");                   \
  +            APREQ_XS_THROW_ERROR(request, s, "Apache::Request::args",   \
  +                                 "Apache::Request::Error");             \
       }                                                                   \
  -} while (0)                                                             \
  +} while (0)
   
  -#define apreq_xs_body_error_check   do {                                \
  +#define apreq_xs_request_body_error_check          do {                 \
       int n = PL_stack_sp - (PL_stack_base + ax - 1);                     \
       apreq_request_t *req;                                               \
       apr_status_t s;                                                     \
  @@ -75,7 +76,7 @@
           if (n == 1 && items == 2)                                       \
               break;                                                      \
       default:                                                            \
  -        req = (apreq_request_t *)SvIVX(sv);                             \
  +        req = (apreq_request_t *)SvIVX(obj);                            \
           if (req->parser == NULL)                                        \
              break;                                                       \
           switch (s = apreq_parse_request(req,NULL)) {                    \
  @@ -83,8 +84,8 @@
           case APR_SUCCESS:                                               \
               break;                                                      \
           default:                                                        \
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Request::body",   \
  -                           "Apache::Request::Error");                   \
  +            APREQ_XS_THROW_ERROR(request, s, "Apache::Request::body",   \
  +                                 "Apache::Request::Error");             \
           }                                                               \
       }                                                                   \
   } while (0)
  @@ -109,32 +110,32 @@
       if (req->body)                                                      \
           apr_table_do(apreq_xs_do(request), d, req->body, key, NULL);    \
   } while (0)
  -#define apreq_xs_args_push(sv,d,k) apreq_xs_push(args,sv,d,k)
  -#define apreq_xs_body_push(sv,d,k) apreq_xs_push(body,sv,d,k)
  +#define apreq_xs_request_args_push(sv,d,k) apreq_xs_push(request_args,sv,d,k)
  +#define apreq_xs_request_body_push(sv,d,k) apreq_xs_push(request_body,sv,d,k)
   #define apreq_xs_table_push(sv,d,k) apreq_xs_push(table,sv,d,k)
   
   #define apreq_xs_request_sv2table(sv) apreq_params(apreq_env_pool(env), \
                                           (apreq_request_t *)SvIVX(sv))
  -#define apreq_xs_args_sv2table(sv)  ((apreq_request_t *)SvIVX(sv))->args
  -#define apreq_xs_body_sv2table(sv)  ((apreq_request_t *)SvIVX(sv))->body
  +#define apreq_xs_request_args_sv2table(sv)  ((apreq_request_t *)SvIVX(sv))->args
  +#define apreq_xs_request_body_sv2table(sv)  ((apreq_request_t *)SvIVX(sv))->body
   #define apreq_xs_table_sv2table(sv) ((apr_table_t *)SvIVX(sv))
   #define apreq_xs_request_sv2env(sv) ((apreq_request_t *)SvIVX(sv))->env
  -#define apreq_xs_args_sv2env(sv)    ((apreq_request_t *)SvIVX(sv))->env
  -#define apreq_xs_body_sv2env(sv)    ((apreq_request_t *)SvIVX(sv))->env
  +#define apreq_xs_request_args_sv2env(sv)    ((apreq_request_t *)SvIVX(sv))->env
  +#define apreq_xs_request_body_sv2env(sv)    ((apreq_request_t *)SvIVX(sv))->env
   #define apreq_xs_table_sv2env(sv)   apreq_xs_sv2env(sv)
   
   #define apreq_xs_request_param(sv,k) apreq_param((apreq_request_t *)SvIVX(sv),k)
  -#define apreq_xs_args_param(sv,k) \
  -                     S2P(apr_table_get(apreq_xs_args_sv2table(sv),k))
  -#define apreq_xs_body_param(sv,k) \
  -                     S2P(apr_table_get(apreq_xs_body_sv2table(sv),k))
  +#define apreq_xs_request_args_param(sv,k) \
  +                     S2P(apr_table_get(apreq_xs_request_args_sv2table(sv),k))
  +#define apreq_xs_request_body_param(sv,k) \
  +                     S2P(apr_table_get(apreq_xs_request_body_sv2table(sv),k))
   #define apreq_xs_table_param(sv,k) \
                        S2P(apr_table_get(apreq_xs_table_sv2table(sv),k))
   
  -APREQ_XS_DEFINE_TABLE_GET(request, PARAM_TABLE, param, NULL, 1);
  -APREQ_XS_DEFINE_TABLE_GET(args,    PARAM_TABLE, param, NULL, 1);
  -APREQ_XS_DEFINE_TABLE_GET(body,    PARAM_TABLE, param, NULL, 1);
  -APREQ_XS_DEFINE_TABLE_GET(table,   PARAM_TABLE, param, NULL, 1);
  +APREQ_XS_DEFINE_TABLE_GET(request,         PARAM_TABLE, param, NULL, 1);
  +APREQ_XS_DEFINE_TABLE_GET(request_args,    PARAM_TABLE, param, NULL, 1);
  +APREQ_XS_DEFINE_TABLE_GET(request_body,    PARAM_TABLE, param, NULL, 1);
  +APREQ_XS_DEFINE_TABLE_GET(table,           PARAM_TABLE, param, NULL, 1);
   
   APREQ_XS_DEFINE_POOL(request);
   APREQ_XS_DEFINE_POOL(table);
  @@ -231,15 +232,14 @@
           }
   
           s = apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
  -        if (s != APR_SUCCESS)
  -            return s;
  -
  +        if (s != APR_SUCCESS) {
  +            apreq_log(APREQ_WARN s, env, "Can't read bucket, skipping it.");
  +            s = APR_SUCCESS;
  +            continue;
  +        }
           sv_setpvn(ctx->bucket_data, data, (STRLEN)len);
  -
           s = eval_upload_hook(aTHX_ param, env, ctx);
   
  -        apreq_log(APREQ_DEBUG 0, env, "ran upload hook");
  -
           if (s != APR_SUCCESS)
               return s;
   
  @@ -259,15 +259,16 @@
       apr_pool_t *pool;
       apreq_request_t *req;
       apreq_hook_t *upload_hook = NULL;
  -    SV *sv;
  +    SV *sv, *obj;
       SV *hook_data = NULL;
       int j;
   
       if (items % 2 != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "usage: $req->config(%settings)");
   
  -    sv = apreq_xs_find_obj(aTHX_ ST(0), "request");
  -    req = (apreq_request_t *)SvIVX(sv);
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "request");
  +    req = (apreq_request_t *)SvIVX(obj);
       pool = apreq_env_pool(req->env);
   
       for (j = 1; j + 1 < items; j += 2) {
  @@ -283,7 +284,7 @@
           }
           else if (strcasecmp(attr, "TEMP_DIR") == 0) {
               const char *val = SvPV_nolen(ST(j+1));
  -            apreq_env_temp_dir(req->env, val);
  +             apreq_env_temp_dir(req->env, val);
           }
           else if (strcasecmp(attr, "MAX_BRIGADE") == 0) {
               const char *val = SvPV_nolen(ST(j+1));
  @@ -338,7 +339,7 @@
               ctx->hook_data = NULL;
               ctx->hook = newSVsv(ST(j+1));
               ctx->bucket_data = newSV(8000);
  -            ctx->parent = SvREFCNT_inc(sv);
  +            ctx->parent = SvREFCNT_inc(obj);
   #ifdef USE_ITHREADS
               ctx->perl = aTHX;
   #endif
  @@ -370,10 +371,13 @@
       dXSARGS;
       apreq_request_t *req;
       apr_status_t s;
  +    SV *sv, *obj;
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "usage: $req->parse()");
   
  -    req = apreq_xs_sv2(request,ST(0));
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "request");
  +    req = (apreq_request_t *)SvIVX(obj);
   
       do s = apreq_env_read(req->env, APR_BLOCK_READ, READ_BLOCK_SIZE);
       while (s == APR_INCOMPLETE);
  @@ -382,6 +386,5 @@
           XSRETURN_IV(s);
   
       if (s != APR_SUCCESS)
  -        apreq_xs_croak(aTHX_ newHV(), s, "Apache::Request::parse", 
  -                       "Apache::Request::Error");
  +        APREQ_XS_THROW_ERROR(request, s, "Apache::Request::parse", "Apache::Request::Error");
   }
  
  
  
  1.18      +2 -2      httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pm
  
  Index: Request_pm
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pm,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Request_pm	6 Jul 2004 18:26:48 -0000	1.17
  +++ Request_pm	8 Jul 2004 19:55:57 -0000	1.18
  @@ -14,7 +14,7 @@
   
   
   package Apache::Request::Error;
  -push our(@ISA), "APR::Error";
  +push our(@ISA), qw/APR::Error Apache::Request/;
   
   package Apache::Request;
   push our(@ISA), __PACKAGE__ -> env;
  @@ -34,7 +34,7 @@
   *parms = *param;
   *params = *param;
   
  -sub status {
  +sub param_status {
      my $req = shift;
      return wantarray ? ($req->args_status, $req->body_status)
                       : $req->args_status || $req->body_status;
  
  
  
  1.18      +73 -16    httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pod
  
  Index: Request_pod
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pod,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Request_pod	8 Jul 2004 00:33:53 -0000	1.17
  +++ Request_pod	8 Jul 2004 19:55:57 -0000	1.18
  @@ -63,12 +63,13 @@
    my $upload = $req->upload('file');
    $upload->link("/home/user/myfile") || warn "link failed: $!";
   
  -For more details on C<link>, see the L<Apache:Upload> manpage.
  +For more details on C<link>, see the L<Apache::Upload> manpage.
   
   =item C<HOOK_DATA>
   
  -Extra configuration info passed to an upload hook.
  -See the description for the next item, C<UPLOAD_HOOK>.
  +Extra configuration info passed as the fourth argument 
  +to an upload hook.  See the description for the next item, 
  +C<UPLOAD_HOOK>.
   
   =item C<UPLOAD_HOOK>
   
  @@ -89,6 +90,7 @@
   
   =back
   
  +
   =head2 C<instance($r)> [DEPRECATED]
   
   The default (and only) behavior of I<Apache::Request> is to intelligently
  @@ -117,17 +119,26 @@
       # all (args + body) params
       my $table = $req->param;
   
  -In list context, or when invoked with a single argument, 
  -C<param> always induces libapreq2 to read and parse all 
  -remaining data in the request body.  However, C<scalar $req->param("foo")> 
  -is lazy: libapreq2 will only read=parse more data if
  +In list context, or when invoked with no arguments as 
  +C<$req-&gt;param()>, C<param> always induces libapreq2 
  +to read and parse all remaining data in the request body.
  +However, C<scalar $req->param("foo")> is lazy: libapreq2 
  +will only read and parse more data if
   
       1) no "foo" param appears in the query string arguments, AND
       2) no "foo" param appears in the previously parsed POST data.
   
   In this circumstance libapreq2 will read and parse additional
   blocks of the incoming request body until it has found the
  -the "foo" param.
  +the "foo" param or parsing is completed.
  +
  +Note: modifications to the C<scalar $req-&gt;param()> table only
  +affect the returned table object (the underlying C apr_table_t is 
  +generated by apreq_params()).  They do not affect the actual 
  +request data, and will not be seen by other libapreq2 applications.
  +
  +
  +XXX EXCEPTIONS XXX
   
   
   =head2 C<parms>, C<params> [DEPRECATED]
  @@ -137,6 +148,7 @@
   provided in this release for backwards compatibility,
   however they may be removed from a future release.
   
  +
   =head2 C<args([$name])>
   
   Returns an I<Apache::Request::Table> object containing the query-string 
  @@ -149,6 +161,13 @@
   
      my $arg = $req->args($name);
   
  +More generally, C<args()> follows the same pattern as C<param()>
  +with respect to its return values and argument list.  The main difference
  +is that modifications to the C<scalar $req-&gt;args()> table affect
  +the underlying apr_table_t attribute in apreq_request_t, so their impact
  +will be noticed by all libapreq2 applications during this request.
  +
  +
   =head2 C<body([$name])>
   
   Returns an I<Apache::Request::Table> object containing the POST data 
  @@ -161,6 +180,12 @@
   
      my $param = $req->body($name);
   
  +More generally, C<body()> follows the same pattern as C<param()>
  +with respect to its return values and argument list.  The main difference
  +is that modifications to the C<scalar $req-&gt;body()> table affect
  +the underlying apr_table_t attribute in apreq_request_t, so their impact 
  +will be noticed by all libapreq2 applications during this request.
  +
   
   =head2 C<upload([$name])> (requires Apache::Upload)
   
  @@ -171,7 +196,13 @@
   An optional name parameter can be passed to return the I<Apache::Upload>
   object associated with the given name:
   
  -    my $upload = $apr->upload($name);
  +    my $upload = $req->upload($name);
  +
  +Note: modifications to the C<scalar $req-&gt;upload()> table only
  +affect the returned table object (the underlying C apr_table_t is 
  +generated by apreq_uploads()).  They do not affect the actual request 
  +data, and will not be seen by other libapreq2 applications.
  +
   
   =head2 C<args_status()>
   
  @@ -184,7 +215,7 @@
   APR_SUCCESS when parser has completed, APR_INCOMPLETE if parser
   has more data to parse, error otherwise.
   
  -=head2 C<status()>
  +=head2 C<param_status()>
   
   In scalar context, this returns C<args_status> if there was
   an error during the query-string parse, otherwise this returns
  @@ -208,18 +239,44 @@
   	}
   
   
  -=head1 API CHANGES from 1.X to 2.X
  +=head1 PORTING from 1.X to 2.X
  +
  +This is the complete list of changes to existing methods 
  +from Apache::Request 1.X.  These issues need to be 
  +addressed when porting 1.X apps to the new 2.X API.
   
   =over 4
   
  -=item You must use the two-argument form of $req->args or $req->body to assign 
  -      parameters to the request.  You may no longer use
  +=item Apache::Upload is now a separate module.  Applications
  +      requiring the upload API must C<use Apache::Upload> in 2.X.
  +      This is easily addressed by preloading the modules during 
  +      server startup.
  +
  +=item You must use the C<Apache::Request::Table> API via 
  +      C<scalar $req-&gt;args> or C<scalar $req-&gt;body> 
  +      to assign new parameters to the request.  You may 
  +      no longer use the two-argument method calls; e.g.
  +
  +        $req->param("foo" => "bar"); # NO: usage error in 2.X
  +        $req->args->{foo} = "bar";   # OK: assign to args table
  +        $req->body->add(foo => "bar");  # OK: add to body table
  +
  +        $req->param->add(foo => "bar"); # NO: this is an expensive noop, because
  +                                        # the param table is generated
  +                                        # by overlaying $req->args and $req->body.
  +
  +        my $params = $req->param;
  +        $params->set(foo => "bar"); # OK: sets "foo" entry in $params, which is a
local
  +                                    # (args + body) table. Neither $req->args, $req->body,
  +                                    # nor future calls to $req->param, are affected
by 
  +                                    # mods to $params.
   
  -        $req->param("foo" => "bar"); # invalid in 2.X
   
  -=item C<instance> is now identical to C<new>.
  +=item C<instance()> is now identical to C<new()>, and is now deprecated.  It

  +      may be removed from a future 2.X release.
   
  -=item C<param> includes the functionality of C<parms> and C<params>.
  +=item C<param> includes the functionality of C<parms()> and C<params()>,
so they
  +      are now deprecated and may be removed from a future 2.X release.
   
   =back
   
  
  
  
  1.19      +98 -60    httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h
  
  Index: Apache__Upload.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Apache__Upload.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Apache__Upload.h	7 Jul 2004 23:57:07 -0000	1.18
  +++ Apache__Upload.h	8 Jul 2004 19:55:57 -0000	1.19
  @@ -22,7 +22,7 @@
   /* XXX modperl_* dependency for T_HASHOBJ support */
   #include "modperl_common_util.h"
   
  -#define apreq_xs_upload_error_check   do {                              \
  +#define apreq_xs_request_upload_error_check   do {                      \
       int n = PL_stack_sp - (PL_stack_base + ax - 1);                     \
       apreq_request_t *req;                                               \
       apr_status_t s;                                                     \
  @@ -33,7 +33,7 @@
           if (n == 1 && items == 2)                                       \
               break;                                                      \
       default:                                                            \
  -        req = (apreq_request_t *)SvIVX(sv);                             \
  +        req = (apreq_request_t *)SvIVX(obj);                            \
           if (req->parser == NULL)                                        \
              break;                                                       \
           switch (s = apreq_parse_request(req,NULL)) {                    \
  @@ -41,22 +41,22 @@
           case APR_SUCCESS:                                               \
               break;                                                      \
           default:                                                        \
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Request::upload", \
  -                           "Apache::Request::Error");                   \
  +            APREQ_XS_THROW_ERROR(request, s, "Apache::Request::upload", \
  +                                 "Apache::Request::Error");             \
           }                                                               \
       }                                                                   \
   } while (0)
   
   
  -#define apreq_xs_upload_table_error_check 
  +#define apreq_xs_upload_table_error_check
   
   
   #define READ_BLOCK_SIZE (1024 * 256)
   #define S2P(s) (s ? apreq_value_to_param(apreq_strtoval(s)) : NULL)
  -#define apreq_xs_upload_do      (items==1 ? apreq_xs_upload_table_keys  \
  -                                : apreq_xs_upload_table_values)
  +#define apreq_xs_upload_do      (items==1 ? apreq_xs_request_upload_table_keys  \
  +                                : apreq_xs_request_upload_table_values)
   
  -#define apreq_xs_upload_push(sv,d,key) do {                             \
  +#define apreq_xs_request_upload_push(sv,d,key) do {                             \
       apreq_request_t *req = (apreq_request_t *)SvIVX(sv);                \
       apr_status_t s;                                                     \
       do s = apreq_env_read(req->env, APR_BLOCK_READ, READ_BLOCK_SIZE);   \
  @@ -66,12 +66,12 @@
   } while (0)
   
   #define apreq_xs_upload_table_push(sv,d,k) apreq_xs_push(upload_table,sv,d,k)
  -#define apreq_xs_upload_sv2table(sv) apreq_uploads(apreq_env_pool(env), \
  +#define apreq_xs_request_upload_sv2table(sv) apreq_uploads(apreq_env_pool(env), \
                                                   (apreq_request_t *)SvIVX(sv))
   #define apreq_xs_upload_table_sv2table(sv) ((apr_table_t *)SvIVX(sv))
  -#define apreq_xs_upload_sv2env(sv)         ((apreq_request_t *)SvIVX(sv))->env
  +#define apreq_xs_request_upload_sv2env(sv)         ((apreq_request_t *)SvIVX(sv))->env
   #define apreq_xs_upload_table_sv2env(sv)   apreq_xs_sv2env(sv)
  -#define apreq_xs_upload_param(sv,k) apreq_upload((apreq_request_t *)SvIVX(sv),k)
  +#define apreq_xs_request_upload_param(sv,k) apreq_upload((apreq_request_t *)SvIVX(sv),k)
   #define apreq_xs_upload_table_param(sv,k) \
                           S2P(apr_table_get(apreq_xs_upload_table_sv2table(sv),k))
   
  @@ -81,8 +81,8 @@
   #define apreq_xs_param2sv(ptr,class,parent)  apreq_xs_2sv(ptr,class,parent)
   #define apreq_xs_sv2param(sv) ((apreq_param_t *)SvIVX(SvRV(sv)))
   
  -static int apreq_xs_upload_table_keys(void *data, const char *key,
  -                                      const char *val)
  +static int apreq_xs_request_upload_table_keys(void *data, const char *key,
  +                                              const char *val)
   {
   #ifdef USE_ITHREADS
       struct apreq_xs_do_arg *d = (struct apreq_xs_do_arg *)data;
  @@ -109,7 +109,7 @@
   #define UPLOAD_TABLE  "Apache::Upload::Table"
   #define UPLOAD_PKG    "Apache::Upload"
   
  -APREQ_XS_DEFINE_TABLE_GET(upload, UPLOAD_TABLE, param, UPLOAD_PKG, RETVAL->bb);
  +APREQ_XS_DEFINE_TABLE_GET(request_upload, UPLOAD_TABLE, param, UPLOAD_PKG, RETVAL->bb);
   APREQ_XS_DEFINE_TABLE_GET(upload_table, UPLOAD_TABLE, param, UPLOAD_PKG, 1);
   APREQ_XS_DEFINE_ENV(upload);
   
  @@ -129,15 +129,19 @@
       apr_bucket_brigade *bb;
       apr_file_t *f;
       apr_status_t s = APR_SUCCESS;
  +    SV *sv, *obj;
   
       if (items != 2 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $upload->link($name)");
   
  -    if (!(mg = mg_find(SvRV(ST(0)), PERL_MAGIC_ext)))
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "upload");
  +
  +    if (!(mg = mg_find(obj, PERL_MAGIC_ext)))
           Perl_croak(aTHX_ "$upload->link($name): can't find env");
   
       env = mg->mg_ptr;
  -    bb = apreq_xs_sv2param(ST(0))->bb;
  +    bb = ((apreq_param_t *)SvIVX(obj))->bb;
       name = SvPV_nolen(ST(1));
   
       f = apreq_brigade_spoolfile(bb);
  @@ -151,10 +155,8 @@
           if (s == APR_SUCCESS) {
               s = apreq_brigade_fwrite(f, &len, bb);
               if (s != APR_SUCCESS) {
  -                if (GIMME_V != G_VOID)
  -                    XSRETURN_UNDEF;
  -                apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::link", 
  -                               "Apache::Upload::Error");
  +                apreq_log(APREQ_ERROR s, env, "apreq_brigade_fwrite failed");
  +                goto link_error;
               }
               XSRETURN_YES;
           }
  @@ -162,9 +164,10 @@
               goto link_error;
       }
       s = apr_file_name_get(&fname, f);
  -    if (s != APR_SUCCESS)
  +    if (s != APR_SUCCESS) {
  +        apreq_log(APREQ_ERROR s, env, "apr_file_name_get failed");
           goto link_error;
  -
  +    }
       if (PerlLIO_link(fname, name) >= 0)
           XSRETURN_YES;
       else {
  @@ -173,15 +176,14 @@
                             apreq_env_pool(env));
           if (s == APR_SUCCESS)
               XSRETURN_YES;
  +        else
  +            apreq_log(APREQ_ERROR s, env, "apr_file_copy failed");
       }
   
    link_error:
  -    if (GIMME_V != G_VOID)
  -        XSRETURN_UNDEF;
  -
  -    apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::link", 
  -                   "APR::Error");
  -
  +    APREQ_XS_THROW_ERROR(upload, s, "Apache::Upload::link", 
  +                         "Apache::Upload::Error");
  +    XSRETURN_UNDEF;
   }
   
   
  @@ -194,22 +196,28 @@
       apr_off_t len_off;
       apr_size_t len_size;
       apr_bucket_brigade *bb;
  +    SV *sv, *obj;
       apr_status_t s;
   
       if (items != 2 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $upload->slurp($data)");
   
  -    if (!(mg = mg_find(SvRV(ST(0)), PERL_MAGIC_ext)))
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "upload");
  +
  +    if (!(mg = mg_find(obj, PERL_MAGIC_ext)))
           Perl_croak(aTHX_ "$upload->slurp($data): can't find env");
   
       env = mg->mg_ptr;
  -    bb = apreq_xs_sv2param(ST(0))->bb;
  +    bb = ((apreq_param_t *)SvIVX(obj))->bb;
   
       s = apr_brigade_length(bb, 0, &len_off);
  -    if (s != APR_SUCCESS)
  -        apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::slurp", 
  -                       "Apache::Upload::Error");
  -
  +    if (s != APR_SUCCESS) {
  +        apreq_log(APREQ_ERROR s, env, "apr_brigade_length failed");
  +        APREQ_XS_THROW_ERROR(upload, s, "Apache::Upload::slurp", 
  +                             "Apache::Upload::Error");
  +        XSRETURN_UNDEF;
  +    }
   
       len_size = len_off; /* max_body setting will be low enough to prevent
                            * overflow, but even if it wasn't the code below will
  @@ -222,10 +230,12 @@
       SvCUR_set(ST(1), len_size);
       SvPOK_only(ST(1));
       s = apr_brigade_flatten(bb, data, &len_size);
  -    if (s != APR_SUCCESS)
  -        apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::slurp", 
  -                       "APR::Error");
  -
  +    if (s != APR_SUCCESS) {
  +        apreq_log(APREQ_ERROR s, env, "apr_brigade_flatten failed");
  +        APREQ_XS_THROW_ERROR(upload, s, "Apache::Upload::slurp", 
  +                             "Apache::Upload::Error");
  +        XSRETURN_UNDEF;
  +    }
       XSRETURN_IV(len_size);
   }
   
  @@ -237,21 +247,28 @@
       apr_bucket_brigade *bb;
       apr_status_t s;
       apr_off_t len;
  +    SV *sv, *obj;
   
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $upload->size()");
   
  -    if (!(mg = mg_find(SvRV(ST(0)), PERL_MAGIC_ext)))
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "upload");
  +
  +    if (!(mg = mg_find(obj, PERL_MAGIC_ext)))
           Perl_croak(aTHX_ "$upload->size(): can't find env");
   
       env = mg->mg_ptr;
  -    bb = apreq_xs_sv2param(ST(0))->bb;
  +    bb = ((apreq_param_t *)SvIVX(obj))->bb;
   
       s = apr_brigade_length(bb, 1, &len);
   
  -    if (s != APR_SUCCESS)
  -        apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::size", 
  -                       "APR::Error");
  +    if (s != APR_SUCCESS) {
  +        apreq_log(APREQ_ERROR s, env, "apr_brigade_length failed");
  +        APREQ_XS_THROW_ERROR(upload, s, "Apache::Upload::size", 
  +                             "Apache::Upload::Error");
  +        XSRETURN_UNDEF;
  +    }
   
       XSRETURN_IV((IV)len);
   }
  @@ -262,11 +279,15 @@
       apreq_param_t *upload;
       const char *ct, *sc;
       STRLEN len;
  +    SV *sv, *obj;
   
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $upload->type()");
   
  -    upload = apreq_xs_sv2param(ST(0));
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "upload");
  +
  +    upload = (apreq_param_t *)SvIVX(obj);
       ct = apr_table_get(upload->info, "Content-Type");
       if (ct == NULL)
           Perl_croak(aTHX_ "$upload->type: can't find Content-Type header");
  @@ -304,7 +325,7 @@
       apr_bucket_brigade *bb;
       apr_bucket *e, *end;
       IV want = -1, offset = 0;
  -    SV *sv;
  +    SV *sv, *obj;
       apr_status_t s;
       char *buf;
   
  @@ -315,8 +336,11 @@
           want = SvIV(ST(2));
       case 2:
           sv = ST(1);
  -        bb = (apr_bucket_brigade *)SvIVX(SvRV(ST(0)));
  -        break;
  +        if (SvROK(ST(0))) {
  +            obj = SvRV(ST(0));
  +            bb = (apr_bucket_brigade *)SvIVX(obj);
  +            break;
  +        }
       default:
           Perl_croak(aTHX_ "Usage: $bb->READ($buf,$len,$off)");
       }
  @@ -389,13 +413,14 @@
       dXSARGS;
       apr_bucket_brigade *bb;
       apr_bucket *e;
  -    SV *sv;
  +    SV *sv, *obj;
       apr_status_t s;
   
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $bb->READLINE");
   
  -    bb = (apr_bucket_brigade *)SvIVX(SvRV(ST(0)));
  +    obj = SvRV(ST(0));
  +    bb = (apr_bucket_brigade *)SvIVX(obj);
   
       if (APR_BRIGADE_EMPTY(bb))
           XSRETURN(0);
  @@ -453,15 +478,19 @@
       apr_status_t s;
       apr_file_t *file;
       const char *path;
  +    SV *sv, *obj;
   
       if (items != 1 || !SvROK(ST(0)))
           Perl_croak(aTHX_ "Usage: $upload->tempname()");
   
  -    if (!(mg = mg_find(SvRV(ST(0)), PERL_MAGIC_ext)))
  +    sv = ST(0);
  +    obj = apreq_xs_find_obj(aTHX_ sv, "upload");
  +
  +    if (!(mg = mg_find(obj, PERL_MAGIC_ext)))
           Perl_croak(aTHX_ "$upload->tempname(): can't find env");
   
       env = mg->mg_ptr;
  -    bb = apreq_xs_sv2param(ST(0))->bb;
  +    bb = ((apreq_param_t *)SvIVX(obj))->bb;
       file = apreq_brigade_spoolfile(bb);
   
       if (file == NULL) {
  @@ -471,25 +500,34 @@
   
           s = apreq_file_mktemp(&file, apreq_env_pool(env), tmpdir);
   
  -        if (s != APR_SUCCESS)
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::tempname", 
  -                           "Apache::Upload::Error");
  +        if (s != APR_SUCCESS) {
  +            apreq_log(APREQ_ERROR s, env, "apreq_file_mktemp failed");
  +            goto tempname_error;
  +        }
   
           s = apreq_brigade_fwrite(file, &len, bb);
   
  -        if (s != APR_SUCCESS)
  -            apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::tempname", 
  -                           "Apache::Upload::Error");
  +        if (s != APR_SUCCESS) {
  +            apreq_log(APREQ_ERROR s, env, "apreq_brigade_fwrite failed");
  +            goto tempname_error;
  +        }
   
           last = apr_bucket_file_create(file, len, 0, bb->p, bb->bucket_alloc);
           APR_BRIGADE_INSERT_TAIL(bb, last);
       }
   
       s = apr_file_name_get(&path, file);
  -    if (s != APR_SUCCESS)
  -        apreq_xs_croak(aTHX_ newHV(), s, "Apache::Upload::tempname", 
  -                       "APR::Error");
  +    if (s != APR_SUCCESS) {
  +        apreq_log(APREQ_ERROR s, env, "apr_file_name_get failed");
  +        goto tempname_error;
  +    }
   
       ST(0) = sv_2mortal(newSVpvn(path, strlen(path)));
       XSRETURN(1);
  +
  + tempname_error:
  +    APREQ_XS_THROW_ERROR(upload, s, "Apache::Upload::tempname", 
  +                         "Apache::Upload::Error");
  +    XSRETURN_UNDEF;
  +
   }
  
  
  
  1.10      +1 -1      httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm
  
  Index: Upload_pm
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Upload_pm	6 Jul 2004 18:26:48 -0000	1.9
  +++ Upload_pm	8 Jul 2004 19:55:57 -0000	1.10
  @@ -21,7 +21,7 @@
   
   
   package Apache::Upload::Error;
  -push our(@ISA), "APR::Error";
  +push our(@ISA), qw/APR::Error Apache::Upload/;
   
   package Apache::Upload::Table;
   push our(@ISA), "APR::Table";
  
  
  
  1.29      +3 -3      httpd-apreq-2/glue/perl/xsbuilder/maps/apreq_functions.map
  
  Index: apreq_functions.map
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/glue/perl/xsbuilder/maps/apreq_functions.map,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- apreq_functions.map	6 Jul 2004 18:26:49 -0000	1.28
  +++ apreq_functions.map	8 Jul 2004 19:55:57 -0000	1.29
  @@ -6,8 +6,8 @@
   
   MODULE=Apache::Request PACKAGE=Apache::Request
    DEFINE_env     | apreq_xs_request_env |
  - DEFINE_args    | apreq_xs_args_get |
  - DEFINE_body    | apreq_xs_body_get |
  + DEFINE_args    | apreq_xs_request_args_get |
  + DEFINE_body    | apreq_xs_request_body_get |
    DEFINE_config  | apreq_xs_request_config |
    DEFINE_parse   | apreq_xs_request_parse |
    DEFINE_pool    | apreq_xs_request_pool |
  @@ -46,7 +46,7 @@
    DEFINE_new     | apreq_xs_table_request_make |
   
   MODULE=Apache::Upload PACKAGE=Apache::Request PREFIX=Apache__Request_
  - DEFINE_upload  | apreq_xs_upload_get |
  + DEFINE_upload  | apreq_xs_request_upload_get |
   
   MODULE=Apache::Upload PACKAGE=Apache::Upload::Brigade PREFIX=Apache__Upload__Brigade_
    DEFINE_new | apreq_xs_upload_brigade_copy |
  
  
  

Mime
View raw message