[gambit-list] How to pass a Scheme string to a const char*?
Vok Vojwo
ceving at gmail.com
Mon Nov 21 12:43:18 EST 2011
I have defined wrappers for openlog and syslog. The openlog function
requires an ident string. Whatever I pass to openlog does not survive
until a call to syslog. I have tried to protect the string with
##still-copy (with and without box/unbox) but it does not work. Here
is the example:
(define const-ident #f)
(define openlog
(let ((openlog (c-lambda
(char-string int int)
void
"openlog")))
(lambda (ident option facility)
(set! const-ident (box (##still-copy ident)))
(openlog (unbox const-ident) option facility))))
(define syslog
(let ((syslog (c-lambda
(int nonnull-char-string)
void
"syslog")))
(lambda (priority . args)
(syslog priority (apply string-append args)))))
This program:
(define (main . args)
(openlog "gambit" (+ LOG_NDELAY LOG_PID) LOG_USER)
(syslog LOG_INFO "hello")
(closelog))
will generate random syslog tags:
Nov 21 17:58:49 sn-e0692 ��*#002[11621]: hello
What is the correct way to protect a string to be able to pass it to a
const char* argument?
More information about the Gambit-list
mailing list