From a40b1e12de2f223b72bb67d8c256b64dd3e5f840 Mon Sep 17 00:00:00 2001 From: slava Date: Wed, 1 Feb 2006 03:43:29 +0000 Subject: [PATCH] File responder directory listing fixes --- contrib/httpd/default-responders.factor | 27 +++++++++---------------- contrib/httpd/file-responder.factor | 22 +++++++++++--------- contrib/httpd/responder.factor | 5 +---- contrib/httpd/test/httpd.factor | 7 ------- library/io/files.factor | 2 +- 5 files changed, 23 insertions(+), 40 deletions(-) diff --git a/contrib/httpd/default-responders.factor b/contrib/httpd/default-responders.factor index 0c67628bef..e60f0225dc 100644 --- a/contrib/httpd/default-responders.factor +++ b/contrib/httpd/default-responders.factor @@ -10,22 +10,19 @@ global [ H{ } clone responders set ! 404 error message pages are served by this guy - [ - "404" "responder" set - [ drop no-such-responder ] "get" set - ] make-responder + "404" [ no-such-responder ] install-cont-responder ! Online help browsing "help" [ help-responder ] install-cont-responder ! Javascript source used by ajax libraries - [ - "contrib/httpd/javascript/" resource-path "doc-root" set - "javascript" "responder" set - [ file-responder ] "get" set - [ file-responder ] "post" set - [ file-responder ] "head" set - ] make-responder + "javascript" [ + [ + "contrib/httpd/javascript/" resource-path + "doc-root" set + file-responder + ] with-scope + ] install-cont-responder ! Global variables "inspector" [ inspect-responder ] install-cont-responder @@ -36,13 +33,7 @@ global [ ! Serves files from a directory stored in the "doc-root" ! variable. You can set the variable in the global namespace, ! or inside the responder. - [ - ! "/var/www/" "doc-root" set - "file" "responder" set - [ file-responder ] "get" set - [ file-responder ] "post" set - [ file-responder ] "head" set - ] make-responder + "file" [ file-responder ] install-cont-responder ! The root directory is served by... "file" set-default-responder diff --git a/contrib/httpd/file-responder.factor b/contrib/httpd/file-responder.factor index 51fd15499e..200d1dfe89 100644 --- a/contrib/httpd/file-responder.factor +++ b/contrib/httpd/file-responder.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2004,2005 Slava Pestov. ! See http://factor.sf.net/license.txt for BSD license. IN: file-responder -USING: html httpd kernel lists math namespaces parser sequences -io strings ; +USING: cont-responder html httpd io kernel lists math namespaces +parser sequences strings ; : serving-path ( filename -- filename ) [ "" ] unless* "doc-root" get swap append ; @@ -49,13 +49,15 @@ io strings ; : serve-object ( filename -- ) dup directory? [ serve-directory ] [ serve-file ] if ; -: file-responder ( filename -- ) - "doc-root" get [ - serving-path dup exists? [ - serve-object +: file-responder ( -- ) + [ + "doc-root" get [ + "argument" get serving-path dup exists? [ + serve-object + ] [ + drop "404 not found" httpd-error + ] if ] [ - drop "404 not found" httpd-error + "404 doc-root not set" httpd-error ] if - ] [ - drop "404 doc-root not set" httpd-error - ] if ; + ] (show-final) ; diff --git a/contrib/httpd/responder.factor b/contrib/httpd/responder.factor index 614ae83839..c845994b6e 100644 --- a/contrib/httpd/responder.factor +++ b/contrib/httpd/responder.factor @@ -126,11 +126,8 @@ SYMBOL: responders : set-default-responder ( name -- ) responder "default" responders get set-hash ; -: responder-argument ( argument -- argument ) - dup empty? [ drop "default-argument" get ] when ; - : call-responder ( method argument responder -- ) - [ responder-argument swap get call ] bind ; + over "argument" set [ swap get call ] bind ; : serve-default-responder ( method url -- ) "default" responder call-responder ; diff --git a/contrib/httpd/test/httpd.factor b/contrib/httpd/test/httpd.factor index 7a3452072d..105c294da7 100644 --- a/contrib/httpd/test/httpd.factor +++ b/contrib/httpd/test/httpd.factor @@ -15,13 +15,6 @@ USE: lists [ ] [ "404 not found" httpd-error ] unit-test -[ "arg" ] [ - [ - "arg" "default-argument" set - "" responder-argument - ] with-scope -] unit-test - [ "inspect/global" ] [ "/inspect/global" trim-/ ] unit-test [ ] [ diff --git a/library/io/files.factor b/library/io/files.factor index c0749dd9d2..5cedcab609 100644 --- a/library/io/files.factor +++ b/library/io/files.factor @@ -32,7 +32,7 @@ DEFER: directory. : (directory.) ( name path -- ) dup [ directory. ] curry - [ "/" append (file.) ] write-outliner ; + [ "/" append (file.) ] write-outliner terpri ; : file. ( dir name -- ) tuck path+