Gauche > Archives > 2014/01/27

2014/01/27 04:10:53 UTCshiro
#
えーっと、makiki経由で使ってるんでしたっけ。ちょっと見当がつかないですが、makikiは最近色々変えてるのでちょっと最新版で試していただければ。
2014/01/27 06:06:15 UTCshiro
#
(ところで「以前」と言われてもすぐに思い出せないお年頃になってしまったので、以前の情報にリンクがあるなら貼るとか、無ければ環境などを書いておいていただけると助かります)
2014/01/27 08:36:38 UTCshiro
#
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に妙な機能を入れなくて済むし。
2014/01/27 09:52:27 UTCyamasushi
#
ローカルwiliki> wiliki付属のwiliki-serverです。gauche,wiliki,makikiを更新しました。同じです。エラーが出た状態ではF5リロードでも、「検索しているページは、入力した情報を使用しており〜〜」というダイアログが出て、「続行」を押してもエラーのままです。url部分をクリックしてキャレットを表示させてenterすると期待どおりにTOPが表示されます。
2014/01/27 09:56:32 UTCyamasushi
#
"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
2014/01/27 10:08:32 UTCshiro
#
エラーが出るのはブラウザってことですよね。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])))))
2014/01/27 10:55:58 UTCyamasushi
#
POST request ends prematurely. Expected content-length: 0, but EOF encountered after reading #<eof> octets.
2014/01/27 11:05:22 UTCshiro
#
あああ、わかりました。
#
これでどうですか。
#
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
2014/01/27 11:15:19 UTCyamasushi
#
おおお、TOPに行きますね。