From c9b73f062b2266466ea8d250b27a49e82ac6d9cb Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Thu, 28 Feb 2008 23:46:27 -0600
Subject: [PATCH 1/8] Implement file-info

---
 core/io/files/files.factor           | 16 +++++++++++++++-
 extra/io/unix/files/files.factor     | 25 +++++++++++++++++++++++--
 extra/unix/stat/macosx/macosx.factor |  4 ++++
 extra/unix/stat/stat.factor          | 23 +++++++++++++++++------
 4 files changed, 59 insertions(+), 9 deletions(-)

diff --git a/core/io/files/files.factor b/core/io/files/files.factor
index 85f0621443..e20437fa85 100755
--- a/core/io/files/files.factor
+++ b/core/io/files/files.factor
@@ -1,10 +1,11 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-IN: io.files
 USING: io.backend io.files.private io hashtables kernel math
 memory namespaces sequences strings assocs arrays definitions
 system combinators splitting sbufs continuations ;
 
+IN: io.files
+
 ! Pathnames
 : path-separator? ( ch -- ? ) windows? "/\\" "/" ? member? ;
 
@@ -50,6 +51,19 @@ TUPLE: no-parent-directory path ;
         { [ t ] [ drop ] }
     } cond ;
 
+TUPLE: file-info type size permissions modified ;
+
+HOOK: file-info io-backend ( path -- info )
+
+SYMBOL: +regular-file+
+SYMBOL: +directory+
+SYMBOL: +character-device+
+SYMBOL: +block-device+
+SYMBOL: +fifo+
+SYMBOL: +symbolic-link+
+SYMBOL: +socket+
+SYMBOL: +unknown+
+
 ! File metadata
 : stat ( path -- directory? permissions length modified )
     normalize-pathname (stat) ;
diff --git a/extra/io/unix/files/files.factor b/extra/io/unix/files/files.factor
index 7b1c97abbe..a5a4e64c03 100755
--- a/extra/io/unix/files/files.factor
+++ b/extra/io/unix/files/files.factor
@@ -1,8 +1,8 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: io.backend io.nonblocking io.unix.backend io.files io
-unix unix.stat kernel math continuations math.bitfields byte-arrays
-alien ;
+       unix unix.stat kernel math continuations math.bitfields byte-arrays
+       alien combinators combinators.cleave calendar ;
 
 IN: io.unix.files
 
@@ -68,3 +68,24 @@ M: unix-io delete-directory ( path -- )
 
 M: unix-io copy-file ( from to -- )
     >r dup file-permissions over r> (copy-file) chmod io-error ;
+
+: stat>type ( stat -- type )
+    stat-st_mode {
+        { [ dup S_ISREG  ] [ +regular-file+     ] }
+        { [ dup S_ISDIR  ] [ +directory+        ] }
+        { [ dup S_ISCHR  ] [ +character-device+ ] }
+        { [ dup S_ISBLK  ] [ +block-device+     ] }
+        { [ dup S_ISFIFO ] [ +fifo+             ] }
+        { [ dup S_ISLNK  ] [ +symbolic-link+    ] }
+        { [ dup S_ISSOCK ] [ +socket+           ] }
+        { [ t            ] [ +unknown+          ] }
+      } cond nip ;
+
+M: unix-io file-info ( path -- info )
+    stat* {
+        [ stat>type ]
+        [ stat-st_size ]
+        [ stat-st_mode ]
+        [ stat-st_mtim timespec-sec seconds unix-1970 time+ ]
+    } cleave
+    \ file-info construct-boa ;
diff --git a/extra/unix/stat/macosx/macosx.factor b/extra/unix/stat/macosx/macosx.factor
index 1cb3994708..3741a22413 100644
--- a/extra/unix/stat/macosx/macosx.factor
+++ b/extra/unix/stat/macosx/macosx.factor
@@ -27,3 +27,7 @@ C-STRUCT: stat
 
 FUNCTION: int stat  ( char* pathname, stat* buf ) ;
 FUNCTION: int lstat ( char* pathname, stat* buf ) ;
+
+: stat-st_atim stat-st_atimespec ;
+: stat-st_mtim stat-st_mtimespec ;
+: stat-st_ctim stat-st_ctimespec ;
\ No newline at end of file
diff --git a/extra/unix/stat/stat.factor b/extra/unix/stat/stat.factor
index ca0736b6d4..204321f30c 100644
--- a/extra/unix/stat/stat.factor
+++ b/extra/unix/stat/stat.factor
@@ -1,5 +1,6 @@
 
-USING: kernel system combinators alien.syntax math vocabs.loader ;
+USING: kernel system combinators alien.syntax alien.c-types
+       math io.unix.backend vocabs.loader ;
 
 IN: unix.stat
 
@@ -55,11 +56,21 @@ FUNCTION: int fchmod ( int fd, mode_t mode ) ;
 
 FUNCTION: int mkdir ( char* path, mode_t mode ) ;
 
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+<<
+  os
+  {
+    { "linux"  [ "unix.stat.linux"  require ] }
+    { "macosx" [ "unix.stat.macosx" require ] }
+    [ drop ]
+  }
+  case
+>>
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-{
-  { [ linux? ] [ "unix.stat.linux" require ] }
-  { [ t      ] [                           ] }
-}
-cond
+: check-status ( n -- ) io-error ;
 
+: stat* ( pathname -- stat )
+  "stat" <c-object> dup >r
+    stat check-status
+  r> ;

From 499948047a774ca676c20808a4ab147fe259e863 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 00:10:37 -0600
Subject: [PATCH 2/8] rename io.files.temporary to io.files.unique write
 documentation

---
 .../io/files/temporary/backend/backend.factor |  5 --
 extra/io/files/temporary/temporary.factor     | 36 -------------
 extra/io/files/unique/backend/backend.factor  |  5 ++
 extra/io/files/unique/unique-docs.factor      | 50 +++++++++++++++++++
 extra/io/files/unique/unique.factor           | 48 ++++++++++++++++++
 .../io/unix/files/temporary/temporary.factor  | 12 -----
 extra/io/unix/files/unique/unique.factor      | 12 +++++
 extra/io/unix/unix.factor                     |  4 +-
 .../temporary.factor => unique/unique.factor} |  4 +-
 extra/io/windows/windows.factor               |  8 +--
 10 files changed, 123 insertions(+), 61 deletions(-)
 delete mode 100644 extra/io/files/temporary/backend/backend.factor
 delete mode 100644 extra/io/files/temporary/temporary.factor
 create mode 100644 extra/io/files/unique/backend/backend.factor
 create mode 100644 extra/io/files/unique/unique-docs.factor
 create mode 100644 extra/io/files/unique/unique.factor
 delete mode 100644 extra/io/unix/files/temporary/temporary.factor
 create mode 100644 extra/io/unix/files/unique/unique.factor
 rename extra/io/windows/files/{temporary/temporary.factor => unique/unique.factor} (63%)

diff --git a/extra/io/files/temporary/backend/backend.factor b/extra/io/files/temporary/backend/backend.factor
deleted file mode 100644
index 0fe4068621..0000000000
--- a/extra/io/files/temporary/backend/backend.factor
+++ /dev/null
@@ -1,5 +0,0 @@
-USING: io.backend ;
-IN: io.files.temporary.backend
-
-HOOK: (temporary-file) io-backend ( path prefix suffix -- stream path )
-HOOK: temporary-path io-backend ( -- path )
diff --git a/extra/io/files/temporary/temporary.factor b/extra/io/files/temporary/temporary.factor
deleted file mode 100644
index d46ddff8c6..0000000000
--- a/extra/io/files/temporary/temporary.factor
+++ /dev/null
@@ -1,36 +0,0 @@
-USING: kernel math math.bitfields combinators.lib math.parser
-random sequences sequences.lib continuations namespaces
-io.files io.backend io.nonblocking io arrays
-io.files.temporary.backend system combinators vocabs.loader ;
-USE: tools.walker
-IN: io.files.temporary
-
-: random-letter ( -- ch )
-    26 random { CHAR: a CHAR: A } random + ;
-
-: random-ch ( -- ch )
-    { t f } random
-    [ 10 random CHAR: 0 + ] [ random-letter ] if ;
-
-: random-name ( n -- string )
-    [ drop random-ch ] "" map-as ;
-
-: <temporary-file> ( prefix suffix -- path duplex-stream )
-    temporary-path -rot
-    [ 10 random-name swap 3append path+ dup (temporary-file) ] 3curry
-    10 retry ;
-
-: with-temporary-file ( quot -- path )
-    >r f f <temporary-file> r> with-stream ;
-
-: temporary-directory ( -- path )
-    [ temporary-path 10 random-name path+ dup make-directory ] 10 retry ;
-
-: with-temporary-directory ( quot -- )
-    >r temporary-directory r>
-    [ with-directory ] 2keep drop delete-tree ;
-
-{
-    { [ unix? ] [ "io.unix.files.temporary" ] }
-    { [ windows? ] [ "io.windows.files.temporary" ] }
-} cond require
diff --git a/extra/io/files/unique/backend/backend.factor b/extra/io/files/unique/backend/backend.factor
new file mode 100644
index 0000000000..228b6881f9
--- /dev/null
+++ b/extra/io/files/unique/backend/backend.factor
@@ -0,0 +1,5 @@
+USING: io.backend ;
+IN: io.files.unique.backend
+
+HOOK: (make-unique-file) io-backend ( prefix suffix -- stream path )
+HOOK: temporary-path io-backend ( -- path )
diff --git a/extra/io/files/unique/unique-docs.factor b/extra/io/files/unique/unique-docs.factor
new file mode 100644
index 0000000000..61f960d9f7
--- /dev/null
+++ b/extra/io/files/unique/unique-docs.factor
@@ -0,0 +1,50 @@
+USING: help.markup help.syntax io io.nonblocking kernel math
+io.files.unique.private math.parser io.files ;
+IN: io.files.unique
+
+ARTICLE: "unique" "Making and using unique files"
+"Files:"
+{ $subsection make-unique-file }
+{ $subsection with-unique-file }
+{ $subsection with-temporary-file }
+"Directories:"
+{ $subsection make-unique-directory }
+{ $subsection with-unique-directory }
+{ $subsection with-temporary-directory } ;
+
+ABOUT: "unique"
+
+HELP: make-unique-file ( prefix suffix -- path stream )
+{ $values { "prefix" "a string" } { "suffix" "a string" }
+{ "path" "a pathname string" } { "stream" "an output stream" } }
+{ $description "Creates a file that is guaranteed not to exist in a platform-specific temporary directory.  The file name is composed of a prefix, a number of random digits and letters, and the suffix.  Returns the full pathname and a " { $link <writer> } " stream." }
+{ $errors "Throws an error if a new unique file cannot be created after a number of tries.  Since each try generates a new random name, the most likely error is incorrect directory permissions on the temporary directory." }
+{ $see-also with-unique-file } ;
+
+HELP: make-unique-directory ( -- path )
+{ $values { "path" "a pathname string" } }
+{ $description "Creates a directory that is guaranteed not to exist in a platform-specific temporary directory and returns the full pathname." }
+{ $errors "Throws an error if the directory cannot be created after a number of tries.  Since each try generates a new random name, the most likely error is incorrect directory permissions on the temporary directory." }
+{ $see-also with-unique-directory } ;
+
+HELP: with-unique-file ( quot -- path )
+{ $values { "quot" "a quotation" } { "path" "a pathname string" } }
+{ $description "Creates a file with " { $link make-unique-file } " and calls " { $link with-stream } " on the newly created file.  Returns the full pathname after the stream has been closed." }
+{ $notes "The unique file will remain after calling this word." }
+{ $see-also with-temporary-file } ;
+
+HELP: with-unique-directory ( quot -- path )
+{ $values { "quot" "a quotation" } { "path" "a pathname string" } }
+{ $description "Creates a directory with " { $link make-unique-directory } " and calls " { $link with-directory } " on the newly created directory.  Returns the full pathname after the quotation has been called." }
+{ $notes "The directory will remain after calling this word." }
+{ $see-also with-temporary-directory } ;
+
+HELP: with-temporary-file ( quot -- )
+{ $values { "quot" "a quotation" } }
+{ $description "Creates a file with " { $link make-unique-file } " and calls " { $link with-stream } " on the newly created file.  The file is deleted after the quotation returns." }
+{ $see-also with-unique-file } ;
+
+HELP: with-temporary-directory ( quot -- )
+{ $values { "quot" "a quotation" } }
+{ $description "Creates a directory with " { $link make-unique-directory } " and calls " { $link with-directory } " on the newly created directory.  The directory is deleted after the quotation returns." }
+{ $see-also with-unique-directory } ;
diff --git a/extra/io/files/unique/unique.factor b/extra/io/files/unique/unique.factor
new file mode 100644
index 0000000000..3a1c3c46b8
--- /dev/null
+++ b/extra/io/files/unique/unique.factor
@@ -0,0 +1,48 @@
+! Copyright (C) 2008 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel math math.bitfields combinators.lib math.parser
+random sequences sequences.lib continuations namespaces
+io.files io.backend io.nonblocking io arrays
+io.files.unique.backend system combinators vocabs.loader ;
+IN: io.files.unique
+
+<PRIVATE
+: random-letter ( -- ch )
+    26 random { CHAR: a CHAR: A } random + ;
+
+: random-ch ( -- ch )
+    { t f } random
+    [ 10 random CHAR: 0 + ] [ random-letter ] if ;
+
+: random-name ( n -- string )
+    [ drop random-ch ] "" map-as ;
+
+: unique-length ( -- n ) 10 ; inline
+: unique-retries ( -- n ) 10 ; inline
+PRIVATE>
+
+: make-unique-file ( prefix suffix -- path stream )
+    temporary-path -rot
+    [
+        unique-length random-name swap 3append path+
+        dup (make-unique-file)
+    ] 3curry unique-retries retry ;
+
+: with-unique-file ( quot -- path )
+    >r f f make-unique-file r> with-stream ; inline
+
+: with-temporary-file ( quot -- )
+    with-unique-file delete-file ; inline
+
+: make-unique-directory ( -- path )
+    [
+        temporary-path unique-length random-name path+
+        dup make-directory
+    ] unique-retries retry ;
+
+: with-unique-directory ( quot -- path )
+    >r make-unique-directory r>
+    [ with-directory ] curry keep ; inline
+
+: with-temporary-directory ( quot -- )
+    with-unique-directory delete-tree ; inline
diff --git a/extra/io/unix/files/temporary/temporary.factor b/extra/io/unix/files/temporary/temporary.factor
deleted file mode 100644
index 0ac6d7605e..0000000000
--- a/extra/io/unix/files/temporary/temporary.factor
+++ /dev/null
@@ -1,12 +0,0 @@
-USING: kernel io.nonblocking io.unix.backend math.bitfields
-unix io.files.temporary.backend ;
-IN: io.unix.files.temporary
-
-: open-temporary-flags ( -- flags )
-    { O_RDWR O_CREAT O_EXCL } flags ;
-
-M: unix-io (temporary-file) ( path -- duplex-stream )
-    open-temporary-flags file-mode open dup io-error
-    <writer> ;
-
-M: unix-io temporary-path ( -- path ) "/tmp" ;
diff --git a/extra/io/unix/files/unique/unique.factor b/extra/io/unix/files/unique/unique.factor
new file mode 100644
index 0000000000..185d9cd405
--- /dev/null
+++ b/extra/io/unix/files/unique/unique.factor
@@ -0,0 +1,12 @@
+USING: kernel io.nonblocking io.unix.backend math.bitfields
+unix io.files.unique.backend ;
+IN: io.unix.files.unique
+
+: open-unique-flags ( -- flags )
+    { O_RDWR O_CREAT O_EXCL } flags ;
+
+M: unix-io (make-unique-file) ( path -- duplex-stream )
+    open-unique-flags file-mode open dup io-error
+    <writer> ;
+
+M: unix-io temporary-path ( -- path ) "/tmp" ;
diff --git a/extra/io/unix/unix.factor b/extra/io/unix/unix.factor
index e740561cf9..a328a3baf4 100755
--- a/extra/io/unix/unix.factor
+++ b/extra/io/unix/unix.factor
@@ -1,6 +1,6 @@
 USING: io.unix.backend io.unix.files io.unix.sockets io.timeouts
-io.unix.launcher io.unix.mmap io.backend combinators namespaces
-system vocabs.loader sequences ;
+io.unix.launcher io.unix.mmap io.backend io.files.temporary
+combinators namespaces system vocabs.loader sequences ;
 
 "io.unix." os append require
 
diff --git a/extra/io/windows/files/temporary/temporary.factor b/extra/io/windows/files/unique/unique.factor
similarity index 63%
rename from extra/io/windows/files/temporary/temporary.factor
rename to extra/io/windows/files/unique/unique.factor
index d96ff49e15..01e654751e 100644
--- a/extra/io/windows/files/temporary/temporary.factor
+++ b/extra/io/windows/files/unique/unique.factor
@@ -1,7 +1,7 @@
 USING: kernel system ;
-IN: io.windows.files.temporary
+IN: io.windows.files.unique
 
-M: windows-io (temporary-file) ( path -- stream )
+M: windows-io (make-unique-file) ( path -- stream )
     GENERIC_WRITE CREATE_NEW 0 open-file 0 <writer> ;
 
 M: windows-io temporary-path ( -- path )
diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor
index 9f2f2db0a5..2c2ad66221 100755
--- a/extra/io/windows/windows.factor
+++ b/extra/io/windows/windows.factor
@@ -2,10 +2,10 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types arrays destructors io io.backend
 io.buffers io.files io.nonblocking io.sockets io.binary
-io.sockets.impl windows.errors strings io.streams.duplex kernel
-math namespaces sequences windows windows.kernel32
-windows.shell32 windows.types windows.winsock splitting
-continuations math.bitfields ;
+io.sockets.impl io.windows.files.temporary windows.errors
+strings io.streams.duplex kernel math namespaces sequences
+windows windows.kernel32 windows.shell32 windows.types
+windows.winsock splitting continuations math.bitfields ;
 IN: io.windows
 
 TUPLE: windows-nt-io ;

From edcda314bd2a6a89ed39d4c81acff182a0af0f0b Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 00:11:01 -0600
Subject: [PATCH 3/8] add temporary files to docs

---
 core/io/files/files-docs.factor | 1 +
 1 file changed, 1 insertion(+)

diff --git a/core/io/files/files-docs.factor b/core/io/files/files-docs.factor
index c918641912..b8cf747106 100755
--- a/core/io/files/files-docs.factor
+++ b/core/io/files/files-docs.factor
@@ -87,6 +87,7 @@ ARTICLE: "io.files" "Basic file operations"
 { $subsection "fs-meta" }
 { $subsection "directories" }
 { $subsection "delete-move-copy" }
+{ $subsection "unique" }
 { $see-also "os" } ;
 
 ABOUT: "io.files"

From 0102689b1e0cf6bc062f76a62c77498c6dd0159b Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 00:11:50 -0600
Subject: [PATCH 4/8] make retry inline

---
 extra/combinators/lib/lib.factor | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/extra/combinators/lib/lib.factor b/extra/combinators/lib/lib.factor
index 019f4fe376..08336fd32e 100755
--- a/extra/combinators/lib/lib.factor
+++ b/extra/combinators/lib/lib.factor
@@ -170,4 +170,4 @@ MACRO: construct-slots ( assoc tuple-class -- tuple )
     >r keep r> rot [ call ] [ 2drop f ] if ; inline
 
 : retry ( quot n -- )
-    swap [ drop ] swap compose attempt-all ;
+    swap [ drop ] swap compose attempt-all ; inline

From ad2d06806b16d38ac48bc56d110065cf4b2b42a2 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 00:55:24 -0600
Subject: [PATCH 5/8] s/temporary/unique/

---
 extra/io/unix/unix.factor       | 2 +-
 extra/io/windows/windows.factor | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/extra/io/unix/unix.factor b/extra/io/unix/unix.factor
index a328a3baf4..11cdc0aa3b 100755
--- a/extra/io/unix/unix.factor
+++ b/extra/io/unix/unix.factor
@@ -1,5 +1,5 @@
 USING: io.unix.backend io.unix.files io.unix.sockets io.timeouts
-io.unix.launcher io.unix.mmap io.backend io.files.temporary
+io.unix.launcher io.unix.mmap io.backend io.files.unique
 combinators namespaces system vocabs.loader sequences ;
 
 "io.unix." os append require
diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor
index 2c2ad66221..06dbaf89f7 100755
--- a/extra/io/windows/windows.factor
+++ b/extra/io/windows/windows.factor
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types arrays destructors io io.backend
 io.buffers io.files io.nonblocking io.sockets io.binary
-io.sockets.impl io.windows.files.temporary windows.errors
+io.sockets.impl io.windows.files.unique windows.errors
 strings io.streams.duplex kernel math namespaces sequences
 windows windows.kernel32 windows.shell32 windows.types
 windows.winsock splitting continuations math.bitfields ;

From 869cfd54630a7259dfdab9d17e50aaefec6b36d8 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 15:38:20 -0600
Subject: [PATCH 6/8] fix sqlite -- wasn't settin gthe bound? flag

---
 extra/db/sqlite/sqlite.factor       | 3 ++-
 extra/db/tuples/tuples-tests.factor | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor
index b980e99718..d873e98a95 100755
--- a/extra/db/sqlite/sqlite.factor
+++ b/extra/db/sqlite/sqlite.factor
@@ -64,7 +64,8 @@ M: sqlite-statement bind-tuple ( tuple statement -- )
             [ sql-spec-type ] tri 3array
         ] with map
     ] keep
-    [ set-statement-bind-params ] keep bind-statement* ;
+    [ set-statement-bind-params ] keep
+    t over set-statement-bound? bind-statement* ;
 
 : last-insert-id ( -- id )
     db get db-handle sqlite3_last_insert_rowid
diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor
index c9e6d302e0..ade18286b4 100755
--- a/extra/db/tuples/tuples-tests.factor
+++ b/extra/db/tuples/tuples-tests.factor
@@ -81,7 +81,7 @@ person "PERSON"
 1 "billy" 10 3.14 <assigned-person> the-person1 set
 2 "johnny" 10 3.14 <assigned-person> the-person2 set
 
-test-sqlite
+! test-sqlite
 ! test-postgresql
 
 TUPLE: paste n summary author channel mode contents timestamp annotations ;

From 93a8cbcac3fb462ade75625c8347c01c9b20f2a9 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 15:41:54 -0600
Subject: [PATCH 7/8] fix a hack. oops

---
 extra/db/sqlite/sqlite.factor       | 6 +++---
 extra/db/tuples/tuples-tests.factor | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor
index d873e98a95..c03496530b 100755
--- a/extra/db/sqlite/sqlite.factor
+++ b/extra/db/sqlite/sqlite.factor
@@ -53,7 +53,8 @@ M: sqlite-result-set dispose ( result-set -- )
 
 M: sqlite-statement bind-statement* ( statement -- )
     dup statement-bound? [ dup reset-statement ] when
-    [ statement-bind-params ] [ statement-handle ] bi sqlite-bind ;
+    [ statement-bind-params ] [ statement-handle ] bi
+    sqlite-bind ;
 
 M: sqlite-statement bind-tuple ( tuple statement -- )
     [
@@ -64,8 +65,7 @@ M: sqlite-statement bind-tuple ( tuple statement -- )
             [ sql-spec-type ] tri 3array
         ] with map
     ] keep
-    [ set-statement-bind-params ] keep
-    t over set-statement-bound? bind-statement* ;
+    bind-statement ;
 
 : last-insert-id ( -- id )
     db get db-handle sqlite3_last_insert_rowid
diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor
index ade18286b4..c9e6d302e0 100755
--- a/extra/db/tuples/tuples-tests.factor
+++ b/extra/db/tuples/tuples-tests.factor
@@ -81,7 +81,7 @@ person "PERSON"
 1 "billy" 10 3.14 <assigned-person> the-person1 set
 2 "johnny" 10 3.14 <assigned-person> the-person2 set
 
-! test-sqlite
+test-sqlite
 ! test-postgresql
 
 TUPLE: paste n summary author channel mode contents timestamp annotations ;

From b7f9aac2106499deeb65db76d9977e3ac87200b8 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Fri, 29 Feb 2008 17:10:22 -0600
Subject: [PATCH 8/8] fix with-unique-file

---
 extra/io/files/unique/unique.factor         | 2 +-
 extra/io/unix/unix.factor                   | 2 +-
 extra/io/windows/files/unique/unique.factor | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/extra/io/files/unique/unique.factor b/extra/io/files/unique/unique.factor
index 3a1c3c46b8..b39a14c7f5 100644
--- a/extra/io/files/unique/unique.factor
+++ b/extra/io/files/unique/unique.factor
@@ -29,7 +29,7 @@ PRIVATE>
     ] 3curry unique-retries retry ;
 
 : with-unique-file ( quot -- path )
-    >r f f make-unique-file r> with-stream ; inline
+    >r f f make-unique-file r> rot [ with-stream ] dip ; inline
 
 : with-temporary-file ( quot -- )
     with-unique-file delete-file ; inline
diff --git a/extra/io/unix/unix.factor b/extra/io/unix/unix.factor
index 11cdc0aa3b..b7111c5eac 100755
--- a/extra/io/unix/unix.factor
+++ b/extra/io/unix/unix.factor
@@ -1,5 +1,5 @@
 USING: io.unix.backend io.unix.files io.unix.sockets io.timeouts
-io.unix.launcher io.unix.mmap io.backend io.files.unique
+io.unix.launcher io.unix.mmap io.backend io.unix.files.unique
 combinators namespaces system vocabs.loader sequences ;
 
 "io.unix." os append require
diff --git a/extra/io/windows/files/unique/unique.factor b/extra/io/windows/files/unique/unique.factor
index 01e654751e..5f11bf6142 100644
--- a/extra/io/windows/files/unique/unique.factor
+++ b/extra/io/windows/files/unique/unique.factor
@@ -1,4 +1,4 @@
-USING: kernel system ;
+USING: kernel system io.files.unqiue io.files.unique.backend ;
 IN: io.windows.files.unique
 
 M: windows-io (make-unique-file) ( path -- stream )