From e39783b10ab79b533e37d9ed5a7f46034266d69d Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 28 Feb 2008 12:46:01 -0600 Subject: [PATCH] unix: Refactor more things out of unix and into unix.stat unis.stat: Move some common code to unix.stat from unix.stat.linux and unix.stat.macosx --- extra/io/unix/files/files.factor | 3 +- extra/unix/stat/linux/32/32.factor | 27 ++---------- extra/unix/stat/linux/64/64.factor | 25 +---------- extra/unix/stat/macosx/macosx.factor | 23 ---------- extra/unix/stat/stat.factor | 56 +++++++++++++++++++++++- extra/unix/unix.factor | 64 +--------------------------- 6 files changed, 63 insertions(+), 135 deletions(-) diff --git a/extra/io/unix/files/files.factor b/extra/io/unix/files/files.factor index 6afbc33049..7b1c97abbe 100755 --- a/extra/io/unix/files/files.factor +++ b/extra/io/unix/files/files.factor @@ -1,8 +1,9 @@ ! 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 kernel math continuations math.bitfields byte-arrays +unix unix.stat kernel math continuations math.bitfields byte-arrays alien ; + IN: io.unix.files M: unix-io cwd diff --git a/extra/unix/stat/linux/32/32.factor b/extra/unix/stat/linux/32/32.factor index 4525fd3879..ed53fab86b 100644 --- a/extra/unix/stat/linux/32/32.factor +++ b/extra/unix/stat/linux/32/32.factor @@ -24,31 +24,10 @@ C-STRUCT: stat { "ulong" "unused4" } { "ulong" "unused5" } ; +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + FUNCTION: int __xstat ( int ver, char* pathname, stat* buf ) ; FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ; : stat ( pathname buf -- int ) 3 -rot __xstat ; -: lstat ( pathname buf -- int ) 3 -rot __lxstat ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: S_IFMT OCT: 170000 ; ! These bits determine file type. - -: S_IFDIR OCT: 40000 ; ! Directory. -: S_IFCHR OCT: 20000 ; ! Character device. -: S_IFBLK OCT: 60000 ; ! Block device. -: S_IFREG OCT: 100000 ; ! Regular file. -: S_IFIFO OCT: 010000 ; ! FIFO. -: S_IFLNK OCT: 120000 ; ! Symbolic link. -: S_IFSOCK OCT: 140000 ; ! Socket. - -: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ; - -: S_ISREG ( mode -- value ) S_IFREG S_ISTYPE ; -: S_ISDIR ( mode -- value ) S_IFDIR S_ISTYPE ; -: S_ISCHR ( mode -- value ) S_IFCHR S_ISTYPE ; -: S_ISBLK ( mode -- value ) S_IFBLK S_ISTYPE ; -: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ; -: S_ISLNK ( mode -- value ) S_IFLNK S_ISTYPE ; -: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ; - +: lstat ( pathname buf -- int ) 3 -rot __lxstat ; \ No newline at end of file diff --git a/extra/unix/stat/linux/64/64.factor b/extra/unix/stat/linux/64/64.factor index 3281af91d5..be6ad1e3fc 100644 --- a/extra/unix/stat/linux/64/64.factor +++ b/extra/unix/stat/linux/64/64.factor @@ -28,27 +28,4 @@ FUNCTION: int __xstat ( int ver, char* pathname, stat* buf ) ; FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ; : stat ( pathname buf -- int ) 3 -rot __xstat ; -: lstat ( pathname buf -- int ) 3 -rot __lxstat ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: S_IFMT OCT: 170000 ; ! These bits determine file type. - -: S_IFDIR OCT: 40000 ; ! Directory. -: S_IFCHR OCT: 20000 ; ! Character device. -: S_IFBLK OCT: 60000 ; ! Block device. -: S_IFREG OCT: 100000 ; ! Regular file. -: S_IFIFO OCT: 010000 ; ! FIFO. -: S_IFLNK OCT: 120000 ; ! Symbolic link. -: S_IFSOCK OCT: 140000 ; ! Socket. - -: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ; - -: S_ISREG ( mode -- value ) S_IFREG S_ISTYPE ; -: S_ISDIR ( mode -- value ) S_IFDIR S_ISTYPE ; -: S_ISCHR ( mode -- value ) S_IFCHR S_ISTYPE ; -: S_ISBLK ( mode -- value ) S_IFBLK S_ISTYPE ; -: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ; -: S_ISLNK ( mode -- value ) S_IFLNK S_ISTYPE ; -: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ; - +: lstat ( pathname buf -- int ) 3 -rot __lxstat ; \ No newline at end of file diff --git a/extra/unix/stat/macosx/macosx.factor b/extra/unix/stat/macosx/macosx.factor index 170d70403c..1cb3994708 100644 --- a/extra/unix/stat/macosx/macosx.factor +++ b/extra/unix/stat/macosx/macosx.factor @@ -27,26 +27,3 @@ C-STRUCT: stat FUNCTION: int stat ( char* pathname, stat* buf ) ; FUNCTION: int lstat ( char* pathname, stat* buf ) ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: S_IFMT OCT: 170000 ; ! These bits determine file type. - -: S_IFDIR OCT: 40000 ; ! Directory. -: S_IFCHR OCT: 20000 ; ! Character device. -: S_IFBLK OCT: 60000 ; ! Block device. -: S_IFREG OCT: 100000 ; ! Regular file. -: S_IFIFO OCT: 010000 ; ! FIFO. -: S_IFLNK OCT: 120000 ; ! Symbolic link. -: S_IFSOCK OCT: 140000 ; ! Socket. - -: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ; - -: S_ISREG ( mode -- value ) S_IFREG S_ISTYPE ; -: S_ISDIR ( mode -- value ) S_IFDIR S_ISTYPE ; -: S_ISCHR ( mode -- value ) S_IFCHR S_ISTYPE ; -: S_ISBLK ( mode -- value ) S_IFBLK S_ISTYPE ; -: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ; -: S_ISLNK ( mode -- value ) S_IFLNK S_ISTYPE ; -: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ; - diff --git a/extra/unix/stat/stat.factor b/extra/unix/stat/stat.factor index a3165fe214..ca0736b6d4 100644 --- a/extra/unix/stat/stat.factor +++ b/extra/unix/stat/stat.factor @@ -1,8 +1,62 @@ -USING: system combinators vocabs.loader ; +USING: kernel system combinators alien.syntax math vocabs.loader ; IN: unix.stat +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! File Types +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: S_IFMT OCT: 170000 ; ! These bits determine file type. + +: S_IFDIR OCT: 40000 ; ! Directory. +: S_IFCHR OCT: 20000 ; ! Character device. +: S_IFBLK OCT: 60000 ; ! Block device. +: S_IFREG OCT: 100000 ; ! Regular file. +: S_IFIFO OCT: 010000 ; ! FIFO. +: S_IFLNK OCT: 120000 ; ! Symbolic link. +: S_IFSOCK OCT: 140000 ; ! Socket. + +: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ; + +: S_ISREG ( mode -- value ) S_IFREG S_ISTYPE ; +: S_ISDIR ( mode -- value ) S_IFDIR S_ISTYPE ; +: S_ISCHR ( mode -- value ) S_IFCHR S_ISTYPE ; +: S_ISBLK ( mode -- value ) S_IFBLK S_ISTYPE ; +: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ; +: S_ISLNK ( mode -- value ) S_IFLNK S_ISTYPE ; +: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! File Access Permissions +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +! Read, write, execute/search by owner +: S_IRWXU OCT: 0000700 ; inline ! rwx mask owner +: S_IRUSR OCT: 0000400 ; inline ! r owner +: S_IWUSR OCT: 0000200 ; inline ! w owner +: S_IXUSR OCT: 0000100 ; inline ! x owner +! Read, write, execute/search by group +: S_IRWXG OCT: 0000070 ; inline ! rwx mask group +: S_IRGRP OCT: 0000040 ; inline ! r group +: S_IWGRP OCT: 0000020 ; inline ! w group +: S_IXGRP OCT: 0000010 ; inline ! x group +! Read, write, execute/search by others +: S_IRWXO OCT: 0000007 ; inline ! rwx mask other +: S_IROTH OCT: 0000004 ; inline ! r other +: S_IWOTH OCT: 0000002 ; inline ! w other +: S_IXOTH OCT: 0000001 ; inline ! x other + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +FUNCTION: int chmod ( char* path, mode_t mode ) ; + +FUNCTION: int fchmod ( int fd, mode_t mode ) ; + +FUNCTION: int mkdir ( char* path, mode_t mode ) ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + { { [ linux? ] [ "unix.stat.linux" require ] } { [ t ] [ ] } diff --git a/extra/unix/unix.factor b/extra/unix/unix.factor index 68e46eb2ae..f83120a96f 100755 --- a/extra/unix/unix.factor +++ b/extra/unix/unix.factor @@ -1,37 +1,15 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: unix + USING: alien alien.c-types alien.syntax kernel libc structs math namespaces system combinators vocabs.loader unix.types ; -! ! ! Unix types +IN: unix -! TYPEDEF: long word -! TYPEDEF: ulong uword - -! TYPEDEF: long longword -! TYPEDEF: ulong ulongword - -! TYPEDEF: long ssize_t -! TYPEDEF: longword blksize_t -! TYPEDEF: longword blkcnt_t -! TYPEDEF: longlong quad_t -! TYPEDEF: ulonglong dev_t -! TYPEDEF: uint gid_t TYPEDEF: uint in_addr_t -! TYPEDEF: ulong ino_t -! TYPEDEF: int pid_t TYPEDEF: uint socklen_t TYPEDEF: uint time_t -! TYPEDEF: uint uid_t TYPEDEF: ulong size_t -! TYPEDEF: ulong u_long -! TYPEDEF: uint mode_t -! TYPEDEF: uword nlink_t -! TYPEDEF: void* caddr_t - -! TYPEDEF: ulong off_t -! TYPEDEF-IF: bsd? ulonglong off_t C-STRUCT: tm { "int" "sec" } ! Seconds: 0-59 (K&R says 0-61?) @@ -56,41 +34,6 @@ C-STRUCT: timespec [ set-timespec-nsec ] keep [ set-timespec-sec ] keep ; -! ! ! Unix constants - -! File type -: S_IFMT OCT: 0170000 ; inline ! type of file -: S_IFIFO OCT: 0010000 ; inline ! named pipe (fifo) -: S_IFCHR OCT: 0020000 ; inline ! character special -: S_IFDIR OCT: 0040000 ; inline ! directory -: S_IFBLK OCT: 0060000 ; inline ! block special -: S_IFREG OCT: 0100000 ; inline ! regular -: S_IFLNK OCT: 0120000 ; inline ! symbolic link -: S_IFSOCK OCT: 0140000 ; inline ! socket -: S_IFWHT OCT: 0160000 ; inline ! whiteout -: S_IFXATTR OCT: 0200000 ; inline ! extended attribute - -! File mode -! Read, write, execute/search by owner -: S_IRWXU OCT: 0000700 ; inline ! rwx mask owner -: S_IRUSR OCT: 0000400 ; inline ! r owner -: S_IWUSR OCT: 0000200 ; inline ! w owner -: S_IXUSR OCT: 0000100 ; inline ! x owner -! Read, write, execute/search by group -: S_IRWXG OCT: 0000070 ; inline ! rwx mask group -: S_IRGRP OCT: 0000040 ; inline ! r group -: S_IWGRP OCT: 0000020 ; inline ! w group -: S_IXGRP OCT: 0000010 ; inline ! x group -! Read, write, execute/search by others -: S_IRWXO OCT: 0000007 ; inline ! rwx mask other -: S_IROTH OCT: 0000004 ; inline ! r other -: S_IWOTH OCT: 0000002 ; inline ! w other -: S_IXOTH OCT: 0000001 ; inline ! x other - -: S_ISUID OCT: 0004000 ; inline ! set user id on execution -: S_ISGID OCT: 0002000 ; inline ! set group id on execution -: S_ISVTX OCT: 0001000 ; inline ! sticky bit - : PROT_NONE 0 ; inline : PROT_READ 1 ; inline : PROT_WRITE 2 ; inline @@ -113,7 +56,6 @@ LIBRARY: libc FUNCTION: int accept ( int s, void* sockaddr, socklen_t* socklen ) ; FUNCTION: int bind ( int s, void* name, socklen_t namelen ) ; FUNCTION: int chdir ( char* path ) ; -FUNCTION: int chmod ( char* path, mode_t mode ) ; FUNCTION: int chown ( char* path, uid_t owner, gid_t group ) ; FUNCTION: int chroot ( char* path ) ; FUNCTION: void close ( int fd ) ; @@ -124,7 +66,6 @@ FUNCTION: int execv ( char* path, char** argv ) ; FUNCTION: int execvp ( char* path, char** argv ) ; FUNCTION: int execve ( char* path, char** argv, char** envp ) ; FUNCTION: int fchdir ( int fd ) ; -FUNCTION: int fchmod ( int fd, mode_t mode ) ; FUNCTION: int fchown ( int fd, uid_t owner, gid_t group ) ; FUNCTION: int fcntl ( int fd, int cmd, int arg ) ; FUNCTION: int flock ( int fd, int operation ) ; @@ -150,7 +91,6 @@ FUNCTION: int lchown ( char* path, uid_t owner, gid_t group ) ; FUNCTION: int listen ( int s, int backlog ) ; FUNCTION: tm* localtime ( time_t* clock ) ; FUNCTION: off_t lseek ( int fildes, off_t offset, int whence ) ; -FUNCTION: int mkdir ( char* path, mode_t mode ) ; FUNCTION: void* mmap ( void* addr, size_t len, int prot, int flags, int fd, off_t offset ) ; FUNCTION: int munmap ( void* addr, size_t len ) ; FUNCTION: uint ntohl ( uint n ) ;