2 * ntdll printf functions
4 * Copyright 1999, 2009 Alexandre Julliard
5 * Copyright 2000 Jon Griffiths
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
32 #include "ntdll_misc.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(ntdll
);
37 static const SIZE_T size_max
= ~(SIZE_T
)0 >> 1;
39 typedef struct pf_flags_t
41 enum { LEN_DEFAULT
, LEN_SHORT
, LEN_LONG
} IntegerLength
;
42 BOOLEAN IntegerDouble
, IntegerNative
, LeftAlign
, Alternate
, PadZero
, WideString
;
43 int FieldLength
, Precision
;
53 /*********************************************************************
54 * _vsnprintf (NTDLL.@)
56 int CDECL
_vsnprintf( char *str
, size_t len
, const char *format
, va_list args
)
58 pf_output_a out
= { str
, len
};
59 int r
= pf_vsnprintf_a( &out
, format
, args
);
61 if (out
.used
< len
) str
[out
.used
] = 0;
66 /***********************************************************************
67 * _vsnwprintf (NTDLL.@)
69 int CDECL
_vsnwprintf( WCHAR
*str
, size_t len
, const WCHAR
*format
, va_list args
)
71 pf_output_w out
= { str
, len
};
72 int r
= pf_vsnprintf_w( &out
, format
, args
);
74 if (out
.used
< len
) str
[out
.used
] = 0;
79 /*********************************************************************
80 * _vscprintf (NTDLL.@)
82 int CDECL
_vscprintf( const char *format
, va_list valist
)
84 return _vsnprintf( NULL
, INT_MAX
, format
, valist
);
88 /*********************************************************************
89 * _vscwprintf (NTDLL.@)
91 int CDECL
_vscwprintf( const wchar_t *format
, va_list args
)
93 return _vsnwprintf( NULL
, INT_MAX
, format
, args
);
97 /*********************************************************************
100 int WINAPIV
NTDLL__snprintf( char *str
, size_t len
, const char *format
, ... )
105 va_start( valist
, format
);
106 ret
= _vsnprintf( str
, len
, format
, valist
);
112 /***********************************************************************
113 * _snwprintf (NTDLL.@)
115 int WINAPIV
_snwprintf( WCHAR
*str
, size_t len
, const WCHAR
*format
, ... )
120 va_start(valist
, format
);
121 ret
= _vsnwprintf( str
, len
, format
, valist
);
127 /*********************************************************************
128 * _vsnprintf_s (NTDLL.@)
130 int CDECL
_vsnprintf_s( char *str
, size_t size
, size_t len
, const char *format
, va_list args
)
132 pf_output_a out
= { str
, min( size
, len
) };
133 int r
= pf_vsnprintf_a( &out
, format
, args
);
135 if (out
.used
< size
) str
[out
.used
] = 0;
137 if (r
== size
) r
= -1;
142 /***********************************************************************
143 * _vsnwprintf_s (NTDLL.@)
145 int CDECL
_vsnwprintf_s( WCHAR
*str
, size_t size
, size_t len
, const WCHAR
*format
, va_list args
)
147 pf_output_w out
= { str
, min( size
, len
) };
148 int r
= pf_vsnprintf_w( &out
, format
, args
);
150 if (out
.used
< size
) str
[out
.used
] = 0;
152 if (r
== size
) r
= -1;
157 /*********************************************************************
158 * _snprintf_s (NTDLL.@)
160 int WINAPIV
_snprintf_s( char *str
, size_t size
, size_t len
, const char *format
, ... )
165 va_start( valist
, format
);
166 ret
= _vsnprintf_s( str
, size
, len
, format
, valist
);
172 /*********************************************************************
173 * _snwprintf_s (NTDLL.@)
175 int WINAPIV
_snwprintf_s( WCHAR
*str
, size_t size
, size_t len
, const WCHAR
*format
, ... )
180 va_start( valist
, format
);
181 ret
= _vsnwprintf_s( str
, size
, len
, format
, valist
);
187 /*********************************************************************
190 int CDECL
vsprintf( char *str
, const char *format
, va_list args
)
192 return _vsnprintf( str
, size_max
, format
, args
);
196 /*********************************************************************
197 * vsprintf_s (NTDLL.@)
199 int CDECL
vsprintf_s( char *str
, size_t size
, const char *format
, va_list args
)
201 return _vsnprintf_s( str
, size
, size
, format
, args
);
205 /*********************************************************************
206 * _vswprintf (NTDLL.@)
208 int CDECL
_vswprintf( WCHAR
*str
, const WCHAR
*format
, va_list args
)
210 return _vsnwprintf( str
, size_max
, format
, args
);
214 /*********************************************************************
215 * vswprintf_s (NTDLL.@)
217 int CDECL
vswprintf_s( WCHAR
*str
, size_t size
, const WCHAR
*format
, va_list args
)
219 return _vsnwprintf_s( str
, size
, size
, format
, args
);
223 /*********************************************************************
226 int WINAPIV
NTDLL_sprintf( char *str
, const char *format
, ... )
231 va_start( valist
, format
);
232 ret
= _vsnprintf( str
, size_max
, format
, valist
);
238 /*********************************************************************
239 * sprintf_s (NTDLL.@)
241 int WINAPIV
sprintf_s( char *str
, size_t size
, const char *format
, ... )
246 va_start( valist
, format
);
247 ret
= vsprintf_s( str
, size
, format
, valist
);
253 /***********************************************************************
256 int WINAPIV
NTDLL_swprintf( WCHAR
*str
, const WCHAR
*format
, ... )
261 va_start(valist
, format
);
262 ret
= _vsnwprintf( str
, size_max
, format
, valist
);
268 /***********************************************************************
269 * swprintf_s (NTDLL.@)
271 int WINAPIV
swprintf_s( WCHAR
*str
, size_t size
, const WCHAR
*format
, ... )
276 va_start(valist
, format
);
277 ret
= vswprintf_s( str
, size
, format
, valist
);