From 8fb892a131178e39075857cf1292c489d96b75aa Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 24 Sep 2016 00:26:53 -0400 Subject: [PATCH] Added socket-purge-flags --- srfi/106.sld | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/srfi/106.sld b/srfi/106.sld index 43274268..1f516458 100644 --- a/srfi/106.sld +++ b/srfi/106.sld @@ -112,15 +112,27 @@ (let ((result (car flags))) (for-each (lambda (flag) - (set! result (num-or result flag))) + (set! result (bit-set result flag))) (cdr flags)) result))) - (define-c num-or + (define (socket-purge-flags base-flag . flags) + (if (null? flags) + base-flag + (begin + (for-each + (lambda (flag) + (set! base-flag (bit-unset base-flag flag))) + flags) + base-flag))) + + (define-c bit-set "(void *data, int argc, closure _, object k, object n1, object n2)" - " return_closcall1(data, k, Cyc_bit_or(data, n1, n2));") - ;(define (socket-purge-flags flags) - ;) + " return_closcall1(data, k, Cyc_bit_set(data, n1, n2));") + + (define-c bit-unset + "(void *data, int argc, closure _, object k, object n1, object n2)" + " return_closcall1(data, k, Cyc_bit_unset(data, n1, n2));") (define-syntax make-const (er-macro-transformer