[vlc-commits] memstream: document
Rémi Denis-Courmont
git at videolan.org
Wed Jan 15 17:53:28 CET 2020
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jan 15 18:43:22 2020 +0200| [723f7122abd39f9d94a36ff59ec4d8dfd6b7007c] | committer: Rémi Denis-Courmont
memstream: document
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=723f7122abd39f9d94a36ff59ec4d8dfd6b7007c
---
include/vlc_memstream.h | 96 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 94 insertions(+), 2 deletions(-)
diff --git a/include/vlc_memstream.h b/include/vlc_memstream.h
index 0ed78a7315..328982d8ce 100644
--- a/include/vlc_memstream.h
+++ b/include/vlc_memstream.h
@@ -24,6 +24,19 @@
# include <stdarg.h>
# include <stdio.h>
+/**
+ * \defgroup memstream In-memory byte streams
+ * \ingroup cext
+ *
+ * In-memory byte stream are a portable wrapper for in-memory formatted output
+ * byte streams. Compare with POSIX @c open_memstream().
+ *
+ * @{
+ */
+
+/**
+ * In-memory stream object.
+ */
struct vlc_memstream
{
union
@@ -31,33 +44,109 @@ struct vlc_memstream
FILE *stream;
int error;
};
- char *ptr;
- size_t length;
+ char *ptr; /**< Buffer start address */
+ size_t length; /**< Buffer length in bytes */
};
+/**
+ * Initializes a byte stream object.
+ *
+ * @note Even when this function fails, the stream object is initialized and
+ * can be used safely. It is sufficient to check for errors from
+ * vlc_memstream_flush() and vlc_memstream_close().
+ *
+ * Compare with POSIX @c open_memstream().
+ *
+ * @param ms byte stream object
+ *
+ * @retval 0 on success
+ * @retval EOF on error
+ */
VLC_API
int vlc_memstream_open(struct vlc_memstream *ms);
+/**
+ * Flushes a byte stream object.
+ *
+ * This function ensures that any previous write to the byte stream is flushed
+ * and the in-memory buffer is synchronized. It can be used observe the content
+ * of the buffer before the final vlc_memstream_close().
+ *
+ * Compare with @c fflush().
+ *
+ * @note vlc_memstream_close() implicitly flushes the object.
+ * Calling vlc_memstream_flush() before closing is thus superfluous.
+ *
+ * @warning @c ms->ptr must <b>not</b> be freed. It can only be freed after
+ * a successful call to vlc_memstream_close().
+ *
+ * @retval 0 success, i.e., @c ms->ptr and @c ms->length are valid
+ * @retval EOF failure (@c ms->ptr and @c ms->length are unspecified)
+ */
VLC_API
int vlc_memstream_flush(struct vlc_memstream *ms) VLC_USED;
+/**
+ * Closes a byte stream object.
+ *
+ * This function flushes the stream object, releases any underlying
+ * resource, except for the heap-allocated formatted buffer @c ms->ptr,
+ * and deinitializes the object.
+ *
+ * On success, the caller is responsible for freeing the buffer with @c free().
+ *
+ * Compare with @c fclose().
+ *
+ * \retval 0 success
+ * \retval EOF failure (@c ms->ptr and @c ms->length are unspecified)
+ */
VLC_API
int vlc_memstream_close(struct vlc_memstream *ms) VLC_USED;
+/**
+ * Appends a binary blob to a byte stream.
+ *
+ * Compare with @c fwrite().
+ *
+ * @param ptr start address of the blob
+ * @param length byte length of the blob
+ */
VLC_API
size_t vlc_memstream_write(struct vlc_memstream *ms,
const void *ptr, size_t len);
+/**
+ * Appends a single byte to a byte stream.
+ *
+ * Compare with @c putc() or @c fputc().
+ *
+ * @param Unsigned byte value converted to int.
+ */
VLC_API
int vlc_memstream_putc(struct vlc_memstream *ms, int c);
+/**
+ * Appends a nul-terminated string to a byte stream.
+ *
+ * Compare with @c fputs().
+ */
VLC_API
int vlc_memstream_puts(struct vlc_memstream *ms, const char *str);
+/**
+ * Appends a formatted string to a byte stream.
+ *
+ * Compare with @c vfprintf().
+ */
VLC_API
int vlc_memstream_vprintf(struct vlc_memstream *ms, const char *fmt,
va_list args);
+/**
+ * Appends a formatted string to a byte stream.
+ *
+ * Compare with @c fprintf().
+ */
VLC_API
int vlc_memstream_printf(struct vlc_memstream *s, const char *fmt,
...) VLC_FORMAT(2,3);
@@ -73,4 +162,7 @@ static inline int vlc_memstream_puts_len(struct vlc_memstream *ms,
vlc_memstream_puts_len(ms,s,__builtin_strlen(s)) : \
vlc_memstream_puts(ms,s))
# endif
+
+/** @} */
+
#endif /* VLC_MEMSTREAM_H */
More information about the vlc-commits
mailing list