swerc

anselm's simpler werc fork
git clone git://git.suckless.org/swerc
Log | Files | Refs | README

commit a2251757cc07c5152f2b13afd45e64194fc7f1d9
parent 69c661aeade7c49c98256b2282257d384f50ef4e
Author: uriel@engel.se.cat-v.org <unknown>
Date:   Thu, 22 Jan 2009 14:21:40 +0100

Rewrite http post parsing code, this should be faster and cleaner, added a
get_post_args function to keep backwards compat but it is not really needed.

Fix a silly bug in urldecode.
Diffstat:
Mbin/cgilib.rc | 41++++++++++++++++++++---------------------
Msites/werc.cat-v.org/_werc/config | 2++
2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/bin/cgilib.rc b/bin/cgilib.rc @@ -25,34 +25,33 @@ fn static_file { # Status is () if at least one arg is found. -fn get_post_args { - _status='Args not found' - if(! ~ $REQUEST_METHOD POST) - _status='No http post!' - if not if(~ $#POST_ARGS 0) { +# Note: should check if content type is application/x-www-form-urlencoded? +fn load_post_args { + if(~ $REQUEST_METHOD POST && ~ $#post_args 0) { ifs='& ' for(pair in `{cat}) { - pair=`{echo -n $pair | sed 's/=/\&/'} - # Maybe we should urldecode on the first pass? - POST_ARGS=( $POST_ARGS $pair ) - _get_post_args_set_var $pair $* + ifs='=' { pair=`{echo -n $pair} } + n='post_arg_'^`{echo $pair(1)|tr -cd 'a-zA-Z0-9_'} + post_args=( $post_args $n ) + $n=`{echo -n $pair(2) | urldecode} } + pair=() } - if not { - pair=$POST_ARGS - while(! ~ $#pair 0) { - _get_post_args_set_var $pair $* - pair=$pair(3-) + if not + status='No POST or post args already loaded' +} +fn get_post_args { + load_post_args + _status='No post arg matches' + for(n in $*) { + v=post_arg_$n + if(! ~ $#$v 0) { + $n=$$v + _status=() } } status=$_status } -fn _get_post_args_set_var { - if(~ $1 $*(3-)) { - ifs=() { $1=`{echo -n $2 | urldecode | tr -d ' '} } - _status=() - } -} # This seems slightly improve performance, but might depend on httpd buffering behavior. fn awk_buffer { @@ -104,7 +103,7 @@ BEGIN { decoded = decoded c ++i } - printf decoded + printf "%s", decoded } ' } diff --git a/sites/werc.cat-v.org/_werc/config b/sites/werc.cat-v.org/_werc/config @@ -1,3 +1,5 @@ siteTitle='werc' siteSubTitle=' Bringing minimalism and sanity to the web' +enable_comments=yes +enabled_apps=($enabled_apps hello dirdir bridge)