[ t ] [
mime-test-stream [ upload-separator parse-multipart ] with-input-stream
- drop "\"up.txt\"" swap key?
+ nip "\"up.txt\"" swap key?
] unit-test
[ t ] [
mime-test-stream [ upload-separator parse-multipart ] with-input-stream
- nip "\"text1\"" swap key?
+ drop "\"text1\"" swap key?
] unit-test
+
: mime-write ( sequence -- )
>byte-array write ;
-: parse-headers ( string -- sequence )
- string-lines harvest [ parse-header-line ] map ;
+: parse-headers ( string -- hashtable )
+ string-lines harvest [ parse-header-line ] map >hashtable ;
ERROR: end-of-stream multipart ;
"\r\n\r\n" dump-string dup "--\r" = [
drop
] [
- parse-headers >hashtable >>header
+ parse-headers >>header
] if ;
+: empty-name? ( string -- ? )
+ { "''" "\"\"" "" f } member? ;
+
: save-uploaded-file ( multipart -- )
- dup filename>> empty? [
+ dup filename>> empty-name? [
drop
] [
[ [ header>> ] [ filename>> ] [ temp-file>> ] tri mime-file boa ]
] if ;
: save-form-variable ( multipart -- )
- [ [ header>> ] [ name>> ] [ name-content>> ] tri mime-variable boa ]
- [ name>> ]
- [ form-variables>> set-at ] tri ;
+ dup name>> empty-name? [
+ drop
+ ] [
+ [ [ header>> ] [ name>> ] [ name-content>> ] tri mime-variable boa ]
+ [ name>> ]
+ [ form-variables>> set-at ] tri
+ ] if ;
: dump-mime-file ( multipart filename -- multipart )
binary <file-writer> [
read-header
dup end-of-stream?>> [ process-header parse-multipart-loop ] unless ;
-: parse-multipart ( sep -- uploaded-files form-variables )
+: parse-multipart ( separator -- form-variables uploaded-files )
<multipart> parse-beginning parse-multipart-loop
- [ uploaded-files>> ] [ form-variables>> ] bi ;
+ [ form-variables>> ] [ uploaded-files>> ] bi ;