diff --git a/bindings/utils.scm b/bindings/utils.scm index a6fa9e0..6c9e2c0 100644 --- a/bindings/utils.scm +++ b/bindings/utils.scm @@ -1,13 +1,13 @@ ; Convert a char* to a Scheme string ; Extracted from this paper: ; http://scheme2011.ucombinator.org/papers/Keep2011.pdf -(define (char*->string fptr) +(define (char*->string fptr maxsize) (let f ([i 0]) (let ([c (ftype-ref char () fptr i)]) - (if (char=? c #\nul) + (if (or (char=? c #\nul) (and (> maxsize 0) (>= i maxsize))) (make-string i) (let ([str (f (fx+ i 1))]) - (string-set! str i c)str))))) + (string-set! str i c) str))))) (define (alloc size fx) (let ([v (foreign-alloc size)]) diff --git a/examples/udp_server.scm b/examples/udp_server.scm index 2a18cb2..0b73843 100644 --- a/examples/udp_server.scm +++ b/examples/udp_server.scm @@ -84,5 +84,6 @@ "host: ~a, port: ~a, size: ~a, buf: ~a~%" host port size (char*->string - (make-ftype-pointer char buf))) + (make-ftype-pointer char buf) + size)) ))))