cbindgen icon indicating copy to clipboard operation
cbindgen copied to clipboard

Correctly parsing c variadics `args: ...`

Open darleybarreto opened this issue 2 years ago • 1 comments

I was looking at how cbindgen is parsing c variadic arguments here. Would it be possible to make it c variadic instead of VaList? For instance this function

func(stream: *mut FILE, fmt: *const c_char, mut args: ...) 

Would be exported to a header as

func(FILE * stream, const char * fmt, ...)

darleybarreto avatar Oct 13 '23 18:10 darleybarreto

+1 it was broken by #805 I'd like to generate a definition that is compatible with an existing C definition which uses the ... syntax.

Note: in 0.24.5 it somehow worked because cbindgen outputs ... for function pointers

Example

#[no_mangle]
pub extern "C" fn chewing_set_logger(
    ctx: *mut ChewingContext,
    logger: extern "C" fn(data: *mut c_void, level: c_int, fmt: *const c_char, arg: ...),
    data: *mut c_void,
) {}

used to output

void chewing_set_logger(ChewingContext *ctx,
                        void (*logger) (void *data, int level, const char *fmt, ...), void *data);

kanru avatar Dec 31 '23 02:12 kanru