summaryrefslogtreecommitdiff
path: root/modules/language/python/module/resource.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/module/resource.scm')
-rw-r--r--modules/language/python/module/resource.scm84
1 files changed, 51 insertions, 33 deletions
diff --git a/modules/language/python/module/resource.scm b/modules/language/python/module/resource.scm
index 200127e..672c1e9 100644
--- a/modules/language/python/module/resource.scm
+++ b/modules/language/python/module/resource.scm
@@ -1,10 +1,11 @@
(define-module (language python module resource)
#:use-module (system foreign)
#:use-module (rnrs bytevectors)
+ #:use-module (oop pf-objects)
#:use-module (language python exceptions)
+ #:use-module (language python list)
#:use-module (language python module errno)
#:use-module (language python try)
- #:use-module (language python list)
#:export (RLIM_INFINITY RLIMIT_CORE RLIMIT_CPU RLIMIT_FSIZE RLIMIT_DATA
RLIMIT_STACK RLIMIT_RSS RLIMIT_NPROC RLIMIT_NOFILE
RLIMIT_MEMLOCK RLIMIT_AS RLIMIT_LOCKS
@@ -34,6 +35,15 @@
(raise OSError (pylist-ref errorcode e) ((@ (guile) strerror) e)))))
(values))))
+(define-syntax-rule (defineu f x)
+ (define f
+ (catch #t
+ (lambda () x)
+ (lambda z
+ (let ((message (format #f "could not define ~a" 'f)))
+ (warn message)
+ (lambda z (error message)))))))
+
(define RLIM_INFINITY #xffffffffffffffff)
(define RLIMIT_CORE 4)
@@ -53,59 +63,64 @@
(define RLIMIT_RTTIME 15)
(define RLIMIT_SIGPENDING 11)
-(define getrlimit
+(define getrlimit #f)
+(defineu getrlimit
(let ((f (pointer->procedure int
(dynamic-func "getrlimit" (dynamic-link))
- (int '*))))
+ (list int '*))))
(lambda (resource)
(let* ((v (make-bytevector 16))
(vp (bytevector->pointer v)))
- (rm (f res vp) (EINVAL (raise ValueError "wrong resource")))
- (list (bytevector-u64-ref v 0 (native-endianess))
- (bytevector-u64-ref v 1 (native-endianess)))))))
+ (rm (f resource vp) (EINVAL (raise ValueError "wrong resource")))
+ (list (bytevector-u64-ref v 0 (native-endianness))
+ (bytevector-u64-ref v 8 (native-endianness)))))))
-(define setrlimit
+
+(define setrlimit #f)
+(defineu setrlimit
(let ((f (pointer->procedure int
(dynamic-func "setrlimit" (dynamic-link))
- (int '*))))
+ (list int '*))))
(lambda (resource limits)
(let* ((v (make-bytevector 16))
(vp (bytevector->pointer v)))
- (bytevector-u64-set! v 0 (pylist-ref limits 0) (native-endianess))
- (bytevector-u64-set! v 1 (pylist-ref limits 1) (native-endianess))
+ (bytevector-u64-set! v 0 (pylist-ref limits 0) (native-endianness))
+ (bytevector-u64-set! v 8 (pylist-ref limits 1) (native-endianness))
+
(rm (f resource vp)
(EINVAL (raise ValueError "wrong resource"))
(EPERM (raise ValueError "wrong permission")))
(values)))))
-(define prlimit
+(define prlimit #f)
+(defineu prlimit
(let ((f (pointer->procedure int
(dynamic-func "prlimit" (dynamic-link))
- (int int '* '*))))
+ (list int int '* '*))))
(lambda* (pid resource #:optional (limits None))
- (let ((vnew (make-bytevector 16))
- (vold (make-bytevector 16))
- (vpnew (bytevector->pointer vnew))
- (vpold (bytevector->pointer vold)))
+ (let* ((vnew (make-bytevector 16))
+ (vold (make-bytevector 16))
+ (vpnew (bytevector->pointer vnew))
+ (vpold (bytevector->pointer vold)))
(if (not (equal? limits None))
(begin
(bytevector-u64-set! vnew 0 (pylist-ref limits 0)
- (native-endianess))
- (bytevector-u64-set! vnew 1 (pylist-ref limits 1)
- (native-endianess))))
+ (native-endianness))
+ (bytevector-u64-set! vnew 8 (pylist-ref limits 1)
+ (native-endianness))))
(rm (f pid resource
(if (eq? limits None)
- (adress-pointer 0)
+ (make-pointer 0)
vpnew)
vpold)
(EINVAL (raise ValueError "wrong resource"))
(ESRCH (raise ProcessLookupError "prlimit"))
(EPERM (raise PermissionError "prlimit")))
- (list (bytevector-u64-ref vold 0 (native-endianess))
- (bytevector-u64-ref vold 1 (native-endianess)))))))
+ (list (bytevector-u64-ref vold 0 (native-endianness))
+ (bytevector-u64-ref vold 8 (native-endianness)))))))
+
-
(define RUSAGE_SELF 0)
(define RUSAGE_CHILDREN -1)
(define RUSAGE_BOTH -2)
@@ -116,14 +131,14 @@
(lambda (self v)
(define i 0)
(define-syntax-rule (gettime k)
- (let ((x1 (bytevector-u64-ref v i (native-endianess)))
- (x2 (bytevector-u64-ref v (+ i 1) (native-endianess))))
- (set! i (+ i 2))
+ (let ((x1 (bytevector-u64-ref v i (native-endianness)))
+ (x2 (bytevector-u64-ref v (+ i 8) (native-endianness))))
+ (set! i (+ i (* 8 2)))
(set self k (+ (* x1 1.0) (/ (* x2 1.0) 1000000)))))
(define-syntax-rule (s k)
(begin
- (set self k (bytevector-u64-ref v i (native-endianess)))
- (set! i (+ i 1))))
+ (set self k (bytevector-u64-ref v i (native-endianness)))
+ (set! i (+ i 8))))
(gettime 'ru_utime)
(gettime 'ru_stime)
(s 'ru_maxrss)
@@ -141,23 +156,26 @@
(s 'ru_nvcsw)
(s 'ru_nivcsw))))
-(define getrusage
+(define getrusage #f)
+(defineu getrusage
(let ((f (pointer->procedure int
(dynamic-func "getrusage" (dynamic-link))
- (int '*))))
+ (list int '*))))
(lambda (who)
(let* ((v (make-bytevector 160))
- (vp (bytevector->pointer)))
+ (vp (bytevector->pointer v)))
(rm (f who vp)
(EINVAL (raise ValueError "wrong who in getrusage")))
(ResUsage v)))))
-(define getpagesize
+(define getpagesize #f)
+(defineu getpagesize
(let ((f (pointer->procedure int
(dynamic-func "getpagesize" (dynamic-link))
- ())))
+ '())))
(lambda ()
(rm (f)))))
+