Hello,

I have a request for two API additions: sqlite3_vconfig() and
sqlite3_db_vconfig(). The naming convention is borrowed from vprintf() and
friends. The functions would be identical to sqlite3_config() and
sqlite3_db_config() except they would take a va_list instead of variadic
arguments.

The motivation for this is better interoperability with Swift. While Swift
supports calling most C functions natively, variadic functions are not
supported. Currently it isn't possible to call the _config() functions
without additional glue code.

The implementations are straightforward:

% diff sqlite3-3300000.h sqlite3+vconfigs.h
1560a1561,1562
> SQLITE_API int sqlite3_vconfig(int, va_list ap);
>
1579a1582,1583
> SQLITE_API int sqlite3_db_vconfig(sqlite3*, int op, va_list ap);
>


% diff sqlite3-3300000.c sqlite3+vconfigs.c
2602a2603,2604
> SQLITE_API int sqlite3_vconfig(int, va_list ap);
>
2621a2624,2625
> SQLITE_API int sqlite3_db_vconfig(sqlite3*, int op, va_list ap);
>
120640a120645,120646
> /* FIXME: Version 3.XX.XX and later */
> #define sqlite3_db_vconfig             sqlite3_api->db_vconfig
121112a121119,121120
>   /* FIXME: Version 3.XX.XX and later */
>   sqlite3_db_vconfig,
156586a156595,156601
>   va_start(ap, op);
>   int rc = sqlite3_vconfig(op, ap);
>   va_end(ap);
>   return rc;
> }
>
> SQLITE_API int sqlite3_vconfig(int op, va_list ap){
156593d156607
<   va_start(ap, op);
156888d156901
<   va_end(ap);
157035d157047
<   int rc;
157036a157049,157055
>   int rc = sqlite3_db_vconfig(db, op, ap);
>   va_end(ap);
>   return rc;
> }
>
> SQLITE_API int sqlite3_db_vconfig(sqlite3 *db, int op, va_list ap){
>   int rc;
157098d157116
<   va_end(ap);

Thanks,
Stephen
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to