From: Daniel L. <dl...@bi...> - 2011-03-29 17:56:28
|
Just adds the read(2) and write(2) posix system calls to sb-posix. --- contrib/sb-posix/TODO | 37 +++++++++++++++++-------------------- contrib/sb-posix/defpackage.lisp | 2 +- contrib/sb-posix/interface.lisp | 4 ++++ contrib/sb-posix/posix-tests.lisp | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/contrib/sb-posix/TODO b/contrib/sb-posix/TODO index 6764657..9c0ce34 100644 --- a/contrib/sb-posix/TODO +++ b/contrib/sb-posix/TODO @@ -8,31 +8,28 @@ in this list does _not_ imply we've definitely decided something needs adding. FD_CLR FD_ISSET FD_SET FD_ZERO accept acct adjtime adjtimex bdflush -bind break brk cacheflush capget capset clone connect -create_module delete_module execve exit flock -fstatfs ftime getcontext getdents getdomainname -getdtablesize getgroups gethostid gethostname getitimer +bind break brk cacheflush capget capset clone connect create_module +delete_module execve exit flock fstatfs ftime getcontext getdents +getdomainname getdtablesize getgroups gethostid gethostname getitimer getpeername getpriority getrlimit getrusage getsockname getsockopt gettimeofday gtty idle init_module ioctl_list ioperm iopl listen -llseek lock madvise mincore mknod mlock -modify_ldt mount mprotect mpx mremap msgctl msgget msgop msgrcv msgsnd -munlock nanosleep nice pause poll -prctl pread prof profil pselect ptrace pwrite query_module quotactl -read readv reboot recv recvfrom recvmsg -sbrk sched_get_priority_max sched_get_priority_min sched_getparam +llseek lock madvise mincore mknod mlock modify_ldt mount mprotect mpx +mremap msgctl msgget msgop msgrcv msgsnd munlock nanosleep nice pause +poll prctl pread prof profil pselect ptrace pwrite query_module +quotactl readv reboot recv recvfrom recvmsg sbrk +sched_get_priority_max sched_get_priority_min sched_getparam sched_getscheduler sched_rr_get_interval sched_setparam sched_setscheduler sched_yield select semctl semget semop send sendfile sendmsg sendto setcontext setdomainname setgroups sethostid -sethostname setitimer setpriority setrlimit setsockopt -settimeofday sgetmask shmat shmctl shmdt shmget shmop shutdown -sigaction sigaltstack sigblock siggetmask sigmask signal sigpause -sigpending sigprocmask sigreturn sigsetmask sigsuspend sigvec socket -socketcall socketpair ssetmask statfs stime stty swapoff swapon -syscalls sysctl sysfs sysinfo times -ulimit umount uname ustat vfork vhangup wait3 -wait4 write writev - -4) In the spec but not implemented: +sethostname setitimer setpriority setrlimit setsockopt settimeofday +sgetmask shmat shmctl shmdt shmget shmop shutdown sigaction +sigaltstack sigblock siggetmask sigmask signal sigpause sigpending +sigprocmask sigreturn sigsetmask sigsuspend sigvec socket socketcall +socketpair ssetmask statfs stime stty swapoff swapon syscalls sysctl +sysfs sysinfo times ulimit umount uname ustat vfork vhangup wait3 +wait4 writev + +4) In the spec but not implemented: - buffers diff --git a/contrib/sb-posix/defpackage.lisp b/contrib/sb-posix/defpackage.lisp index 477a6bd..da8b82b 100644 --- a/contrib/sb-posix/defpackage.lisp +++ b/contrib/sb-posix/defpackage.lisp @@ -1,5 +1,5 @@ (defpackage :sb-posix (:use #:sb-alien #:cl) - (:shadow close open ftruncate truncate time) + (:shadow close open ftruncate truncate time read write) (:export #:syscall-error #:syscall-errno ;; types and type conversion diff --git a/contrib/sb-posix/interface.lisp b/contrib/sb-posix/interface.lisp index 5c8a877..4c2b3cb 100644 --- a/contrib/sb-posix/interface.lisp +++ b/contrib/sb-posix/interface.lisp @@ -121,11 +121,15 @@ (open-with-mode pathname flags mode) (open-without-mode pathname flags)))))) (def #-win32 "open" #+win32 "_open")) +(define-call* "read" int minusp + (fd file-descriptor) (buf (* t)) (count int)) (define-call "rename" int minusp (oldpath filename) (newpath filename)) (define-call* "rmdir" int minusp (pathname filename)) (define-call* "unlink" int minusp (pathname filename)) (define-call #-netbsd "opendir" #+netbsd "_opendir" (* t) null-alien (pathname filename)) +(define-call* "write" int minusp + (fd file-descriptor) (buf (* t)) (count int)) #+inode64 (define-call ("readdir" :c-name "readdir$INODE64" :options :largefile) (* dirent) diff --git a/contrib/sb-posix/posix-tests.lisp b/contrib/sb-posix/posix-tests.lisp index 95afdd5..9d8da01 100644 --- a/contrib/sb-posix/posix-tests.lisp +++ b/contrib/sb-posix/posix-tests.lisp @@ -502,6 +502,24 @@ kid-status)) 42) +(deftest read.1 + (progn + (with-open-file (ouf (merge-pathnames "read-test.txt" *test-directory*) + :direction :output + :if-exists :supersede + :if-does-not-exist :create) + (write-string "foo" ouf)) + (let ((fd (sb-posix:open (merge-pathnames "read-test.txt" *test-directory*) sb-posix:o-rdonly))) + (unwind-protect + (let ((buf (make-array 10 :element-type '(unsigned-byte 8)))) + (values + (sb-posix:read fd (sb-sys:vector-sap buf) 10) + (code-char (aref buf 0)) + (code-char (aref buf 1)) + (code-char (aref buf 2)))) + (sb-posix:close fd)))) + 3 #\f #\o #\o) + (deftest opendir.1 (let ((dir (sb-posix:opendir "/"))) (unwind-protect (sb-alien:null-alien dir) @@ -543,6 +561,23 @@ (sb-posix:closedir dir))) t) + +(deftest write.1 + (progn + (let ((fd (sb-posix:open (merge-pathnames "write-test.txt" *test-directory*) + (logior sb-posix:o-creat sb-posix:o-wronly) + (logior sb-posix:s-irusr sb-posix:s-iwusr))) + (retval nil)) + (unwind-protect + (let ((buf (coerce "foo" 'simple-base-string))) + (setf retval (sb-posix:write fd (sb-sys:vector-sap buf) 3))) + (sb-posix:close fd)) + + (with-open-file (inf (merge-pathnames "write-test.txt" *test-directory*) + :direction :input) + (values retval (read-line inf))))) + 3 "foo") + #-win32 (deftest pwent.1 ;; make sure that we found something -- 1.5.6.5 --------------010406070507030602090503-- |
From: Nikodemus S. <nik...@ra...> - 2011-03-30 10:25:50
|
On 29 March 2011 20:37, Daniel Lowe <dl...@bi...> wrote: > Just adds the read(2) and write(2) posix system calls to sb-posix. Thanks! I can't seem to extract this from the email in form that would apply cleanly. Can you resend it as an attachment generated by git format-patch -1 Also, are the changes to TODO intentional? Cheers, -- Nikodemus |
From: Daniel L. <dl...@bi...> - 2011-03-30 15:25:19
|
On 03/30/2011 06:25 AM, Nikodemus Siivola wrote: > On 29 March 2011 20:37, Daniel Lowe<dl...@bi...> wrote: > >> Just adds the read(2) and write(2) posix system calls to sb-posix. > > Thanks! > > I can't seem to extract this from the email in form that would apply > cleanly. Can you resend it as an attachment generated by > > git format-patch -1 > > Also, are the changes to TODO intentional? > > Cheers, > > -- Nikodemus Lets try this again... The changes to the TODO are intentional. I've just removed the read and write functions from the list and rewrapped. : Daniel : |
From: Nikodemus S. <nik...@ra...> - 2011-03-30 16:49:40
|
On 30 March 2011 18:25, Daniel Lowe <dl...@bi...> wrote: > Lets try this again... > > The changes to the TODO are intentional. I've just removed the read and > write functions from the list and rewrapped. Excellent! Merged as 1.0.47.5. Cheers, -- Nikodemus |