geoff       2003/08/19 12:30:33

  Modified:    xs/maps  apr_functions.map
               xs/tables/current/Apache FunctionTable.pm
               t/response/TestAPR table.pm
               src/modules/perl modperl_apache_compat.c
                        modperl_apache_compat.h
  Log:
  add ap_table_compress() to APR::Table
  Submitted by: geoff
  Reviewed by:  stas
  
  Revision  Changes    Path
  1.53      +1 -0      modperl-2.0/xs/maps/apr_functions.map
  
  Index: apr_functions.map
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/maps/apr_functions.map,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- apr_functions.map 15 Apr 2003 08:39:52 -0000      1.52
  +++ apr_functions.map 19 Aug 2003 19:30:33 -0000      1.53
  @@ -236,6 +236,7 @@
    apr_table_make
    apr_table_overlap
    apr_table_overlay | | base, overlay, p
  + apr_table_compress
    apr_table_add
   -apr_table_addn
    apr_table_do | mpxs_ | ...
  
  
  
  1.44      +14 -0     modperl-2.0/xs/tables/current/Apache/FunctionTable.pm
  
  Index: FunctionTable.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/tables/current/Apache/FunctionTable.pm,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- FunctionTable.pm  15 Apr 2003 03:47:29 -0000      1.43
  +++ FunctionTable.pm  19 Aug 2003 19:30:33 -0000      1.44
  @@ -12372,6 +12372,20 @@
     },
     {
       'return_type' => 'void',
  +    'name' => 'apr_table_compress',
  +    'args' => [
  +      {
  +        'type' => 'apr_table_t *',
  +        'name' => 'a'
  +      },
  +      {
  +        'type' => 'unsigned',
  +        'name' => 'flags'
  +      }
  +    ]
  +  },
  +  {
  +    'return_type' => 'void',
       'name' => 'apr_table_set',
       'args' => [
         {
  
  
  
  1.6       +33 -1     modperl-2.0/t/response/TestAPR/table.pm
  
  Index: table.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/response/TestAPR/table.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- table.pm  11 Apr 2002 11:08:44 -0000      1.5
  +++ table.pm  19 Aug 2003 19:30:33 -0000      1.6
  @@ -8,14 +8,20 @@
   use APR::Table ();
   
   use Apache::Const -compile => 'OK';
  +use APR::Const -compile => 'OVERLAP_TABLES_MERGE';
   
   my $filter_count;
   my $TABLE_SIZE = 20;
   
  +use constant HAVE_APACHE_2_0_47 => have_min_apache_version('2.0.47');
  +
   sub handler {
       my $r = shift;
   
  -    plan $r, tests => 17;
  +    my $tests = 19;
  +    $tests += 2 if HAVE_APACHE_2_0_47;
  +                                                                                    
                
  +    plan $r, tests => $tests;
   
       my $table = APR::Table::make($r->pool, $TABLE_SIZE);
   
  @@ -96,6 +102,32 @@
               my_filter($key, $table->{$key});
           }
           ok $filter_count == $TABLE_SIZE;
  +    }
  +
  +    # overlay and compress routines
  +    my $base = APR::Table::make($r->pool, $TABLE_SIZE);
  +    my $add = APR::Table::make($r->pool, $TABLE_SIZE);
  +
  +    $base->set(foo => 'one');
  +    $base->add(foo => 'two');
  +
  +    $add->add(foo => 'three');
  +    $add->add(bar => 'beer');
  +
  +    my $overlay = $base->overlay($add, $r->pool);
  +
  +    my @foo = $overlay->get('foo');
  +    my @bar = $overlay->get('bar');
  +
  +    ok @foo == 3;
  +    ok $bar[0] eq 'beer';
  +
  +    if (HAVE_APACHE_2_0_47) {
  +        $overlay->compress(APR::OVERLAP_TABLES_MERGE);
  +
  +        # XXX is insertion order guaranteed on all platforms?
  +        ok $overlay->get('foo') =~ m!(\w+, ){2}\w+!;
  +        ok $overlay->get('bar') eq 'beer';
       }
   
       Apache::OK;
  
  
  
  1.2       +17 -3     modperl-2.0/src/modules/perl/modperl_apache_compat.c
  
  Index: modperl_apache_compat.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_apache_compat.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- modperl_apache_compat.c   24 Apr 2003 01:51:37 -0000      1.1
  +++ modperl_apache_compat.c   19 Aug 2003 19:30:33 -0000      1.2
  @@ -1,6 +1,6 @@
   #include "mod_perl.h"
   
  -/* back compat adjustements for older Apache versions (2.0.36+) */
  +/* back compat adjustements for older Apache versions */
   
   /* pre-APR_0_9_0 (APACHE_2_0_40) */
   #if APR_MAJOR_VERSION == 0 && APR_MINOR_VERSION == 9 && \
  @@ -9,14 +9,28 @@
   /* added in APACHE_2_0_40/APR_0_9_0 */
   apr_status_t apr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t)
   {
  -    modperl_apr_func_not_implemented(timeout_get, 0.9.0);
  +    modperl_apr_func_not_implemented(apr_sockettimeout_get, 2.0.40, 0.9.0);
       return APR_ENOTIMPL;
   }
   
   apr_status_t apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t)
   {
  -    modperl_apr_func_not_implemented(timeout_set, 0.9.0);
  +    modperl_apr_func_not_implemented(apr_socket_timeout_set, 2.0.40, 0.9.0);
       return APR_ENOTIMPL;
   }
   
   #endif /* pre-APR_0_9_0 (APACHE_2_0_40) */
  +
  +/* pre-APR_0_9_5 (APACHE_2_0_47)
  + * both 2.0.46 and 2.0.47 shipped with 0.9.4 -
  + * we need the one that shipped with 2.0.47,
  +   which is major mmn 20020903, minor mmn 4 */
  +#if ! AP_MODULE_MAGIC_AT_LEAST(20020903,4)
  +
  +/* added in APACHE_2_0_47/APR_0_9_4 */
  +void apr_table_compress(apr_table_t *t, unsigned flags)
  +{
  +    modperl_apr_func_not_implemented(apr_table_compress, 2.0.47, 0.9.4);
  +}
  +
  +#endif /* pre-APR_0_9_5 (APACHE_2_0_47) */
  
  
  
  1.2       +19 -7     modperl-2.0/src/modules/perl/modperl_apache_compat.h
  
  Index: modperl_apache_compat.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_apache_compat.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- modperl_apache_compat.h   24 Apr 2003 01:51:37 -0000      1.1
  +++ modperl_apache_compat.h   19 Aug 2003 19:30:33 -0000      1.2
  @@ -1,7 +1,7 @@
   #ifndef MODPERL_APACHE_COMPAT_H
   #define MODPERL_APACHE_COMPAT_H
   
  -/* back compat adjustements for older Apache versions (2.0.36+) */
  +/* back compat adjustements for older Apache versions */
   
   #if !APR_HAS_THREADS
   typedef unsigned long apr_os_thread_t;
  @@ -29,16 +29,28 @@
   #define apr_socket_opt_get apr_getsocketopt
   #define apr_socket_opt_set apr_setsocketopt
   
  -#define modperl_apr_func_not_implemented(func, ver) \
  -    { \
  -        dTHX; \
  -        Perl_croak(aTHX_ #func "() requires APR version " #ver " or higher"); \
  -    }
  -
   /* added in APACHE_2_0_40/APR_0_9_0 */
   apr_status_t apr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t);
   apr_status_t apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t);
   
   #endif /* pre-APR_0_9_0 (APACHE_2_0_40) */
  +
  +/* pre-APR_0_9_5 (APACHE_2_0_47)
  + * both 2.0.46 and 2.0.47 shipped with 0.9.4 -
  + * we need the one that shipped with 2.0.47,
  +   which is major mmn 20020903, minor mmn 4 */
  +#if ! AP_MODULE_MAGIC_AT_LEAST(20020903,4)
  +
  +/* added in APACHE_2_0_47/APR_0_9_4 */
  +void apr_table_compress(apr_table_t *t, unsigned flags);
  +
  +#endif /* pre-APR_0_9_5 (APACHE_2_0_47) */
  +
  +#define modperl_apr_func_not_implemented(func, httpd_ver, apr_ver) \
  +    { \
  +        dTHX; \
  +        Perl_croak(aTHX_ #func "() requires httpd/" #httpd_ver \
  +                               " and apr/" #apr_ver " or higher"); \
  +    }
   
   #endif /* MODPERL_APACHE_COMPAT_H */
  
  
  

Reply via email to