> So this:
 >
 >     thing = (char*)((ST(1) == &sv_undef) ? NULL : pstrdup(p, SvPV(ST(1),na)))
 >
 > Probably intends to read:
 >
 >     thing = (char*)((SvOK(ST(1))) ? pstrdup(p, SvPV(ST(1),na) : NULL)
 >


cool!  I integrated your new get_set_PVp logic and it worked just fine.  nice work, and
thanks.

below is a set of patches that adds tests for both $r->args(undef); (which uses
get_set_PVp via a one-hop from Perl-land) as well as $r->the_request(undef); (which 
uses
get_set_PVp directly and which worked ok already).  all tests pass for me with current 
CVS
+ bleedperl.

I had to fiddle with some other parts of api.pl/api.t too, since the uri now has a 
query
string in it.  if api.pl isn't the right place for these, let me know.

--Geoff

Index: Changes
===================================================================
RCS file: /home/cvs/modperl/Changes,v
retrieving revision 1.645
diff -u -r1.645 Changes
--- Changes     23 May 2002 04:21:06 -0000      1.645
+++ Changes     29 May 2002 14:04:55 -0000
@@ -10,6 +10,10 @@

   =item 1.26_01-dev

+fix get_set_PVp() to properly set NULL values when passing in undef
+thanks to Lyle Brooks for the spot
+[Stephen Clouse <[EMAIL PROTECTED]>]
+
   Apache::Registry errors are now saved in $r->notes('error-notes')
   [Jesse Erlbaum <[EMAIL PROTECTED]>]


Index: src/modules/perl/mod_perl_xs.h
===================================================================
RCS file: /home/cvs/modperl/src/modules/perl/mod_perl_xs.h,v
retrieving revision 1.6
diff -u -r1.6 mod_perl_xs.h
--- src/modules/perl/mod_perl_xs.h      2 Mar 2000 23:23:10 -0000       1.6
+++ src/modules/perl/mod_perl_xs.h      29 May 2002 14:04:55 -0000
@@ -3,7 +3,7 @@
   #define get_set_PVp(thing,p) \
       RETVAL = (char*)thing; \
       if(items > 1) \
-        thing = (char*)((ST(1) == &sv_undef) ? NULL : pstrdup(p, SvPV(ST(1),na)))
+        thing = (char*)(SvOK(ST(1)) ? pstrdup(p, SvPV(ST(1),na)) : NULL)

   #define get_set_PV(thing) \
       get_set_PVp(thing,r->pool)


Index: t/internal/api.t
===================================================================
RCS file: /home/cvs/modperl/t/internal/api.t,v
retrieving revision 1.1
diff -u -r1.1 api.t
--- t/internal/api.t    6 Dec 1997 17:57:12 -0000       1.1
+++ t/internal/api.t    29 May 2002 14:04:55 -0000
@@ -1,3 +1,3 @@
   use Apache::test;

-print fetch "http://$net::httpserver$net::perldir/api.pl";;
+print fetch "http://$net::httpserver$net::perldir/api.pl?arg1=one&arg2=two";;


Index: t/net/perl/api.pl
===================================================================
RCS file: /home/cvs/modperl/t/net/perl/api.pl,v
retrieving revision 1.48
diff -u -r1.48 api.pl
--- t/net/perl/api.pl   24 Mar 2002 18:22:56 -0000      1.48
+++ t/net/perl/api.pl   29 May 2002 14:04:55 -0000
@@ -16,7 +16,7 @@

   my $is_xs = ($r->uri =~ /_xs/);

-my $tests = 75;
+my $tests = 81;
   my $is_win32 = WIN32;
   $tests += 4 unless $is_win32;
   my $test_get_set = Apache->can('set_handlers') && ($tests += 4);
@@ -73,9 +73,16 @@
   }

   my $the_request = $r->the_request;
-$r->the_request(join ' ', map { $r->$_() } qw(method uri protocol));
+my $request_string = $r->method . ' ' .
+                     $r->uri    . '?' .
+                     $r->args   . ' ' .
+                     $r->protocol;
+$r->the_request($request_string);
   test ++$i, $the_request eq $r->the_request;
   printf "old=$the_request, new=%s\n", $r->the_request;
+$r->the_request(undef);
+test ++$i, not $r->the_request;
+test ++$i, not defined $r->the_request;

   my $doc_root = $r->document_root;
   $r->document_root('/tmp');
@@ -103,6 +110,14 @@
   test ++$i, $r->status_line;
   test ++$i, $r->method eq "GET";
   #test ++$i, $r->method_number
+
+# args
+test ++$i, $r->args eq 'arg1=one&arg2=two';
+$r->args('foo=bar');
+test ++$i, $r->args eq 'foo=bar';
+$r->args(undef);
+test ++$i, not $r->args;
+test ++$i, not defined $r->args;

   $r->subprocess_env(SetKey => 'value');
   test ++$i, $r->subprocess_env('SetKey') eq 'value';





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to