In reply to James Bielman:
I just managed to do a quick test, I'll have some more time tomorrow.
Does something like the following work for you? It'd be nice to massage this into something worth including in src/strings.lisp...
[snip]
;;; Bind ARGC and ARGV to the count and pointer of a C-style string ;;; vector, taking strings from SEQUENCE. The vector is automatically ;;; freed upon exit of BODY. (defmacro with-foreign-string-vector ((argc argv sequence) &body body) (cffi-utils:once-only (sequence) `(let* ((,argc (length ,sequence)) (,argv (foreign-string-vector ,sequence ,argc))) (unwind-protect (progn ,@body) (foreign-string-vector-free ,argv ,argc)))))
If I call it like this (which I hope is right, since I'm just learing lisp)
rrd> (with-foreign-string-vector (argc argv '("create" "test.rrd" "--step=300" "DS:a:GAUGE:600:U:U" "DS:b:GAUGE:600:U:U" "RRA:AVERAGE:0.5:1:300")) (rrd-create argc argv))
I get this error:
arithmetic error FLOATING-POINT-INVALID-OPERATION signalled [Condition of type FLOATING-POINT-INVALID-OPERATION]
Restarts: 0: [ABORT-REQUEST] Abort handling SLIME request. 1: [ABORT] Exit debugger, returning to top level.
Backtrace: 0: (SB-VM:SIGFPE-HANDLER #<unavailable argument> #.(SB-SYS:INT-SAP #X283822C0) #.(SB-SYS:INT-SAP #X28382000)) 1: (SB-SYS:INVOKE-INTERRUPTION #<CLOSURE (LAMBDA NIL) {49C44A75}>) 2: ("foreign function: call_into_lisp") 3: ("foreign function: funcall3") 4: ("foreign function: interrupt_handle_now") 5: ("foreign function: interrupt_handle_now_handler") 6: ("bogus stack frame") 7: ("foreign function: rrd_create_r") 8: ("foreign function: rrd_create") 9: (RRD-CREATE 6 #.(SB-SYS:INT-SAP #X082661C0)) 10: (NIL) 11: (SB-INT:EVAL-IN-LEXENV (WITH-FOREIGN-STRING-VECTOR (ARGC ARGV (QUOTE #)) (RRD-CREATE ARGC ARGV)) #<NULL-LEXENV>) --more--
which is further than I ever got before. It would usually bail out before calling into rrd_create_r - the function where the real work is done.
I'm using SBCL 0.9.9 with SLIME CVS from a few weeks ago on x86 FreeBSD. CFFI is 0.9.0.
I'll dig deeper tomorrow, thanks for the quick answer
Nikolai