From a6a18ae9af43f870c82836ec0c9b486db6e58b15 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 28 May 2007 20:09:44 +0000 Subject: [PATCH] Add xfer_[v]printf() functions. --- src/core/xfer.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/include/gpxe/xfer.h | 4 ++++ 2 files changed, 45 insertions(+) diff --git a/src/core/xfer.c b/src/core/xfer.c index 54377c70..2250687e 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -17,6 +17,7 @@ */ #include +#include #include #include @@ -221,6 +222,46 @@ int xfer_deliver_raw ( struct xfer_interface *xfer, return rc; } +/** + * Deliver formatted string + * + * @v xfer Data transfer interface + * @v format Format string + * @v args Arguments corresponding to the format string + * @ret rc Return status code + */ +int xfer_vprintf ( struct xfer_interface *xfer, const char *format, + va_list args ) { + size_t len; + va_list args_tmp; + + va_copy ( args_tmp, args ); + len = vsnprintf ( NULL, 0, format, args ); + { + char buf[len + 1]; + vsnprintf ( buf, sizeof ( buf ), format, args_tmp ); + return xfer_deliver_raw ( xfer, buf, len ); + } +} + +/** + * Deliver formatted string + * + * @v xfer Data transfer interface + * @v format Format string + * @v ... Arguments corresponding to the format string + * @ret rc Return status code + */ +int xfer_printf ( struct xfer_interface *xfer, const char *format, ... ) { + va_list args; + int rc; + + va_start ( args, format ); + rc = xfer_vprintf ( xfer, format, args ); + va_end ( args ); + return rc; +} + /**************************************************************************** * * Helper methods diff --git a/src/include/gpxe/xfer.h b/src/include/gpxe/xfer.h index e6c896c3..f946ab1c 100644 --- a/src/include/gpxe/xfer.h +++ b/src/include/gpxe/xfer.h @@ -143,6 +143,10 @@ extern int xfer_deliver_iob ( struct xfer_interface *xfer, struct io_buffer *iobuf ); extern int xfer_deliver_raw ( struct xfer_interface *xfer, const void *data, size_t len ); +extern int xfer_vprintf ( struct xfer_interface *xfer, + const char *format, va_list args ); +extern int xfer_printf ( struct xfer_interface *xfer, + const char *format, ... ); extern void ignore_xfer_close ( struct xfer_interface *xfer, int rc ); extern int ignore_xfer_vredirect ( struct xfer_interface *xfer,