]> Cypherpunks repositories - gostls13.git/commitdiff
cgi: don't depend on CGI.pm for tests
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 8 Jul 2011 00:45:28 +0000 (17:45 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 8 Jul 2011 00:45:28 +0000 (17:45 -0700)
CGI.pm used to be part of the Perl core,
but some distros now bundle perl-core
and perl-modules separately.

It's not worth depending on.

R=golang-dev, mattn.jp
CC=golang-dev
https://golang.org/cl/4675063

src/pkg/http/cgi/testdata/test.cgi

index 47798907034c919ef9a03db91dcce3644f3e0a26..36c107f76b2bab2bb4aca8a1b26251996529b0cb 100755 (executable)
@@ -6,10 +6,9 @@
 # Test script run as a child process under cgi_test.go
 
 use strict;
-use CGI;
 use Cwd;
 
-my $q = CGI->new;
+my $q = MiniCGI->new;
 my $params = $q->Vars;
 
 if ($params->{"loc"}) {
@@ -53,3 +52,37 @@ if ($^O eq 'MSWin32' || $^O eq 'msys') {
   $dir = getcwd();
 }
 print "cwd=$dir\n";
+
+
+# A minimal version of CGI.pm, for people without the perl-modules
+# package installed.  (CGI.pm used to be part of the Perl core, but
+# some distros now bundle perl-base and perl-modules separately...)
+package MiniCGI;
+
+sub new {
+    my $class = shift;
+    return bless {}, $class;
+}
+
+sub Vars {
+    my $self = shift;
+    my $pairs;
+    if ($ENV{CONTENT_LENGTH}) {
+        $pairs = do { local $/; <STDIN> };
+    } else {
+        $pairs = $ENV{QUERY_STRING};
+    }
+    my $vars = {};
+    foreach my $kv (split(/&/, $pairs)) {
+        my ($k, $v) = split(/=/, $kv, 2);
+        $vars->{_urldecode($k)} = _urldecode($v);
+    }
+    return $vars;
+}
+
+sub _urldecode {
+    my $v = shift;
+    $v =~ tr/+/ /;
+    $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+    return $v;
+}