Patch #1684834: document some utility C API functions.
This commit is contained in:
parent
cae9f3d916
commit
5e0b865b0f
|
@ -930,3 +930,94 @@ PyArg_ParseTuple(args, "O|O:ref", &object, &callback)
|
||||||
If there is an error in the format string, the
|
If there is an error in the format string, the
|
||||||
\exception{SystemError} exception is set and \NULL{} returned.
|
\exception{SystemError} exception is set and \NULL{} returned.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
\section{String conversion and formatting \label{string-formatting}}
|
||||||
|
|
||||||
|
Functions for number conversion and formatted string output.
|
||||||
|
|
||||||
|
\begin{cfuncdesc}{int}{PyOS_snprintf}{char *str, size_t size,
|
||||||
|
const char *format, \moreargs}
|
||||||
|
Output not more than \var{size} bytes to \var{str} according to the format
|
||||||
|
string \var{format} and the extra arguments. See the \UNIX{} man
|
||||||
|
page \manpage{snprintf}{2}.
|
||||||
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
\begin{cfuncdesc}{int}{PyOS_vsnprintf}{char *str, size_t size,
|
||||||
|
const char *format, va_list va}
|
||||||
|
Output not more than \var{size} bytes to \var{str} according to the format
|
||||||
|
string \var{format} and the variable argument list \var{va}. \UNIX{}
|
||||||
|
man page \manpage{vsnprintf}{2}.
|
||||||
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
\cfunction{PyOS_snprintf} and \cfunction{PyOS_vsnprintf} wrap the
|
||||||
|
Standard C library functions \cfunction{snprintf()} and
|
||||||
|
\cfunction{vsnprintf()}. Their purpose is to guarantee consistent
|
||||||
|
behavior in corner cases, which the Standard C functions do not.
|
||||||
|
|
||||||
|
The wrappers ensure that \var{str}[\var{size}-1] is always
|
||||||
|
\character{\textbackslash0} upon return. They never write more than
|
||||||
|
\var{size} bytes (including the trailing \character{\textbackslash0}
|
||||||
|
into str. Both functions require that \code{\var{str} != NULL},
|
||||||
|
\code{\var{size} > 0} and \code{\var{format} != NULL}.
|
||||||
|
|
||||||
|
If the platform doesn't have \cfunction{vsnprintf()} and the buffer
|
||||||
|
size needed to avoid truncation exceeds \var{size} by more than 512
|
||||||
|
bytes, Python aborts with a \var{Py_FatalError}.
|
||||||
|
|
||||||
|
The return value (\var{rv}) for these functions should be interpreted
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
|
||||||
|
\item When \code{0 <= \var{rv} < \var{size}}, the output conversion
|
||||||
|
was successful and \var{rv} characters were written to \var{str}
|
||||||
|
(excluding the trailing \character{\textbackslash0} byte at
|
||||||
|
\var{str}[\var{rv}]).
|
||||||
|
|
||||||
|
\item When \code{\var{rv} >= \var{size}}, the output conversion was
|
||||||
|
truncated and a buffer with \code{\var{rv} + 1} bytes would have
|
||||||
|
been needed to succeed. \var{str}[\var{size}-1] is
|
||||||
|
\character{\textbackslash0} in this case.
|
||||||
|
|
||||||
|
\item When \code{\var{rv} < 0}, ``something bad happened.''
|
||||||
|
\var{str}[\var{size}-1] is \character{\textbackslash0} in this case
|
||||||
|
too, but the rest of \var{str} is undefined. The exact cause of the
|
||||||
|
error depends on the underlying platform.
|
||||||
|
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
The following functions provide locale-independent string to number
|
||||||
|
conversions.
|
||||||
|
|
||||||
|
\begin{cfuncdesc}{double}{PyOS_ascii_strtod}{const char *nptr, char **endptr}
|
||||||
|
Convert a string to a \ctype{double}. This function behaves like the
|
||||||
|
Standard C function \cfunction{strtod()} does in the C locale. It does
|
||||||
|
this without changing the current locale, since that would not be
|
||||||
|
thread-safe.
|
||||||
|
|
||||||
|
\cfunction{PyOS_ascii_strtod} should typically be used for reading
|
||||||
|
configuration files or other non-user input that should be locale
|
||||||
|
independent. \versionadded{2.4}
|
||||||
|
|
||||||
|
See the \UNIX{} man page \manpage{strtod}{2} for details.
|
||||||
|
|
||||||
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
\begin{cfuncdesc}{char *}{PyOS_ascii_formatd}{char *buffer, size_t buf_len,
|
||||||
|
const char *format, double d}
|
||||||
|
Convert a \ctype{double} to a string using the \character{.} as the
|
||||||
|
decimal separator. \var{format} is a \cfunction{printf()}-style format
|
||||||
|
string specifying the number format. Allowed conversion characters are
|
||||||
|
\character{e}, \character{E}, \character{f}, \character{F},
|
||||||
|
\character{g} and \character{G}.
|
||||||
|
|
||||||
|
The return value is a pointer to \var{buffer} with the converted
|
||||||
|
string or NULL if the conversion failed. \versionadded{2.4}
|
||||||
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
\begin{cfuncdesc}{double}{PyOS_ascii_atof}{const char *nptr}
|
||||||
|
Convert a string to a \ctype{double} in a locale-independent
|
||||||
|
way. \versionadded{2.4}
|
||||||
|
|
||||||
|
See the \UNIX{} man page \manpage{atof}{2} for details.
|
||||||
|
\end{cfuncdesc}
|
||||||
|
|
Loading…
Reference in New Issue