diff options
Diffstat (limited to 'modules/language/python')
-rw-r--r-- | modules/language/python/module/errno.scm | 3 | ||||
-rw-r--r-- | modules/language/python/module/select.scm | 62 |
2 files changed, 34 insertions, 31 deletions
diff --git a/modules/language/python/module/errno.scm b/modules/language/python/module/errno.scm index f57bf15..1b1a508 100644 --- a/modules/language/python/module/errno.scm +++ b/modules/language/python/module/errno.scm @@ -1,5 +1,6 @@ (define-module (language python module errno) #:use-module (system foreign) + #:use-module (rnrs bytevectors) #:use-module (oop pf-objects) #:export (errno set_errno errorcode)) @@ -13,7 +14,7 @@ (let* ((f (dynamic-pointer "errno" (dynamic-link))) (v (pointer->bytevector f 1))) (lambda (x) - (bytevector-set! v 0 x)))) + (bytevector-s8-set! v 0 x)))) (define errorcode (make-hash-table)) diff --git a/modules/language/python/module/select.scm b/modules/language/python/module/select.scm index ae2f9e6..396b6c8 100644 --- a/modules/language/python/module/select.scm +++ b/modules/language/python/module/select.scm @@ -1,9 +1,10 @@ -(define-module (languge python module select) +(define-module (language python module select) #:use-module (language python module errno) #:use-module ((language python module os) #:prefix os:) #:use-module (language python exceptions) #:use-module (language python list) #:use-module (language python try) + #:use-module (language python def) #:use-module (oop pf-objects) #:use-module (system foreign) #:use-module (rnrs bytevectors) @@ -13,8 +14,10 @@ EPOLLONESHOT EPOLLWAKEUP EPOLLEXCLUSIVE EPOLLRDHUP EPOLLRDNORM EPOLLRDBAND EPOLLWRNORM EPOLLWRBAND EPOLLMSG POLLERR POLLHUP POLLNVAL POLLIN POLLOUT POLLRDHUP - POLLPRI POLLREMOVE POLLMSG) + POLLPRI POLLREMOVE POLLMSG)) +(define PIPE_BUF 1024) + (define-syntax-rule (aif it p x y) (let ((it p)) (if it x y))) (define-syntax-rule (ca code) @@ -69,8 +72,8 @@ (list int int int '*)))) (lambda (efd op fd event) (rm (let ((v (make-bytevector 16))) - (bytevector-i32-set! 0 event (native-endianness)) - (bytevector-i64-set! 4 fd (native-endianness)) + (bytevector-s32-set! v 0 event (native-endianness)) + (bytevector-s64-set! v 4 fd (native-endianness)) (f efd op fd (bytevector->pointer v))))))) (defineu epoll-wait @@ -80,14 +83,14 @@ (list '* int int)))) (lambda (efd max timout) (let ((v (make-pointer 0))) - (let ((n (f efd v max timout)) - (v (pointer->bytevector v (* n 12)))) + (let* ((n (f efd v max timout)) + (v (pointer->bytevector v (* n 12)))) (let lp ((i 0) (l '())) (if (< i n) - (let ((op (bytevector-i32-ref v (* i 12) - (nativ-endianness))) - (fd (bytevector-i64-ref v (+ (* i 12) 4) - (nativ-endianness)))) + (let ((op (bytevector-s32-ref v (* i 12) + (native-endianness))) + (fd (bytevector-s64-ref v (+ (* i 12) 4) + (native-endianness)))) (lp (+ i 1) (cons (list op fd) l))) (reverse l)))))))) @@ -150,7 +153,7 @@ 0)))) (define poll - (lam ((= timeout -1) (= maxevents -1)) + (lam (self (= timeout -1) (= maxevents -1)) (epoll-wait (ref self '__fd) maxevents @@ -158,8 +161,6 @@ -1 (inexact->exact (floor (* 1000 timeout)))))))) - -(define PIPE_BUF 1024) (define EPOLLIN #x1) (define EPOLLOUT #x4) (define EPOLLPRI #x2) @@ -194,7 +195,7 @@ (dynamic-func "poll" (dynamic-link)) (list '* int int)))) (lambda (fds n timespec) - (rm (f fds n (inexact->exact (floor (* 1000 timespac)))))))) + (rm (f fds n (inexact->exact (floor (* 1000 timespec)))))))) (define-python-class poll () @@ -217,7 +218,7 @@ (aif it (assoc fd data) (set-cdr! it eventmask) (begin - (errno_set ENOENT) + (set_errno ENOENT) (raise (error "modifying non existant fd"))))))) (define unregister @@ -234,17 +235,17 @@ (define poll (let ((k 8)) - (lambda* (#:optional (timeout -1)) + (lambda* (self #:optional (timeout -1)) (define (make-data-pt data n) (let ((v (make-bytevector (* n k)))) (let lp ((i 0) (l data)) (if (pair? l) (begin - (bytevector-i32-set! v (* i k) (caar l) + (bytevector-s32-set! v (* i k) (caar l) (native-endianness)) - (bytevector-i16-set! v (+ (* i k) 4) (cdar l) + (bytevector-s16-set! v (+ (* i k) 4) (cdar l) (native-endianness)) - (bytevector-i16-set! v (+ (* i k) 6) 0 + (bytevector-s16-set! v (+ (* i k) 6) 0 (native-endianness)) (lp (+ i 1) (cdr l))) (bytevector->pointer v))))) @@ -264,19 +265,20 @@ (values x n)))) (lambda (x n) - (let lp ((i 0)) - (if (< i n) - (let ((fd (bytevector-i32-ref v (* i k) - (nativ-endianness))) - (y (bytevector-i16-ref v (+ (* i k) 6) - (nativ-endianness)))) - (if (not (= y 0)) - (cons (list fd y) (lp (+ i 1))) - (lp (+ i 1)))) - '())))))))) + (let ((v (pointer->bytevector x (* k n)))) + (let lp ((i 0)) + (if (< i n) + (let ((fd (bytevector-s32-ref v (* i k) + (native-endianness))) + (y (bytevector-s16-ref v (+ (* i k) 6) + (native-endianness)))) + (if (not (= y 0)) + (cons (list fd y) (lp (+ i 1))) + (lp (+ i 1)))) + '()))))))))) -(define* (select rl wl xl #:optional (timout 0)) +(define* (select rl wl xl #:optional (timeout 0)) (let ((m (inexact->exact (floor timeout))) (n (modulo (inexact->exact (floor (* 1000000 timeout))) 1000000))) ((@ (guile) select) (to-list rl) (to-list wl) (to-list xl) m n))) |