2011-06-15 78 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