>From 2032a7ea3a499fee8382a7a92c02ee265336ddcf Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Sun, 11 Mar 2018 13:53:04 +1300 Subject: [PATCH] A few chicken.file and chicken.file.posix module changes Move the following procedures into the "chicken.file.posix" module: create-fifo create-symbolic-link read-symbolic-link file-type block-device? character-device? directory? regular-file? socket? fifo? symbolic-link? Introduce a local version of `symbolic-link?' in file.scm and subsequently drop the file unit's dependency on posix. Replace all use of `directory?' with `directory-exists?' throughout the source tree. Rename `file-{copy,move}' to `{copy,move}-file' for consistency with the the other file management procedures in the "chicken.file" module. Add a "clobber" argument to `rename-file' and make it avoid overwriting files by default, again for consistency. Check the "clobber" flag before hitting the filesystem when validating arguments to `{copy,move,rename}-file', since the second test is not necessary when "clobber" is true. Standardise the parameter names and error messages across these three procedures. Rename the permission-related procedures in "chicken.file" from `file-{read,write,execute}-access?' to `file-{read,writ,execut}able?'. Use C_c_string() instead of of C_data_pointer() when handling c-string arguments in the file and posix units. --- NEWS | 4 + chicken-install.scm | 13 ++- chicken.h | 2 - file.scm | 185 +++++++++++++++++--------------------- posix-common.scm | 2 +- posix.scm | 7 +- posixunix.scm | 20 ++--- posixwin.scm | 10 +-- tests/executable-tests.scm | 1 + tests/posix-tests.scm | 3 +- tests/private-repository-test.scm | 3 +- tests/test-find-files.scm | 1 + types.db | 12 +-- 13 files changed, 127 insertions(+), 136 deletions(-) diff --git a/NEWS b/NEWS index e7486888..ceda95b7 100644 --- a/NEWS +++ b/NEWS @@ -78,6 +78,10 @@ good pseudo random number generator (WELL512). - `glob` now returns an empty list for non-existent or inaccessible directories, instead of erroring out. + - `file-copy' and `file-move' have been renamed to `copy-file' and + `move-file', for consistency with `delete-file' and `rename-file'. + - `rename-file' now refuses to overwrite an existing file unless an + optional "clobber" argument is provided. - Module system - The compiler has been modularised, for improved namespacing. This diff --git a/chicken-install.scm b/chicken-install.scm index 7e9ddd1f..7195d3fb 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -112,7 +112,7 @@ (get-environment-variable "DYLD_LIBRARY_PATH"))) (define (probe-dir dir) - (and dir (directory? dir) dir)) + (and dir (directory-exists? dir) dir)) (define cache-directory (or (get-environment-variable "CHICKEN_EGG_CACHE") @@ -528,10 +528,10 @@ (hf2 (string-append here "/" f))) (and (<= (file-modification-time tf2) (file-modification-time hf2)) - (if (directory? tf2) - (and (directory? hf2) + (if (directory-exists? tf2) + (and (directory-exists? hf2) (walk tf2 hf2)) - (not (directory? hf2))))))) + (not (directory-exists? hf2))))))) tfs)))) @@ -862,8 +862,7 @@ (version (caddr egg)) (testdir (make-pathname dir "tests")) (tscript (make-pathname testdir "run.scm"))) - (if (and (file-exists? testdir) - (directory? testdir) + (if (and (directory-exists? testdir) (file-exists? tscript)) (let ((old (current-directory)) (cmd (string-append default-csi " -s " tscript " " name " " (or version "")))) @@ -952,7 +951,7 @@ (with-output-to-file dbfile (lambda () (for-each (lambda (x) (write x) (newline)) db))) - (file-copy dbfile (make-pathname (install-path) +module-db+) #t)))) + (copy-file dbfile (make-pathname (install-path) +module-db+) #t)))) ;; purge cache for given (or all) eggs diff --git a/chicken.h b/chicken.h index 150736c4..ea957998 100644 --- a/chicken.h +++ b/chicken.h @@ -1270,8 +1270,6 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret; #define C_string_compare(to, from, n) C_fix(C_memcmp(C_c_string(to), C_c_string(from), C_unfix(n))) #define C_string_compare_case_insensitive(from, to, n) \ C_fix(C_memcasecmp(C_c_string(from), C_c_string(to), C_unfix(n))) -#define C_rename_file(old, new) C_fix(rename(C_c_string(old), C_c_string(new))) -#define C_delete_file(fname) C_fix(remove(C_c_string(fname))) #define C_poke_double(b, i, n) (((double *)C_data_pointer(b))[ C_unfix(i) ] = C_c_double(n), C_SCHEME_UNDEFINED) #define C_poke_c_string(b, i, from, s) (C_strlcpy((char *)C_block_item(b, C_unfix(i)), C_data_pointer(from), s), C_SCHEME_UNDEFINED) #define C_peek_fixnum(b, i) C_fix(C_block_item(b, C_unfix(i))) diff --git a/file.scm b/file.scm index 0dc721a9..7033c4a7 100644 --- a/file.scm +++ b/file.scm @@ -35,13 +35,13 @@ (declare (unit file) - (uses extras irregex pathname posix) + (uses extras irregex pathname) (fixnum) (disable-interrupts) (foreign-declare #< -#define C_test_access(fn, m) C_fix(access((char *)C_data_pointer(fn), C_unfix(m))) +#define C_test_access(fn, m) C_fix(access(C_c_string(fn), C_unfix(m))) /* For Windows */ #ifndef R_OK @@ -54,6 +54,8 @@ # define X_OK 2 #endif +#define C_rename(old, new) C_fix(rename(C_c_string(old), C_c_string(new))) +#define C_remove(str) C_fix(remove(C_c_string(str))) #define C_rmdir(str) C_fix(rmdir(C_c_string(str))) #ifndef _WIN32 @@ -149,38 +151,26 @@ readdir(DIR * dir) #define C_closedir(h) (closedir((DIR *)C_block_item(h, 0)), C_SCHEME_UNDEFINED) #define C_foundfile(e,b,l) (C_strlcpy(C_c_string(b), ((struct dirent *) C_block_item(e, 0))->d_name, l), C_fix(strlen(((struct dirent *) C_block_item(e, 0))->d_name))) +static C_word C_fcall C_u_i_symbolic_linkp(C_word path) +{ +#if !defined(_WIN32) || defined(__CYGWIN__) + struct stat buf; + if (lstat(C_c_string(path), &buf) == 0) + return C_mk_bool(S_ISLNK(buf.st_mode)); +#endif + return C_SCHEME_FALSE; +} + EOF )) (module chicken.file - (block-device? - character-device? - create-directory - create-fifo - create-symbolic-link - create-temporary-directory - create-temporary-file - delete-directory - delete-file - delete-file* - directory - directory-exists? - directory? - fifo? - file-copy - file-execute-access? - file-exists? - file-move - file-read-access? - file-type - file-write-access? - find-files - glob - read-symbolic-link - regular-file? - rename-file - socket? - symbolic-link?) + (create-directory delete-directory + create-temporary-file create-temporary-directory + delete-file delete-file* copy-file move-file rename-file + file-exists? directory-exists? + file-readable? file-writable? file-executable? + directory find-files glob) (import scheme chicken.base @@ -190,8 +180,7 @@ EOF chicken.io chicken.irregex chicken.pathname - chicken.process-context - chicken.posix) ; FIXME file should not depend on posix + chicken.process-context) (include "common-declarations.scm") @@ -207,6 +196,9 @@ EOF (let ([rn (##sys#update-errno)]) (apply ##sys#signal-hook type loc (string-append msg " - " (strerror rn)) args) ) ) ) ) + +;;; Existence checks: + (define (file-exists? name) (##sys#check-string name 'file-exists?) (and (##sys#file-exists? name #f #f 'file-exists?) name)) @@ -215,31 +207,6 @@ EOF (##sys#check-string name 'directory-exists?) (and (##sys#file-exists? name #f #t 'directory-exists?) name)) -(define (delete-file filename) - (##sys#check-string filename 'delete-file) - (unless (eq? 0 (##core#inline "C_delete_file" (##sys#make-c-string filename 'delete-file))) - (##sys#update-errno) - (##sys#signal-hook - #:file-error 'delete-file - (##sys#string-append "cannot delete file - " strerror) filename)) - filename) - -;;; Like `delete-file', but does nothing if the file doesn't exist: - -(define delete-file* - (lambda (file) - (and (file-exists? file) (delete-file file)))) - -(define (rename-file old new) - (##sys#check-string old 'rename-file) - (##sys#check-string new 'rename-file) - (unless (eq? 0 (##core#inline "C_rename_file" (##sys#make-c-string old 'rename-file) (##sys#make-c-string new))) - (##sys#update-errno) - (##sys#signal-hook - #:file-error 'rename-file - (##sys#string-append "cannot rename file - " strerror) old new)) - new) - ;;; Permissions: @@ -255,9 +222,9 @@ EOF #f (posix-error #:file-error loc "cannot access file" filename))))) -(define (file-read-access? filename) (test-access filename _r_ok 'file-read-access?)) -(define (file-write-access? filename) (test-access filename _w_ok 'file-write-access?)) -(define (file-execute-access? filename) (test-access filename _x_ok 'file-execute-access?)) +(define (file-readable? filename) (test-access filename _r_ok 'file-readable?)) +(define (file-writable? filename) (test-access filename _w_ok 'file-writable?)) +(define (file-executable? filename) (test-access filename _x_ok 'file-executable?)) ;;; Directories: @@ -287,6 +254,9 @@ EOF (loop) (cons file (loop))))))))) +(define-inline (*symbolic-link? name loc) + (##core#inline "C_u_i_symbolic_linkp" (##sys#make-c-string name loc))) + (define-inline (*create-directory loc name) (unless (fx= 0 (##core#inline "C_mkdir" (##sys#make-c-string name loc))) (posix-error #:file-error loc "cannot create directory" name))) @@ -299,7 +269,7 @@ EOF (if recursive (let loop ((dir (let-values (((dir file ext) (decompose-pathname name))) (if file (make-pathname dir file ext) dir)))) - (when (and dir (not (directory? dir))) + (when (and dir (not (directory-exists? dir))) (loop (pathname-directory dir)) (*create-directory 'create-directory dir))) (*create-directory 'create-directory name))) @@ -319,8 +289,8 @@ EOF follow-symlinks: #f))) (for-each (lambda (f) - ((cond ((symbolic-link? f) delete-file) - ((directory? f) rmdir) + ((cond ((*symbolic-link? f 'delete-directory) delete-file) + ((directory-exists? f) rmdir) (else delete-file)) f)) files) @@ -328,26 +298,46 @@ EOF (rmdir name)))) -;;; file-copy and file-move : they do what you'd think. +;;; File management: + +(define (delete-file filename) + (##sys#check-string filename 'delete-file) + (unless (eq? 0 (##core#inline "C_remove" (##sys#make-c-string filename 'delete-file))) + (##sys#update-errno) + (##sys#signal-hook + #:file-error 'delete-file + (##sys#string-append "cannot delete file - " strerror) filename)) + filename) + +(define (delete-file* file) + (and (file-exists? file) (delete-file file))) + +(define (rename-file oldfile newfile #!optional (clobber #f)) + (##sys#check-string oldfile 'rename-file) + (##sys#check-string newfile 'rename-file) + (when (and (not clobber) (file-exists? newfile)) + (##sys#error 'rename-file "newfile exists but clobber is false" newfile)) + (unless (eq? 0 (##core#inline + "C_rename" + (##sys#make-c-string oldfile 'rename-file) + (##sys#make-c-string newfile 'rename-file))) + (##sys#update-errno) + (##sys#signal-hook + #:file-error 'rename-file + (##sys#string-append "cannot rename file - " strerror) oldfile newfile)) + newfile) -(define (file-copy origfile newfile #!optional (clobber #f) (blocksize 1024)) - (##sys#check-string origfile 'file-copy) - (##sys#check-string newfile 'file-copy) - (##sys#check-number blocksize 'file-copy) +(define (copy-file oldfile newfile #!optional (clobber #f) (blocksize 1024)) + (##sys#check-string oldfile 'copy-file) + (##sys#check-string newfile 'copy-file) + (##sys#check-number blocksize 'copy-file) (unless (and (integer? blocksize) (> blocksize 0)) - (##sys#error - 'file-copy - "invalid blocksize given: not a positive integer" - blocksize)) - (and (file-exists? newfile) - (or clobber - (##sys#error - 'file-copy - "newfile exists but clobber is false" - newfile))) - (when (directory-exists? origfile) - (##sys#error 'file-copy "can not copy directories" origfile)) - (let* ((i (open-input-file origfile #:binary)) + (##sys#error 'copy-file "invalid blocksize - not a positive integer" blocksize)) + (when (directory-exists? oldfile) + (##sys#error 'copy-file "cannot copy directories" oldfile)) + (when (and (not clobber) (file-exists? newfile)) + (##sys#error 'copy-file "newfile exists but clobber is false" newfile)) + (let* ((i (open-input-file oldfile #:binary)) (o (open-output-file newfile #:binary)) (s (make-string blocksize))) (let loop ((d (read-string! blocksize s i)) @@ -361,24 +351,17 @@ EOF (write-string s d o) (loop (read-string! blocksize s i) (fx+ d l))))))) -(define (file-move origfile newfile #!optional (clobber #f) (blocksize 1024)) - (##sys#check-string origfile 'file-move) - (##sys#check-string newfile 'file-move) - (##sys#check-number blocksize 'file-move) +(define (move-file oldfile newfile #!optional (clobber #f) (blocksize 1024)) + (##sys#check-string oldfile 'move-file) + (##sys#check-string newfile 'move-file) + (##sys#check-number blocksize 'move-file) (unless (and (integer? blocksize) (> blocksize 0)) - (##sys#error - 'file-move - "invalid blocksize given: not a positive integer" - blocksize)) - (when (directory-exists? origfile) - (##sys#error 'file-move "can not move directories" origfile)) - (and (file-exists? newfile) - (or clobber - (##sys#error - 'file-move - "newfile exists but clobber is false" - newfile))) - (let* ((i (open-input-file origfile #:binary)) + (##sys#error 'move-file "invalid blocksize - not a positive integer" blocksize)) + (when (directory-exists? oldfile) + (##sys#error 'move-file "cannot move directories" oldfile)) + (when (and (not clobber) (file-exists? newfile)) + (##sys#error 'move-file "newfile exists but clobber is false" newfile)) + (let* ((i (open-input-file oldfile #:binary)) (o (open-output-file newfile #:binary)) (s (make-string blocksize))) (let loop ((d (read-string! blocksize s i)) @@ -387,7 +370,7 @@ EOF (begin (close-input-port i) (close-output-port o) - (delete-file origfile) + (delete-file oldfile) l) (begin (write-string s d o) @@ -498,9 +481,9 @@ EOF (let* ((filename (##sys#slot fs 0)) (f (make-pathname dir filename)) (rest (##sys#slot fs 1))) - (cond ((directory? f) + (cond ((directory-exists? f) (cond ((member filename '("." "..")) (loop dir rest r)) - ((and (symbolic-link? f) (not follow-symlinks)) + ((and (*symbolic-link? f 'find-files) (not follow-symlinks)) (loop dir rest (if (pproc f) (action f r) r))) ((lproc f) (loop dir diff --git a/posix-common.scm b/posix-common.scm index 2805bd27..2b3ab43d 100644 --- a/posix-common.scm +++ b/posix-common.scm @@ -37,7 +37,7 @@ static C_TLS struct stat C_statbuf; #define C_stat_type (C_statbuf.st_mode & S_IFMT) #define C_stat_perm (C_statbuf.st_mode & ~S_IFMT) -#define C_u_i_stat(fn) C_fix(C_stat((char *)C_data_pointer(fn), &C_statbuf)) +#define C_u_i_stat(fn) C_fix(C_stat(C_c_string(fn), &C_statbuf)) #define C_u_i_fstat(fd) C_fix(fstat(C_unfix(fd), &C_statbuf)) #ifndef S_IFSOCK diff --git a/posix.scm b/posix.scm index 0129dbd3..6b631964 100644 --- a/posix.scm +++ b/posix.scm @@ -48,7 +48,7 @@ current-effective-user-name current-group-id current-process-id current-user-id current-user-name directory? duplicate-fileno fcntl/dupfd fcntl/getfd - fcntl/getfl fcntl/setfd fcntl/setfl fifo? fifo? file-access-time + fcntl/getfl fcntl/setfd fcntl/setfl fifo? file-access-time file-change-time file-close file-control file-creation-mode file-group file-link file-lock file-lock/blocking file-mkstemp file-modification-time file-open @@ -147,12 +147,15 @@ (define errno/xdev _exdev)) (module chicken.file.posix - (duplicate-fileno fcntl/dupfd fcntl/getfd fcntl/getfl fcntl/setfd + (create-fifo create-symbolic-link read-symbolic-link + duplicate-fileno fcntl/dupfd fcntl/getfd fcntl/getfl fcntl/setfd fcntl/setfl file-access-time file-change-time file-modification-time file-close file-control file-creation-mode file-group file-link file-lock file-lock/blocking file-mkstemp file-open file-owner file-permissions file-position file-read file-select file-size file-stat file-test-lock file-truncate file-unlock file-write + file-type block-device? character-device? directory? fifo? + regular-file? socket? symbolic-link? fileno/stderr fileno/stdin fileno/stdout open-input-file* open-output-file* open/append open/binary open/creat open/excl open/fsync open/noctty diff --git a/posixunix.scm b/posixunix.scm index 02dec49a..e66144fb 100644 --- a/posixunix.scm +++ b/posixunix.scm @@ -115,9 +115,9 @@ static C_TLS struct stat C_statbuf; #define C_getgid getgid #define C_geteuid geteuid #define C_getegid getegid -#define C_chown(fn, u, g) C_fix(chown(C_data_pointer(fn), C_unfix(u), C_unfix(g))) +#define C_chown(fn, u, g) C_fix(chown(C_c_string(fn), C_unfix(u), C_unfix(g))) #define C_fchown(fd, u, g) C_fix(fchown(C_unfix(fd), C_unfix(u), C_unfix(g))) -#define C_chmod(fn, m) C_fix(chmod(C_data_pointer(fn), C_unfix(m))) +#define C_chmod(fn, m) C_fix(chmod(C_c_string(fn), C_unfix(m))) #define C_fchmod(fd, m) C_fix(fchmod(C_unfix(fd), C_unfix(m))) #define C_setuid(id) C_fix(setuid(C_unfix(id))) #define C_setgid(id) C_fix(setgid(C_unfix(id))) @@ -126,21 +126,21 @@ static C_TLS struct stat C_statbuf; #define C_setsid(dummy) C_fix(setsid()) #define C_setpgid(x, y) C_fix(setpgid(C_unfix(x), C_unfix(y))) #define C_getpgid(x) C_fix(getpgid(C_unfix(x))) -#define C_symlink(o, n) C_fix(symlink(C_data_pointer(o), C_data_pointer(n))) -#define C_do_readlink(f, b) C_fix(readlink(C_data_pointer(f), C_data_pointer(b), FILENAME_MAX)) -#define C_getpwnam(n) C_mk_bool((C_user = getpwnam((char *)C_data_pointer(n))) != NULL) +#define C_symlink(o, n) C_fix(symlink(C_c_string(o), C_c_string(n))) +#define C_do_readlink(f, b) C_fix(readlink(C_c_string(f), C_c_string(b), FILENAME_MAX)) +#define C_getpwnam(n) C_mk_bool((C_user = getpwnam(C_c_string(n))) != NULL) #define C_getpwuid(u) C_mk_bool((C_user = getpwuid(C_unfix(u))) != NULL) #define C_pipe(d) C_fix(pipe(C_pipefds)) -#define C_truncate(f, n) C_fix(truncate((char *)C_data_pointer(f), C_num_to_int(n))) +#define C_truncate(f, n) C_fix(truncate(C_c_string(f), C_num_to_int(n))) #define C_ftruncate(f, n) C_fix(ftruncate(C_unfix(f), C_num_to_int(n))) #define C_alarm alarm #define C_close(fd) C_fix(close(C_unfix(fd))) #define C_umask(m) C_fix(umask(C_unfix(m))) -#define C_u_i_lstat(fn) C_fix(lstat((char *)C_data_pointer(fn), &C_statbuf)) +#define C_u_i_lstat(fn) C_fix(lstat(C_c_string(fn), &C_statbuf)) -#define C_u_i_execvp(f,a) C_fix(execvp(C_data_pointer(f), (char *const *)C_c_pointer_vector_or_null(a))) -#define C_u_i_execve(f,a,e) C_fix(execve(C_data_pointer(f), (char *const *)C_c_pointer_vector_or_null(a), (char *const *)C_c_pointer_vector_or_null(e))) +#define C_u_i_execvp(f,a) C_fix(execvp(C_c_string(f), (char *const *)C_c_pointer_vector_or_null(a))) +#define C_u_i_execve(f,a,e) C_fix(execve(C_c_string(f), (char *const *)C_c_pointer_vector_or_null(a), (char *const *)C_c_pointer_vector_or_null(e))) #if defined(__FreeBSD__) || defined(C_MACOSX) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__sgi__) || defined(sgi) || defined(__DragonFly__) || defined(__SUNPRO_C) static C_TLS int C_uw; @@ -162,7 +162,7 @@ static C_TLS int C_uw; #ifdef __CYGWIN__ # define C_mkfifo(fn, m) C_fix(-1); #else -# define C_mkfifo(fn, m) C_fix(mkfifo((char *)C_data_pointer(fn), C_unfix(m))) +# define C_mkfifo(fn, m) C_fix(mkfifo(C_c_string(fn), C_unfix(m))) #endif #define C_flock_setup(t, s, n) (C_flock.l_type = C_unfix(t), C_flock.l_start = C_num_to_int(s), C_flock.l_whence = SEEK_SET, C_flock.l_len = C_num_to_int(n), C_SCHEME_UNDEFINED) diff --git a/posixwin.scm b/posixwin.scm index 38a3fbfc..574367a1 100644 --- a/posixwin.scm +++ b/posixwin.scm @@ -110,18 +110,18 @@ static C_TLS TCHAR C_username[255 + 1] = ""; #define open_text_output_pipe(a, n, name) open_binary_output_pipe(a, n, name) #define close_pipe(p) C_fix(_pclose(C_port_file(p))) -#define C_chmod(fn, m) C_fix(chmod(C_data_pointer(fn), C_unfix(m))) +#define C_chmod(fn, m) C_fix(chmod(C_c_string(fn), C_unfix(m))) #define C_pipe(d, m) C_fix(_pipe(C_pipefds, PIPE_BUF, C_unfix(m))) #define C_close(fd) C_fix(close(C_unfix(fd))) #define C_u_i_lstat(fn) C_u_i_stat(fn) -#define C_u_i_execvp(f,a) C_fix(execvp(C_data_pointer(f), (const char *const *)C_c_pointer_vector_or_null(a))) -#define C_u_i_execve(f,a,e) C_fix(execve(C_data_pointer(f), (const char *const *)C_c_pointer_vector_or_null(a), (const char *const *)C_c_pointer_vector_or_null(e))) +#define C_u_i_execvp(f,a) C_fix(execvp(C_c_string(f), (const char *const *)C_c_pointer_vector_or_null(a))) +#define C_u_i_execve(f,a,e) C_fix(execve(C_c_string(f), (const char *const *)C_c_pointer_vector_or_null(a), (const char *const *)C_c_pointer_vector_or_null(e))) /* MS replacement for the fork-exec pair */ -#define C_u_i_spawnvp(m,f,a) C_fix(spawnvp(C_unfix(m), C_data_pointer(f), (const char *const *)C_c_pointer_vector_or_null(a))) -#define C_u_i_spawnvpe(m,f,a,e) C_fix(spawnvpe(C_unfix(m), C_data_pointer(f), (const char *const *)C_c_pointer_vector_or_null(a), (const char *const *)C_c_pointer_vector_or_null(e))) +#define C_u_i_spawnvp(m,f,a) C_fix(spawnvp(C_unfix(m), C_c_string(f), (const char *const *)C_c_pointer_vector_or_null(a))) +#define C_u_i_spawnvpe(m,f,a,e) C_fix(spawnvpe(C_unfix(m), C_c_string(f), (const char *const *)C_c_pointer_vector_or_null(a), (const char *const *)C_c_pointer_vector_or_null(e))) #define C_open(fn, fl, m) C_fix(open(C_c_string(fn), C_unfix(fl), C_unfix(m))) #define C_read(fd, b, n) C_fix(read(C_unfix(fd), C_data_pointer(b), C_unfix(n))) diff --git a/tests/executable-tests.scm b/tests/executable-tests.scm index 9ad7761f..52074e59 100644 --- a/tests/executable-tests.scm +++ b/tests/executable-tests.scm @@ -3,6 +3,7 @@ (include "test.scm") (import (chicken file) + (chicken file posix) (chicken pathname) (chicken process-context) (chicken string)) diff --git a/tests/posix-tests.scm b/tests/posix-tests.scm index 103f14a5..e3ccbb69 100644 --- a/tests/posix-tests.scm +++ b/tests/posix-tests.scm @@ -1,7 +1,8 @@ (import (chicken pathname) (chicken file) + (chicken file posix) (chicken platform) - (chicken posix) + (chicken process) (chicken process-context) (chicken memory representation)) diff --git a/tests/private-repository-test.scm b/tests/private-repository-test.scm index 02e730eb..d293962e 100644 --- a/tests/private-repository-test.scm +++ b/tests/private-repository-test.scm @@ -4,7 +4,8 @@ (import (chicken pathname) (chicken platform) (chicken process-context) - (chicken file)) + (chicken file) + (chicken file posix)) (define read-symbolic-link* (cond-expand diff --git a/tests/test-find-files.scm b/tests/test-find-files.scm index f09c02a1..4aa7c772 100644 --- a/tests/test-find-files.scm +++ b/tests/test-find-files.scm @@ -1,4 +1,5 @@ (import (chicken file) + (chicken file posix) (chicken process-context) (chicken sort) (chicken string)) diff --git a/types.db b/types.db index eff9f9a4..429b8f04 100644 --- a/types.db +++ b/types.db @@ -1568,14 +1568,14 @@ (chicken.file#delete-file* (#(procedure #:clean #:enforce) chicken.file#delete-file* (string) *)) (chicken.file#directory-exists? (#(procedure #:clean #:enforce) chicken.file#directory-exists? (string) (or false string))) (chicken.file#file-exists? (#(procedure #:clean #:enforce) chicken.file#file-exists? (string) (or false string))) -(chicken.file#file-copy (#(procedure #:clean #:enforce) chicken.file#file-copy (string string #!optional * fixnum) fixnum)) -(chicken.file#file-move (#(procedure #:clean #:enforce) chicken.file#file-move (string string #!optional * fixnum) fixnum)) (chicken.file#find-files (#(procedure #:enforce) chicken.file#find-files (string #!rest) list)) (chicken.file#glob (#(procedure #:clean #:enforce) chicken.file#glob (#!rest string) list)) -(chicken.file#rename-file (#(procedure #:clean #:enforce) chicken.file#rename-file (string string) string)) -(chicken.file#file-read-access? (#(procedure #:clean #:enforce) chicken.file#file-read-access? (string) boolean)) -(chicken.file#file-write-access? (#(procedure #:clean #:enforce) chicken.file#file-write-access? (string) boolean)) -(chicken.file#file-execute-access? (#(procedure #:clean #:enforce) chicken.file#file-execute-access? (string) boolean)) +(chicken.file#copy-file (#(procedure #:clean #:enforce) chicken.file#copy-file (string string #!optional * fixnum) fixnum)) +(chicken.file#move-file (#(procedure #:clean #:enforce) chicken.file#move-file (string string #!optional * fixnum) fixnum)) +(chicken.file#rename-file (#(procedure #:clean #:enforce) chicken.file#rename-file (string string #!optional *) string)) +(chicken.file#file-readable? (#(procedure #:clean #:enforce) chicken.file#file-readable? (string) boolean)) +(chicken.file#file-writable? (#(procedure #:clean #:enforce) chicken.file#file-writable? (string) boolean)) +(chicken.file#file-executable? (#(procedure #:clean #:enforce) chicken.file#file-executable? (string) boolean)) ;; pathname -- 2.11.0