#えーっと、makiki経由で使ってるんでしたっけ。ちょっと見当がつかないですが、makikiは最近色々変えてるのでちょっと最新版で試していただければ。
#(ところで「以前」と言われてもすぐに思い出せないお年頃になってしまったので、以前の情報にリンクがあるなら貼るとか、無ければ環境などを書いておいていただけると助かります)
#R7RS programとGauche scriptの共存問題だが、妥協策を思いついた。gaucheのimport、r7rsのimportの他に、スクリプトのトップレベルのimport (モジュール的にはuserモジュールのimportになるか) をマクロにしておいて、r7rsのimport構文が見つかったら(use r7rs) (select-module r7rs) (import ...) へと展開する、というのはどうだろう。
#r7rsのimport構文でなければ(gauche:import ...) とかに展開する。
#これだと、goshに-r7オプション無しでr7rsプログラムを食わせることができそうだ。
#gaucheのimportに妙な機能を入れなくて済むし。
#ローカルwiliki> wiliki付属のwiliki-serverです。gauche,wiliki,makikiを更新しました。同じです。エラーが出た状態ではF5リロードでも、「検索しているページは、入力した情報を使用しており〜〜」というダイアログが出て、「続行」を押してもエラーのままです。url部分をクリックしてキャレットを表示させてenterすると期待どおりにTOPが表示されます。
#"http://localhost:3133/wiliki.cgi" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 17.283ms
2014-01-27T18:56:10+0900: ::ffff:127.0.0.1 "GET /wiliki.css HTTP/1.1" 200 2741 "http://localhost:3133/wiliki.cgi" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 2.510ms
#Sandboxに移動して「TOP」をクリック。表示がエラーになる。
2014-01-27T18:57:47+0900: ::ffff:127.0.0.1 "GET /wiliki.cgi HTTP/1.1" 200 5534 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 5,688.571ms
2014-01-27T18:57:53+0900: ::ffff:127.0.0.1 "GET /wiliki.css HTTP/1.1" 200 2741 "http://localhost:3133/wiliki.cgi" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 3.086ms
2014-01-27T18:57:57+0900: ::ffff:127.0.0.1 "GET /wiliki.cgi?Sandbox HTTP/1.1" 200 4774 "http://localhost:3133/wiliki.cgi" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 272.730ms
2014-01-27T18:57:58+0900: ::ffff:127.0.0.1 "GET /wiliki.css HTTP/1.1" 200 2741 "http://localhost:3133/wiliki.cgi?Sandbox" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 2.630ms
2014-01-27T18:58:02+0900: ::ffff:127.0.0.1 "POST /wiliki.cgi HTTP/1.1" 200 1480 "http://localhost:3133/wiliki.cgi?Sandbox" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 18.199ms
2014-01-27T18:58:02+0900: ::ffff:127.0.0.1 "GET /wiliki.css HTTP/1.1" 200 2741 "http://localhost:3133/wiliki.cgi" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 2.414ms
#エラーが出るのはブラウザってことですよね。Gaucheのlib/www/cgi.scmをこう変えてみたら、エラーメッセージはどうなりますか。
#diff --git a/lib/www/cgi.scm b/lib/www/cgi.scm
index e927e17..51ed731 100644
--- a/lib/www/cgi.scm
+++ b/lib/www/cgi.scm
@@ -184,7 +184,7 @@
(let loop ([i 0])
(let1 nread (read-block! buf inp i)
(cond [(eof-object? nread)
- (errorf <cgi-error> "POST request ends prematurely")]
+ (errorf <cgi-error> "POST request ends prematurely. Expected content-length: ~a, but EOF encountered after reading ~a octets." len nread)]
[(< (+ nread i) len) (loop (+ nread i))]
[else buf])))))
#POST request ends prematurely. Expected content-length: 0, but EOF encountered after reading #<eof> octets.
#あああ、わかりました。
#これでどうですか。
#diff --git a/lib/www/cgi.scm b/lib/www/cgi.scm
index e927e17..b3c9fb4 100644
--- a/lib/www/cgi.scm
+++ b/lib/www/cgi.scm
@@ -179,14 +179,16 @@
;; The port buffering may not be :full, so we should keep reading
;; until all data is retrieved.
(define (read-complete-block len)
- (let ([buf (make-u8vector len)]
- [inp (current-input-port)])
- (let loop ([i 0])
- (let1 nread (read-block! buf inp i)
- (cond [(eof-object? nread)
- (errorf <cgi-error> "POST request ends prematurely")]
- [(< (+ nread i) len) (loop (+ nread i))]
- [else buf])))))
+ (if (zero? len)
+ '#u8()
+ (let ([buf (make-u8vector len)]
+ [inp (current-input-port)])
+ (let loop ([i 0])
+ (let1 nread (read-block! buf inp i)
+ (cond [(eof-object? nread)
+ (errorf <cgi-error> "POST request ends prematurely. Expected content-length: ~a, but EOF encountered after reading ~a octets." len nread)]
+ [(< (+ nread i) len) (loop (+ nread i))]
+ [else buf]))))))
;;----------------------------------------------------------------
;; API: cgi-parse-parameters &keyword query-string merge-cookies
#おおお、TOPに行きますね。