[bknr-cvs] hans changed trunk/thirdparty/
BKNR Commits
bknr at bknr.net
Tue Feb 10 14:50:32 UTC 2009
Revision: 4231
Author: hans
URL: http://bknr.net/trac/changeset/4231
Fix cookie parsing.
U trunk/thirdparty/chunga/doc/index.html
U trunk/thirdparty/chunga/packages.lisp
U trunk/thirdparty/drakma/cookies.lisp
U trunk/thirdparty/drakma/read.lisp
U trunk/thirdparty/drakma/util.lisp
Modified: trunk/thirdparty/chunga/doc/index.html
===================================================================
--- trunk/thirdparty/chunga/doc/index.html 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/chunga/doc/index.html 2009-02-10 14:50:32 UTC (rev 4231)
@@ -91,6 +91,7 @@
<li><a href="#assert-char"><code>assert-char</code></a>
<li><a href="#skip-whitespace"><code>skip-whitespace</code></a>
<li><a href="#read-char*"><code>read-char*</code></a>
+ <li><a href="#peek-char*"><code>peek-char*</code></a>
<li><a href="#trim-whitespace"><code>trim-whitespace</code></a>
<li><a href="#*current-error-message*"><code>*current-error-message*</code></a>
<li><a href="#*accept-bogus-eols*"><code>*accept-bogus-eols*</code></a>
@@ -640,6 +641,25 @@
<!-- End of entry for READ-CHAR* -->
+<!-- Entry for PEEK-CHAR* -->
+
+<p><br>[Function]<br><a class=none name='peek-char*'><b>peek-char*</b> <i>stream <tt>&optional</tt> eof-error-p eof-value</i> => <i>boolean</i></a>
+<blockquote><br>
+
+Returns a true value if a character can be read from the binary
+stream <code><i>stream</i></code>. If <code><i>eof-error-p</i></code>
+has a true value, an error is signalled if no character remains to be
+read. <code><i>eof-value</i></code> specifies the value to return
+if <code><i>eof-error-p</i></code> is false and the end of the file
+has been reached.
+<p>
+See <a href="#with-character-stream-semantics"><code>WITH-CHARACTER-STREAM-SEMANTICS</code></a>.
+
+</blockquote>
+
+<!-- End of entry for PEEK-CHAR* -->
+
+
<!-- Entry for TRIM-WHITESPACE -->
<p><br>[Function]<br><a class=none name='trim-whitespace'><b>trim-whitespace</b> <i>string</i> => <i>string'</i></a>
Modified: trunk/thirdparty/chunga/packages.lisp
===================================================================
--- trunk/thirdparty/chunga/packages.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/chunga/packages.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -54,6 +54,7 @@
:input-chunking-unexpected-end-of-file
:make-chunked-stream
:read-http-headers
+ :peek-char*
:read-char*
:read-line*
:read-name-value-pair
Modified: trunk/thirdparty/drakma/cookies.lisp
===================================================================
--- trunk/thirdparty/drakma/cookies.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/cookies.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -249,7 +249,7 @@
of three-element lists where each one contains the name of the
cookie, the value of the cookie, and an attribute/value list for
the optional cookie parameters."
- (with-input-from-string (stream string)
+ (with-sequence-from-string (stream string)
(loop with *current-error-message* = (format nil "While parsing cookie header ~S:" string)
for first = t then nil
for next = (and (skip-whitespace stream)
Modified: trunk/thirdparty/drakma/read.lisp
===================================================================
--- trunk/thirdparty/drakma/read.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/read.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -60,7 +60,7 @@
HTTP-REQUEST. Returns NIL if there is no such header amongst
HEADERS."
(when-let (content-type (header-value :content-type headers))
- (with-input-from-sequence (stream (map 'list 'char-code content-type))
+ (with-sequence-from-string (stream content-type)
(let* ((*current-error-message* "Corrupted Content-Type header:")
(type (read-token stream))
(subtype (and (assert-char stream #\/)
@@ -80,8 +80,8 @@
"Reads and consumes from STREAM any number of commas and
whitespace. Returns the following character or NIL in case of
END-OF-FILE."
- (loop while (eql (peek-char nil stream nil) #\,)
- do (read-char stream) (skip-whitespace stream))
+ (loop while (eql (peek-char* stream nil) #\,)
+ do (read-char* stream) (skip-whitespace stream))
(skip-whitespace stream))
(defun read-tokens-and-parameters (string &key (value-required-p t))
@@ -94,7 +94,7 @@
\(the attribute/value pairs). If VALUE-REQUIRED-P is NIL, the
value part \(including the #\\= character) of each attribute/value
pair is optional."
- (with-input-from-string (stream string)
+ (with-sequence-from-string (stream string)
(loop with *current-error-message* = (format nil "While parsing ~S:" string)
for first = t then nil
for next = (and (skip-whitespace stream)
Modified: trunk/thirdparty/drakma/util.lisp
===================================================================
--- trunk/thirdparty/drakma/util.lisp 2009-02-10 14:46:11 UTC (rev 4230)
+++ trunk/thirdparty/drakma/util.lisp 2009-02-10 14:50:32 UTC (rev 4231)
@@ -274,3 +274,9 @@
(or (null candidate-subtype)
(string-equal subtype candidate-subtype)))))
+(defmacro with-sequence-from-string ((stream string) &body body)
+ "Kludge to make Chunga tokenizing functionality usable. Works like
+ WITH-INPUT-FROM-STRING, but creates a sequence of octets that works
+ with CHUNGA::PEEK-CHAR* and friends."
+ `(flex:with-input-from-sequence (,stream (map 'list #'char-code ,string))
+ , at body))
\ No newline at end of file
More information about the Bknr-cvs
mailing list