~ chicken-core (chicken-5) 0440011fdb38d94119a38162c42c5cd1bac8dab7


commit 0440011fdb38d94119a38162c42c5cd1bac8dab7
Author:     felix <bunny351@gmail.com>
AuthorDate: Thu Apr 29 09:53:33 2010 +0200
Commit:     felix <bunny351@gmail.com>
CommitDate: Thu Apr 29 09:53:33 2010 +0200

    - removed deprecated `-host-extension' option of `chicken-install'
    - added `create-temporary-directory' (files unit)
    - removed deprecated second optional argument to `make-absolute-pathname' (files unit)
    - removed deprecated `canonical-path' (posix unit)
    - removed deprecated `current-environment' (posix unit)
    - started moving definitions into `posix-common.scm'

diff --git a/chicken-install.scm b/chicken-install.scm
index c9063a67..9bcb7c6e 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -614,8 +614,7 @@ EOF
                        ((string=? "-test" arg)
                         (set! *run-tests* #t)
                         (loop (cdr args) eggs))
-                       ((or (string=? "-host" arg)
-			    (string=? "-host-extension" arg)) ; DEPRECATED
+                       ((string=? "-host" arg)
                         (set! *host-extension* #t)
                         (loop (cdr args) eggs))
 		       ((string=? "-deploy" arg)
diff --git a/distribution/manifest b/distribution/manifest
index bb470550..0877f8d5 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -81,6 +81,7 @@ regex.scm
 irregex.scm
 posixunix.scm
 posixwin.scm
+posix-common.scm
 profiler.scm
 runtime.c
 scheduler.scm
diff --git a/files.import.scm b/files.import.scm
index 344474da..334f0f5d 100644
--- a/files.import.scm
+++ b/files.import.scm
@@ -32,6 +32,7 @@
    make-pathname
    directory-null?
    make-absolute-pathname
+   create-temporary-directory
    create-temporary-file
    decompose-pathname
    absolute-pathname?
diff --git a/files.scm b/files.scm
index b87df181..0b7edf81 100644
--- a/files.scm
+++ b/files.scm
@@ -40,7 +40,15 @@
   (usual-integrations)
   (fixnum)
   (hide chop-pds absolute-pathname-root root-origin root-directory split-directory)
-  (disable-interrupts) )
+  (disable-interrupts) 
+  (foreign-declare #<<EOF
+#ifndef _WIN32
+# define C_mkdir(str)        C_fix(mkdir(C_c_string(str), S_IRWXU | S_IRWXG | S_IRWXO))
+#else
+# define C_mkdir(str)	    C_fix(mkdir(C_c_string(str)))
+#endif
+EOF
+))
 
 (cond-expand
  [paranoia]
@@ -248,11 +256,11 @@
        ext) ) )
 
   (set! make-pathname
-    (lambda (dirs file #!optional ext pds) ; The 'pds' argument is DEPRECATED
+    (lambda (dirs file #!optional ext)
       (_make-pathname 'make-pathname (canonicalize-dirs dirs pds) file ext pds)))
 
   (set! make-absolute-pathname
-    (lambda (dirs file #!optional ext pds) ; The 'pds' argument is DEPRECATED
+    (lambda (dirs file #!optional ext)
       (_make-pathname
        'make-absolute-pathname
        (let ([dir (canonicalize-dirs dirs pds)])
@@ -335,24 +343,55 @@
       (let-values ([(dir file _) (decompose-pathname pn)])
 	(make-pathname dir file ext) ) ) ) )
 
-(define create-temporary-file
-  (let ([get-environment-variable get-environment-variable]
-	[make-pathname make-pathname]
-	[file-exists? file-exists?]
-	[call-with-output-file call-with-output-file] )
-    (lambda ext
-      (let ((dir (or (get-environment-variable "TMPDIR") 
-		     (get-environment-variable "TEMP")
-		     (get-environment-variable "TMP")
-		     (file-exists? "/tmp")))
-	    (ext (if (pair? ext) (car ext) "tmp")))
-	(##sys#check-string ext 'create-temporary-file)
-	(let loop ()
-	  (let* ([n (##sys#fudge 16)]
-		 [pn (make-pathname dir (##sys#string-append "t" (number->string n 16)) ext)] )
-	    (if (file-exists? pn)
-		(loop)
-		(call-with-output-file pn (lambda (p) pn)) ) ) ) ) ) ) )
+(define create-temporary-file)
+(define create-temporary-directory)
+
+(let ((get-environment-variable get-environment-variable)
+      (make-pathname make-pathname)
+      (file-exists? file-exists?)
+      (directory-exists? directory-exists?)
+      (call-with-output-file call-with-output-file) 
+      (temp #f)
+      (temp-prefix "temp"))
+  (define (tempdir)
+    (or temp
+	(let ((tmp 
+	       (or (get-environment-variable "TMPDIR") 
+		   (get-environment-variable "TEMP")
+		   (get-environment-variable "TMP")
+		   (file-exists? "/tmp")
+		   (
+	  (set! temp tmp)
+	  tmp)))
+  (set! create-temporary-file
+    (lambda (#!optional (ext "tmp"))
+      (##sys#check-string ext 'create-temporary-file)
+      (let loop ()
+	(let* ((n (##sys#fudge 16))
+	       (pn (make-pathname 
+		    (tempdir)
+		    (##sys#string-append 
+		     temp-prefix
+		     (number->string n 16)) ext)) )
+	  (if (file-exists? pn)
+	      (loop)
+	      (call-with-output-file pn (lambda (p) pn)) ) ) ) ) )
+  (set! create-temporary-directory
+    (lambda ()
+      (let loop ()
+	(let* ((n (##sys#fudge 16))
+	       (pn (make-pathname 
+		    (tempdir)
+		    (string-append
+		     temp-prefix
+		     (number->string n 16)))))
+	  (if (directory-exists? pn) 
+	      (loop)
+	      (let ((r (##core#inline "C_mkdir" (##sys#make-c-string pn))))
+		(##sys#signal-hook 
+		 #:file-error 'create-temporary-directory
+		 (##sys#string-append "cannot create temporary directory - " strerror)
+		 name) )))))))
 
 
 ;;; normalize pathname for a particular platform
@@ -365,9 +404,9 @@
 	(display display)
 	(bldplt (if (memq (build-platform) '(msvc mingw32)) 'windows 'unix)) )
     (define (addpart part parts)
-      (cond ((string=? "." part)        parts )
-            ((string=? ".." part)       (if (null? parts) '("..") (cdr parts)) )
-            (else                       (cons part parts) ) ) )
+      (cond ((string=? "." part) parts)
+            ((string=? ".." part) (if (null? parts) '("..") (cdr parts)))
+            (else (cons part parts) ) ) )
     (lambda (path #!optional (platform bldplt))
       (let ((sep (if (eq? platform 'windows) #\\ #\/)))
 	(##sys#check-string path 'normalize-pathname)
diff --git a/library.scm b/library.scm
index dabacde0..e3204a43 100644
--- a/library.scm
+++ b/library.scm
@@ -1244,7 +1244,7 @@ EOF
     (lambda (key args #!optional thunk)
       (##sys#check-list args 'get-keyword)
       (let ((r (##core#inline "C_i_get_keyword" key args tag)))
-	(if (eq? r tag)
+	(if (eq? r tag)			; not found
 	    (and thunk (thunk))
 	    r)))))
 
diff --git a/manual/Unit files b/manual/Unit files
index 7d9e0985..46285a9f 100644
--- a/manual/Unit files	
+++ b/manual/Unit files	
@@ -110,7 +110,7 @@ Returns 3 values: the {{base-origin}}, {{base-directory}}, and the
 * On Windows {{(decompose-directory "c:foo/bar")}} => {{"c:" #f ("foo" "bar")}}
 
 
-=== Temporary files
+=== Temporary files and directories
 
 ==== create-temporary-file
 
@@ -119,7 +119,19 @@ Returns 3 values: the {{base-origin}}, {{base-directory}}, and the
 Creates an empty temporary file and returns its pathname. If
 {{EXTENSION}} is not given, then {{.tmp}} is used. If the
 environment variable {{TMPDIR, TEMP}} or {{TMP}} is set,
-then the pathname names a file in that directory.
+then the pathname names a file in that directory. If none of
+the environment variables is given the location of the
+temporary file defaults to {{/tmp}} if it exists or the 
+current-directory
+
+
+==== create-temporary-directory
+
+<procedure>(create-temporary-directory)</procedure>
+
+Creates an empty temporary directory and returns its pathname. If the
+environment variable {{TMPDIR, TEMP}} or {{TMP}} is set, then the
+temporary directory is created at that location.
 
 
 === Deleting a file without signalling an error
diff --git a/posix-common.scm b/posix-common.scm
new file mode 100644
index 00000000..508fad7f
--- /dev/null
+++ b/posix-common.scm
@@ -0,0 +1,69 @@
+;;;; posix-common.scm - common code for UNIX and Windows versions of the posix unit
+;
+; Copyright (c) 2010, The Chicken Team
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
+; conditions are met:
+;
+;   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+;     disclaimer.
+;   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+;     disclaimer in the documentation and/or other materials provided with the distribution.
+;   Neither the name of the author nor the names of its contributors may be used to endorse or promote
+;     products derived from this software without specific prior written permission.
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+
+
+;;; Find matching files:
+
+(define find-files
+  (let ([glob glob]
+	[string-match string-match]
+	[make-pathname make-pathname]
+	[pathname-file pathname-file]
+	[directory? directory?] )
+    (lambda (dir pred . action-id-limit)
+      (let-optionals
+	  action-id-limit
+	  ([action (lambda (x y) (cons x y))] ; we want cons inlined
+	   [id '()]
+	   [limit #f] )
+	(##sys#check-string dir 'find-files)
+	(let* ([depth 0]
+	       [lproc
+		(cond [(not limit) (lambda _ #t)]
+		      [(fixnum? limit) (lambda _ (fx< depth limit))]
+		      [else limit] ) ]
+	       [pproc
+		(if (or (string? pred) (regexp? pred))
+		    (lambda (x) (string-match pred x))
+		    pred) ] )
+	  (let loop ([fs (glob (make-pathname dir "*"))]
+		     [r id] )
+	    (if (null? fs)
+		r
+		(let ([f (##sys#slot fs 0)]
+		      [rest (##sys#slot fs 1)] )
+		  (cond [(directory? f)
+			 (cond [(member (pathname-file f) '("." "..")) (loop rest r)]
+			       [(lproc f)
+				(loop rest
+				      (fluid-let ([depth (fx+ depth 1)])
+					(loop (glob (make-pathname f "*"))
+					      (if (pproc f) (action f r) r)) ) ) ]
+			       [else (loop rest (if (pproc f) (action f r) r))] ) ]
+			[(pproc f) (loop rest (action f r))]
+			[else (loop rest r)] ) ) ) ) ) ) ) ) )
+
+
+;;; TODO: add more here...
diff --git a/posix.import.scm b/posix.import.scm
index 7ddf0ebe..2118ccb9 100644
--- a/posix.import.scm
+++ b/posix.import.scm
@@ -29,7 +29,6 @@
  '(_exit
    call-with-input-pipe
    call-with-output-pipe
-   canonical-path			; DEPRECATED
    change-directory
    change-file-mode
    change-file-owner
@@ -44,7 +43,6 @@
    current-effective-group-id
    current-effective-user-id
    current-effective-user-name
-   current-environment			; DEPRECATED
    get-environment-variables
    current-group-id
    current-process-id
diff --git a/posixunix.scm b/posixunix.scm
index 28460997..6f0bf358 100644
--- a/posixunix.scm
+++ b/posixunix.scm
@@ -956,72 +956,6 @@ EOF
                 (##sys#substring buffer 0 len)
                 (posix-error #:file-error 'current-directory "cannot retrieve current directory") ) ) ) ) ) )
 
-(define canonical-path			; DEPRECATED
-    (let ((null?      null?)
-          (char=?     char=?)
-          (string=?   string=?)
-          (alpha?     char-alphabetic?)
-          (sref       string-ref)
-          (ssplit     (cut string-split <> "/\\"))
-          (sappend    string-append)
-          (isperse    (cut string-intersperse <> "/"))
-          (sep?       (lambda (c) (or (char=? #\/ c) (char=? #\\ c))))
-          (get-environment-variable     get-environment-variable)
-          (user       current-user-name)
-          (cwd        (let ((cw   current-directory))
-                          (lambda ()
-                              (condition-case (cw)
-                                  (var ()    "/"))))))
-        (lambda (path)
-            (##sys#check-string path 'canonical-path)
-            (let ((p   (cond ((fx= 0 (##sys#size path))
-                                 (sappend (cwd) "/"))
-                             ((and (fx< (##sys#size path) 3)
-                                   (sep? (sref path 0)))
-                                 path)
-                             ((fx= 1 (##sys#size path))
-                                 (sappend (cwd) "/" path))
-                             ((and (char=? #\~ (sref path 0))
-                                   (sep? (sref path 1)))
-                                 (sappend
-                                     (or (get-environment-variable "HOME")
-                                         (sappend "/home/" (user)))
-                                     (##sys#substring path 1
-                                         (##sys#size path))))
-                             ((fx= 2 (##sys#size path))
-                                 (sappend (cwd) "/" path))
-                             ((and (alpha? (sref path 0))
-                                   (char=? #\: (sref path 1))
-                                   (sep? (sref path 2)))
-                                 (##sys#substring path 3 (##sys#size path)))
-                             ((and (char=? #\/ (sref path 0))
-                                   (alpha? (sref path 1))
-                                   (char=? #\: (sref path 2)))
-                                 (##sys#substring path 3 (##sys#size path)))
-                             ((sep? (sref path 0))
-                                 path)
-                             (else
-                                 (sappend (cwd) "/" path)))))
-                (let loop ((l   (ssplit p))
-                           (r   '()))
-                    (if (null? l)
-                        (if (null? r)
-                            "/"
-                            (if (sep? (sref p (- (##sys#size p) 1)))
-                                (sappend
-                                    "/"
-                                    (isperse (reverse (cons "" r))))
-                                (sappend
-                                    "/"
-                                    (isperse (reverse r)))))
-                        (loop
-                            (cdr l)
-                            (if (string=? ".." (car l))
-                                (cdr r)
-                                (if (string=? "." (car l))
-                                    r
-                                    (cons (car l) r))))))))))
-                           
 
 ;;; Pipes:
 
@@ -1904,8 +1838,6 @@ EOF
                     (scan (fx+ j 1)) ) )
               '() ) ) ) ) ) )
 
-(define current-environment get-environment-variables) ; DEPRECATED
-
 
 ;;; Memory mapped I/O:
 
@@ -2357,47 +2289,6 @@ EOF
     (lambda (cmd #!optional args env)
       (%process 'process* #t cmd args env) )) )
 
-;;; Find matching files:
-
-(define find-files
-  (let ([glob glob]
-	[string-match string-match]
-	[make-pathname make-pathname]
-	[pathname-file pathname-file]
-	[directory? directory?] )
-    (lambda (dir pred . action-id-limit)
-      (let-optionals
-	  action-id-limit
-	  ([action (lambda (x y) (cons x y))] ; we want cons inlined
-	   [id '()]
-	   [limit #f] )
-	(##sys#check-string dir 'find-files)
-	(let* ([depth 0]
-	       [lproc
-		(cond [(not limit) (lambda _ #t)]
-		      [(fixnum? limit) (lambda _ (fx< depth limit))]
-		      [else limit] ) ]
-	       [pproc
-		(if (or (string? pred) (regexp? pred))
-		    (lambda (x) (string-match pred x))
-		    pred) ] )
-	  (let loop ([fs (glob (make-pathname dir "*"))]
-		     [r id] )
-	    (if (null? fs)
-		r
-		(let ([f (##sys#slot fs 0)]
-		      [rest (##sys#slot fs 1)] )
-		  (cond [(directory? f)
-			 (cond [(member (pathname-file f) '("." "..")) (loop rest r)]
-			       [(lproc f)
-				(loop rest
-				      (fluid-let ([depth (fx+ depth 1)])
-					(loop (glob (make-pathname f "*"))
-					      (if (pproc f) (action f r) r)) ) ) ]
-			       [else (loop rest (if (pproc f) (action f r) r))] ) ]
-			[(pproc f) (loop rest (action f r))]
-			[else (loop rest r)] ) ) ) ) ) ) ) ) )
-
 
 ;;; chroot:
 
@@ -2407,3 +2298,8 @@ EOF
       (##sys#check-string dir 'set-root-directory!)
       (when (fx< (chroot dir) 0)
         (posix-error #:file-error 'set-root-directory! "unable to change root directory" dir) ) ) ) )
+
+
+;;; common code
+
+(include "posix-common.scm")
diff --git a/posixwin.scm b/posixwin.scm
index e422cbf8..85cfd3b3 100644
--- a/posixwin.scm
+++ b/posixwin.scm
@@ -1279,81 +1279,6 @@ EOF
 		(##sys#signal-hook #:file-error 'current-directory "cannot retrieve current directory") ) ) ) ) ) )
 
 
-(define canonical-path                                  ;;DEPRECATED
-    (let ((null?      null?)
-          (char=?     char=?)
-          (string=?   string=?)
-          (alpha?     char-alphabetic?)
-          (sref       string-ref)
-          (ssplit     (cut string-split <> "/\\"))
-          (sappend    string-append)
-          (isperse    (cut string-intersperse <> "\\"))
-          (sep?       (lambda (c) (or (char=? #\/ c) (char=? #\\ c))))
-          (user       current-user-name)
-          (cwd        (let ((cw   current-directory))
-                          (lambda ()
-                              (condition-case (cw)
-                                  (var ()    "c:\\"))))))
-        (lambda (path)
-            (##sys#check-string path 'canonical-path)
-            (let ((p   (cond ((fx= 0 (##sys#size path))
-                                 (sappend (cwd) "\\"))
-                             ((and (fx< (##sys#size path) 3)
-                                   (sep? (sref path 0)))
-                                 (sappend
-                                     (##sys#substring (cwd) 0 2)
-                                     path))
-                             ((fx= 1 (##sys#size path))
-                                 (sappend (cwd) "\\" path))
-                             ((and (char=? #\~ (sref path 0))
-                                   (sep? (sref path 1)))
-                                 (sappend
-                                     (##sys#substring (cwd) 0 3)
-                                     "Documents and Settings\\"
-                                     (user)
-                                     (##sys#substring path 1
-                                         (##sys#size path))))
-                             ((fx= 2 (##sys#size path))
-                                 (sappend (cwd) "\\" path))
-                             ((and (alpha? (sref path 0))
-                                   (char=? #\: (sref path 1))
-                                   (sep? (sref path 2)))
-                                 path)
-                             ((and (char=? #\/ (sref path 0))
-                                   (alpha? (sref path 1))
-                                   (char=? #\: (sref path 2)))
-                                 (sappend
-                                     (##sys#substring path 1 3)
-                                     "\\"
-                                     (##sys#substring path 3
-                                         (##sys#size path))))
-                             ((sep? (sref path 0))
-                                 (sappend
-                                     (##sys#substring (cwd) 0 2)
-                                     path))
-                             (else
-                                 (sappend (cwd) "\\" path)))))
-                (let loop ((l   (ssplit (##sys#substring p 3 (##sys#size p))))
-                           (r   '()))
-                    (if (null? l)
-                        (if (null? r)
-                            (##sys#substring p 0 3)
-                            (if (sep? (sref p (- (##sys#size p) 1)))
-                                (sappend
-                                    (##sys#substring p 0 3)
-                                    (isperse (reverse (cons "" r))))
-                                (sappend
-                                    (##sys#substring p 0 3)
-                                    (isperse (reverse r)))))
-                        (loop
-                            (cdr l)
-                            (if (string=? ".." (car l))
-                                (cdr r)
-                                (if (string=? "." (car l))
-                                    r
-                                    (cons (car l) r))))))))))
-                           
-
 ;;; Pipes:
 
 (let ()
@@ -1707,7 +1632,6 @@ EOF
 		    (scan (fx+ j 1)) ) )
 	      '() ) ) ) ) ) )
 
-(define current-environment get-environment-variables) ; DEPRECATED
 
 ;;; Time related things:
 
@@ -2059,47 +1983,6 @@ EOF
 	(##sys#error 'current-user-name "cannot retrieve current user-name") ) ) )
 
 
-;;; Find matching files:
-
-(define find-files
-  (let ([glob glob]
-	[string-match string-match]
-	[make-pathname make-pathname]
-	[pathname-file pathname-file]
-	[directory? directory?] )
-    (lambda (dir pred . action-id-limit)
-      (let-optionals
-	  action-id-limit
-	  ([action (lambda (x y) (cons x y))] ; we want cons inlined
-	   [id '()]
-	   [limit #f] )
-	(##sys#check-string dir 'find-files)
-	(let* ([depth 0]
-	       [lproc
-		(cond [(not limit) (lambda _ #t)]
-		      [(fixnum? limit) (lambda _ (fx< depth limit))]
-		      [else limit] ) ]
-	       [pproc
-		(if (or (string? pred) (regexp? pred))
-		    (lambda (x) (string-match pred x))
-		    pred) ] )
-	  (let loop ([fs (glob (make-pathname dir "*"))]
-		     [r id] )
-	    (if (null? fs)
-		r
-		(let ([f (##sys#slot fs 0)]
-		      [rest (##sys#slot fs 1)] )
-		  (cond [(directory? f)
-			 (cond [(member (pathname-file f) '("." "..")) (loop rest r)]
-			       [(lproc f)
-				(loop rest
-				      (fluid-let ([depth (fx+ depth 1)])
-					(loop (glob (make-pathname f "*"))
-					      (if (pproc f) (action f r) r)) ) ) ]
-			       [else (loop rest (if (pproc f) (action f r) r))] ) ]
-			[(pproc f) (loop rest (action f r))]
-			[else (loop rest r)] ) ) ) ) ) ) ) ) )
-
 ;;; unimplemented stuff:
 
 (define-syntax define-unimplemented
@@ -2172,3 +2055,8 @@ EOF
 (define prot/none 0)
 (define prot/read 0)
 (define prot/write 0)
+
+
+;;; common code
+
+(include "posix-common.scm")
diff --git a/rules.make b/rules.make
index 27c02387..7c34c762 100644
--- a/rules.make
+++ b/rules.make
@@ -860,9 +860,9 @@ srfi-69.c: $(SRCDIR)srfi-69.scm $(SRCDIR)private-namespace.scm
 	$(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@ -extend $(SRCDIR)private-namespace.scm
 utils.c: $(SRCDIR)utils.scm
 	$(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@ 
-posixunix.c: $(SRCDIR)posixunix.scm
+posixunix.c: $(SRCDIR)posixunix.scm $(SRCDIR)posix-common.scm
 	$(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@ 
-posixwin.c: $(SRCDIR)posixwin.scm
+posixwin.c: $(SRCDIR)posixwin.scm $(SRCDIR)posix-common.scm
 	$(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@ 
 regex.c: $(SRCDIR)regex.scm $(SRCDIR)irregex.scm
 	$(CHICKEN) $< $(CHICKEN_LIBRARY_OPTIONS) -output-file $@ 
diff --git a/setup-api.scm b/setup-api.scm
index 01d14967..4b1bfb5f 100644
--- a/setup-api.scm
+++ b/setup-api.scm
@@ -103,8 +103,6 @@
 (define (shellpath str)
   (qs (normalize-pathname str)))
 
-(define (cross-chicken) (##sys#fudge 39)) ; DEPRECATED
-
 (define *csc-options* '())
 (define *base-directory* (current-directory))
 
diff --git a/types.db b/types.db
index bbd557b8..f9f366af 100644
--- a/types.db
+++ b/types.db
@@ -519,6 +519,7 @@
 (make-pathname (procedure make-pathname (* * #!optional string string) string))
 (directory-null? (procedure directory-null? (string) boolean))
 (make-absolute-pathname (procedure make-absolute-pathname (* * #!optional string string) string))
+(create-temporary-directory (procedure create-temporary-directory () string))
 (create-temporary-file (procedure create-temporary-file (#!optional string) string))
 (decompose-pathname (procedure decompose-pathname (string) * * *))
 (absolute-pathname? (procedure absolute-pathname? (string) boolean))
Trap