/** * Copyright (C) Mellanox Technologies Ltd. 2019. ALL RIGHTS RESERVED. * * See file LICENSE for terms. */ #ifndef UCS_STRING_BUFFER_H_ #define UCS_STRING_BUFFER_H_ #include #include #include BEGIN_C_DECLS /** * String buffer - a dynamic NULL-terminated character buffer which can grow * on demand. */ typedef struct ucs_string_buffer { char *buffer; /* Buffer pointer */ size_t length; /* Actual string length */ size_t capacity; /* Allocated memory size */ } ucs_string_buffer_t; /** * Initialize a string buffer * * @param [out] strb String buffer to initialize. */ void ucs_string_buffer_init(ucs_string_buffer_t *strb); /** * Cleanup a string buffer and release any memory associated with it. * * @param [out] strb String buffer to clean up. */ void ucs_string_buffer_cleanup(ucs_string_buffer_t *strb); /** * Append a formatted string to the string buffer. * * @param [inout] strb String buffer to append to. * @param [in] fmt Format string. * * @return UCS_OK on success or UCS_ERR_NO_MEOMRY if could not allocate memory * to grow the string. */ ucs_status_t ucs_string_buffer_appendf(ucs_string_buffer_t *strb, const char *fmt, ...) UCS_F_PRINTF(2, 3); /** * Remove specific characters from the end of the string. * * @param [inout] strb String buffer remote characters from. * @param [in] charset C-string with the set of characters to remove. * If NULL, this function removes whitespace characters, * as defined by isspace (3). * * This function removes the largest contiguous suffix from the input string * 'strb', which consists entirely of characters in 'charset'. */ void ucs_string_buffer_rtrim(ucs_string_buffer_t *strb, const char *charset); /** * Return a temporary pointer to a C-style string which represents the string * buffer. The returned string is valid only as long as no other operation is * done on the string buffer (including append). * * @param [in] strb String buffer to convert to a C-style string * * @return C-style string representing the data in the buffer. */ const char *ucs_string_buffer_cstr(const ucs_string_buffer_t *strb); END_C_DECLS #endif