From 2e4a171fcb3516901a35eda8b0fe4741ecf5e591 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 12 May 2008 14:09:24 -0500 Subject: [PATCH 1/4] io.unix.sockets: cleanup accept-sockaddr --- extra/io/unix/sockets/sockets.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/io/unix/sockets/sockets.factor b/extra/io/unix/sockets/sockets.factor index 71edbc5500..8cdb484823 100755 --- a/extra/io/unix/sockets/sockets.factor +++ b/extra/io/unix/sockets/sockets.factor @@ -67,7 +67,7 @@ TUPLE: accept-task < input-task ; accept-task ; : accept-sockaddr ( port -- fd sockaddr ) - dup port-handle swap server-port-addr sockaddr-type + [ handle>> ] [ addr>> sockaddr-type ] bi dup [ swap heap-size accept ] keep ; inline : do-accept ( port fd sockaddr -- ) From 1b39855447aff54ddd27afb4a23c41fbde507bc7 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 12 May 2008 16:33:04 -0500 Subject: [PATCH 2/4] unix.ffi: Moving functions to 'unix' --- extra/unix/ffi/ffi.factor | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/extra/unix/ffi/ffi.factor b/extra/unix/ffi/ffi.factor index e39d95dfa3..3751b4441c 100644 --- a/extra/unix/ffi/ffi.factor +++ b/extra/unix/ffi/ffi.factor @@ -3,13 +3,13 @@ USING: alien.syntax ; IN: unix.ffi -FUNCTION: int open ( char* path, int flags, int prot ) ; +! FUNCTION: int open ( char* path, int flags, int prot ) ; -C-STRUCT: utimbuf - { "time_t" "actime" } - { "time_t" "modtime" } ; +! C-STRUCT: utimbuf +! { "time_t" "actime" } +! { "time_t" "modtime" } ; -FUNCTION: int utime ( char* path, utimebuf* buf ) ; +! FUNCTION: int utime ( char* path, utimebuf* buf ) ; -FUNCTION: int err_no ( ) ; -FUNCTION: char* strerror ( int errno ) ; \ No newline at end of file +! FUNCTION: int err_no ( ) ; +! FUNCTION: char* strerror ( int errno ) ; \ No newline at end of file From 3691aa72ec3526a47465fd8e8e9ba9670c08e1aa Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 12 May 2008 17:11:40 -0500 Subject: [PATCH 3/4] unix: Now I see, all too clearly, the error of my ways --- extra/io/unix/backend/backend.factor | 2 +- extra/io/unix/files/files.factor | 2 +- extra/io/unix/kqueue/kqueue.factor | 2 +- extra/io/unix/sockets/sockets.factor | 2 +- extra/unix/ffi/ffi.factor | 15 -------- extra/unix/system-call/system-call.factor | 15 -------- extra/unix/unix.factor | 42 +++++++++++++++++++---- 7 files changed, 39 insertions(+), 41 deletions(-) delete mode 100644 extra/unix/ffi/ffi.factor delete mode 100644 extra/unix/system-call/system-call.factor diff --git a/extra/io/unix/backend/backend.factor b/extra/io/unix/backend/backend.factor index 902af8fe0d..08ff526f14 100644 --- a/extra/io/unix/backend/backend.factor +++ b/extra/io/unix/backend/backend.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2004, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: alien generic assocs kernel kernel.private math -io.nonblocking sequences strings structs sbufs threads unix.ffi unix +io.nonblocking sequences strings structs sbufs threads unix vectors io.buffers io.backend io.encodings math.parser continuations system libc qualified namespaces io.timeouts io.encodings.utf8 accessors ; diff --git a/extra/io/unix/files/files.factor b/extra/io/unix/files/files.factor index 28e08d4bf2..3254640900 100755 --- a/extra/io/unix/files/files.factor +++ b/extra/io/unix/files/files.factor @@ -45,7 +45,7 @@ M: unix (file-appender) ( path -- stream ) M: unix touch-file ( path -- ) normalize-path - dup exists? [ f utime ] [ + dup exists? [ touch ] [ touch-mode file-mode open close ] if ; diff --git a/extra/io/unix/kqueue/kqueue.factor b/extra/io/unix/kqueue/kqueue.factor index ec82a426d3..8e8fb0ec74 100755 --- a/extra/io/unix/kqueue/kqueue.factor +++ b/extra/io/unix/kqueue/kqueue.factor @@ -3,7 +3,7 @@ USING: alien.c-types kernel math math.bitfields namespaces locals accessors combinators threads vectors hashtables sequences assocs continuations sets -unix.ffi unix unix.time unix.kqueue unix.process +unix unix.time unix.kqueue unix.process io.nonblocking io.unix.backend io.launcher io.unix.launcher io.monitors ; IN: io.unix.kqueue diff --git a/extra/io/unix/sockets/sockets.factor b/extra/io/unix/sockets/sockets.factor index 8cdb484823..c9fc9905a8 100755 --- a/extra/io/unix/sockets/sockets.factor +++ b/extra/io/unix/sockets/sockets.factor @@ -5,7 +5,7 @@ namespaces threads sequences byte-arrays io.nonblocking io.binary io.unix.backend io.streams.duplex io.sockets.impl io.backend io.files io.files.private io.encodings.utf8 math.parser continuations libc combinators system accessors -qualified unix.ffi unix ; +qualified unix ; EXCLUDE: io => read write close ; EXCLUDE: io.sockets => accept ; diff --git a/extra/unix/ffi/ffi.factor b/extra/unix/ffi/ffi.factor deleted file mode 100644 index 3751b4441c..0000000000 --- a/extra/unix/ffi/ffi.factor +++ /dev/null @@ -1,15 +0,0 @@ - -USING: alien.syntax ; - -IN: unix.ffi - -! FUNCTION: int open ( char* path, int flags, int prot ) ; - -! C-STRUCT: utimbuf -! { "time_t" "actime" } -! { "time_t" "modtime" } ; - -! FUNCTION: int utime ( char* path, utimebuf* buf ) ; - -! FUNCTION: int err_no ( ) ; -! FUNCTION: char* strerror ( int errno ) ; \ No newline at end of file diff --git a/extra/unix/system-call/system-call.factor b/extra/unix/system-call/system-call.factor deleted file mode 100644 index bfcb9ae6ea..0000000000 --- a/extra/unix/system-call/system-call.factor +++ /dev/null @@ -1,15 +0,0 @@ - -USING: kernel continuations sequences math accessors inference macros - fry arrays.lib unix.ffi ; - -IN: unix.system-call - -ERROR: unix-system-call-error word args message ; - -MACRO: unix-system-call ( quot -- ) - [ ] [ infer in>> ] [ first ] tri - '[ - [ @ dup 0 < [ dup throw ] [ ] if ] - [ drop , narray , swap err_no strerror unix-system-call-error ] - recover - ] ; diff --git a/extra/unix/unix.factor b/extra/unix/unix.factor index c68f127226..9047a769ed 100755 --- a/extra/unix/unix.factor +++ b/extra/unix/unix.factor @@ -1,11 +1,11 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.syntax kernel libc structs +USING: alien alien.c-types alien.syntax kernel libc structs sequences + continuations math namespaces system combinators vocabs.loader qualified - unix.ffi unix.types unix.system-call ; - -QUALIFIED: unix.ffi + accessors inference macros fry arrays.lib + unix.types ; IN: unix @@ -46,9 +46,22 @@ C-STRUCT: passwd { "time_t" "pw_expire" } { "int" "pw_fields" } ; -! ! ! Unix functions LIBRARY: factor + FUNCTION: void clear_err_no ( ) ; +FUNCTION: int err_no ( ) ; + +ERROR: unix-system-call-error word args message ; + +DEFER: strerror + +MACRO: unix-system-call ( quot -- ) + [ ] [ infer in>> ] [ first ] tri + '[ + [ @ dup 0 < [ dup throw ] [ ] if ] + [ drop , narray , swap err_no strerror unix-system-call-error ] + recover + ] ; LIBRARY: libc @@ -100,9 +113,23 @@ FUNCTION: int munmap ( void* addr, size_t len ) ; FUNCTION: uint ntohl ( uint n ) ; FUNCTION: ushort ntohs ( ushort n ) ; -: open ( path flags prot -- int ) [ unix.ffi:open ] unix-system-call ; +FUNCTION: int open ( char* path, int flags, int prot ) ; -: utime ( path buf -- ) [ unix.ffi:utime ] unix-system-call drop ; +: open-file ( path flags mode -- fd ) [ open ] unix-system-call ; + +C-STRUCT: utimbuf + { "time_t" "actime" } + { "time_t" "modtime" } ; + +FUNCTION: int utime ( char* path, utimebuf* buf ) ; + +: touch ( filename -- ) f [ utime ] unix-system-call drop ; + +: change-file-times ( filename access modification -- ) + "utimebuf" + tuck set-utimbuf-modtime + tuck set-utimbuf-actime + [ utime ] unix-system-call drop ; FUNCTION: int pclose ( void* file ) ; FUNCTION: int pipe ( int* filedes ) ; @@ -124,6 +151,7 @@ FUNCTION: int setreuid ( uid_t ruid, uid_t euid ) ; FUNCTION: int setsockopt ( int s, int level, int optname, void* optval, socklen_t optlen ) ; FUNCTION: int setuid ( uid_t uid ) ; FUNCTION: int socket ( int domain, int type, int protocol ) ; +FUNCTION: char* strerror ( int errno ) ; FUNCTION: int symlink ( char* path1, char* path2 ) ; FUNCTION: int system ( char* command ) ; FUNCTION: int unlink ( char* path ) ; From d1bae00e8a3e6363f8854289e87c7f7f66f0886b Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 12 May 2008 17:40:49 -0500 Subject: [PATCH 4/4] unix: Fix indentation --- extra/unix/unix.factor | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extra/unix/unix.factor b/extra/unix/unix.factor index 9047a769ed..31146f9c8d 100755 --- a/extra/unix/unix.factor +++ b/extra/unix/unix.factor @@ -126,10 +126,10 @@ FUNCTION: int utime ( char* path, utimebuf* buf ) ; : touch ( filename -- ) f [ utime ] unix-system-call drop ; : change-file-times ( filename access modification -- ) - "utimebuf" - tuck set-utimbuf-modtime - tuck set-utimbuf-actime - [ utime ] unix-system-call drop ; + "utimebuf" + tuck set-utimbuf-modtime + tuck set-utimbuf-actime + [ utime ] unix-system-call drop ; FUNCTION: int pclose ( void* file ) ; FUNCTION: int pipe ( int* filedes ) ;