关于glibc:寻找snprintf()的C源代码

Looking for C source code for snprintf()

我需要将snprintf()移植到另一个不完全支持GLibC的平台上。

我正在寻找Glibc 2.14源代码中的基础声明。我遵循许多函数调用,但是卡在vfprintf()上。然后,它似乎调用_IO_vfprintf(),但我找不到该定义。可能是宏使事物变得混乱。

我需要查看真正的C代码,该代码可以扫描格式字符串并计算如果输入缓冲区足够大时它将写入的字节数。

我也尝试在newlib 1.19.0中进行查找,但是我被卡在_svfprintf_r()上。我在任何地方都找不到定义。

有人可以将我指向snprintf()的另一个定义吗?


我花了很长时间来挖掘源代码,以便在Newlib中找到_svfprintf_r()(和朋友)定义。自从OP问了这个问题后,我将把我的发现发布给同样需要这些资源的可怜的人。以下内容适用于Newlib 1.20.0,但我猜它在不同版本中大致相同。

实际来源位于vfprintf.c文件中。有一个宏_VFPRINTF_R设置为_svfiprintf_r_vfiprintf_r_svfprintf_r_VFPRINTF_R之一(取决于构建选项),然后相应地定义了实际的实现功能:

1
2
3
4
5
6
7
8
int
_DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap),
       struct _reent *data _AND
       FILE * fp           _AND
       _CONST char *fmt0   _AND
       va_list ap)
{
    ...

GNU C库(glibc)的源代码托管在sourceware.org上。

这里是vfprintf()的实现的链接,由snprintf()调用:
https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c


http://www.ijs.si/software/snprintf/声称它们是snprintf的可移植实现,包括vsnprintf.c,asnprintf,vasnprintf,asprintf,vasprintf。也许可以帮忙。