dnl CF_FUNC_VSSCANF version: 8 updated: 2023/12/03 19:09:59
dnl ---------------
dnl Check for vsscanf() function, which is in c9x but generally not in earlier
dnl versions of C.  It can often be simulated by other functions on older
dnl systems (where FILE is not opaque).
AC_DEFUN([CF_FUNC_VSSCANF],
[
AC_CACHE_CHECK(for vsscanf function or workaround,cf_cv_func_vsscanf,[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>

static void
myfunc(const char *str, const char *fmt, ...)
{
	va_list ap;
	va_start(ap, fmt);
	vsscanf(str, fmt, ap);
	va_end(ap);
}
],[
	myfunc("55", "%d");
],[cf_cv_func_vsscanf=vsscanf],[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>],[
	FILE strbuf;
	char *str = "from";

	strbuf._flag = _IOREAD;
	strbuf._ptr = strbuf._base = (unsigned char *) str;
	strbuf._cnt = strlen(str);
	strbuf._file = _NFILE;
	return (vfscanf(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=vfscanf],[
AC_TRY_LINK([
#include <stdarg.h>
#include <stdio.h>],[
	FILE strbuf;
	char *str = "from";

	strbuf._flag = _IOREAD;
	strbuf._ptr = strbuf._base = (unsigned char *) str;
	strbuf._cnt = strlen(str);
	strbuf._file = _NFILE;
	return (_doscan(&strbuf, "%d", ap))],[cf_cv_func_vsscanf=_doscan],[
cf_cv_func_vsscanf=no])])])])

case "$cf_cv_func_vsscanf" in
(vsscanf) AC_DEFINE(HAVE_VSSCANF,1,[Define to 1 if we have vsscanf]);;
(vfscanf) AC_DEFINE(HAVE_VFSCANF,1,[Define to 1 if we have vfscanf]);;
(_doscan) AC_DEFINE(HAVE__DOSCAN,1,[Define to 1 if we have _doscan]);;
esac

])dnl
