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.macosxdb4
parent
e79772fce4
commit
e39783b10a
|
@ -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
|
||||
|
|
|
@ -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 ;
|
|
@ -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 ;
|
|
@ -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 ;
|
||||
|
||||
|
|
|
@ -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 ] [ ] }
|
||||
|
|
|
@ -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 ) ;
|
||||
|
|
Loading…
Reference in New Issue