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
			
			
				db4
			
			
		
							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