Add a few utility functions.

* binding-utils.scm: add `pointer->string*`.
* common.scm: add `bool->int` and `int->bool`, two functions to easily convert
              `gnunet-ok`, `gnunet-no`, `gnunet-syserror` values to booleans.
* fs/uri.scm: export `keyword-list->string`.
* tests/uri.scm: test `keyword-list->string`.
* scheduler.scm: add `cancel-task!`.
This commit is contained in:
Rémi Birot-Delrue 2015-07-21 13:01:28 +02:00
parent 7790951783
commit 6fc73cee9b
5 changed files with 23 additions and 1 deletions

View File

@ -32,6 +32,7 @@
rassoc-ref
string->pointer*
pointer->string*
make-c-struct*))
(define (getf plist value)
@ -74,3 +75,6 @@
if STRING is empty (\"\")."
(if (string=? "" string) %null-pointer (string->pointer string)))
(define (pointer->string* ptr)
(if (eq? %null-pointer ptr) #f (pointer->string ptr)))

View File

@ -24,6 +24,8 @@
gnunet-system-error
gnunet-yes
gnunet-no
bool->int
int->bool
time-relative
time-absolute
@ -96,6 +98,13 @@
"GNUNET_STRINGS_string_to_data" : (list '* size_t '* size_t) -> int)
(define (bool->int x) (if x gnunet-yes gnunet-no))
(define (int->bool x)
(cond ((= gnunet-yes x) #t)
((= gnunet-no x) #f)
((= gnunet-system-error x) #:system-error)
(else #:unknown)))
(define %xfilename (string->pointer "guile"))
(define (%free pointer)

View File

@ -36,7 +36,9 @@
unwrap-uri
uri-type
uri-file-size
uri->string))
uri->string
keyword-list->string))
(define-record-type <uri>
(%wrap-uri pointer type)

View File

@ -26,6 +26,7 @@
call-with-scheduler
add-task!
set-next-task!
cancel-task!
schedule-shutdown!))
@ -52,6 +53,8 @@
"GNUNET_SCHEDULER_add_delayed_with_priority" :
(list time-relative unsigned-int '* '*) -> '*)
(define-gnunet cancel-task! "GNUNET_SCHEDULER_cancel" : '(*) -> '*)
(define-gnunet %speedup-start "GNUNET_SPEEDUP_start_" : '(*) -> int)
(define-gnunet %speedup-stop "GNUNET_SPEEDUP_stop_" : '() -> void)

View File

@ -22,6 +22,10 @@
(test-begin "test-fs-uri")
;; keyword-list->string
(test-equal "" (keyword-list->string '()))
(test-equal "foo bar baz" (keyword-list->string '("foo" "bar" "baz")))
;; parse-uri
(test-error 'invalid-arg (parse-uri ""))
(let ((uri (parse-uri "gnunet://fs/ksk/trek")))