2011-06-15 286 views
3

我需要将snprintf()移植到另一个不完全支持GLibC的平台。寻找snprintf()的C源代码

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

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

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

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

回答

4

http://www.ijs.si/software/snprintf/有什么他们要求是便携式实施方案的snprintf,包括vsnprintf.c,asnprintf,vasnprintf,asprintf,vasprintf。也许它可以帮助。

+0

但是好看起来,这个实现不支持任何浮点/双精度格式,所以还远远没有完成。 – 2014-06-23 15:47:05

5

我花了很长一段时间挖掘源找到_svfprintf_r()(和朋友)在Newlib中的定义。自从OP问起它以后,我会把我的发现发布给那些需要这些的可怜灵魂。 Newlib 1.20.0适用于以下情况,但我想它在不同版本中差不多。

实际来源均位于vfprintf.c文件中。有宏0​​集到的_svfiprintf_r一个,_vfiprintf_r_svfprintf_r,或_vfprintf_r(取决于构建选项),然后实际执行功能相应地定义:

int 
_DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap), 
     struct _reent *data _AND 
     FILE * fp   _AND 
     _CONST char *fmt0 _AND 
     va_list ap) 
{ 
    ... 
5

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

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

+0

我检查了您提供的网址。我看到:'#ifndef COMPILE_WPRINTF ...#define vfprintf _IO_vfprintf_internal',但是_IO_vfprintf_internal定义在哪里?如果我误解,请告诉我。 – kevinarpe 2016-03-29 01:54:51

+2

'vfprintf()'的定义从[1235行]开始(https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c#l1235)。 – 2016-03-29 08:59:26

+0

'vfprintf()'现在从[1244行]开始(https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c#l1244)。 – Technophile 2017-06-22 18:37:27