diff --git a/src/common/FFstrbuf.h b/src/common/FFstrbuf.h index 7e82cdd4d..59497b56e 100644 --- a/src/common/FFstrbuf.h +++ b/src/common/FFstrbuf.h @@ -103,6 +103,10 @@ FF_C_NODISCARD uint64_t ffStrbufToUInt(const FFstrbuf* strbuf, uint64_t defaultV void ffStrbufUpperCase(FFstrbuf* strbuf); void ffStrbufLowerCase(FFstrbuf* strbuf); +// Function alters the buffer to extract lines or delimited segments (replaces the delimiter with '\0') +// so that buffer MUST be heap allocated (NOT a static string) +// `lineptr` must be `NULL` and `n` MUST be `0` for the first call +// Caller MUST NOT free `*lineptr` bool ffStrbufGetdelim(char** lineptr, size_t* n, char delimiter, FFstrbuf* buffer); void ffStrbufGetdelimRestore(char** lineptr, size_t* n, char delimiter, FFstrbuf* buffer); @@ -111,10 +115,14 @@ void ffStrbufGetdelimRestore(char** lineptr, size_t* n, char delimiter, FFstrbuf * * @details Behaves like getline(3) but reads from a FFstrbuf. * - * @param[in,out] lineptr The pointer to a pointer that will be set to the start of the line. - * Can be NULL for the first call. + * @param[in,out] lineptr The pointer to a pointer that will be set to the start of the line + (points to buffer's internal memory address to avoid memory allocation and copy). + MUST NOT be freed by the caller, unlike `getline(3)`. + * MUST be NULL for the first call. * @param[in,out] n The pointer to the size of the buffer of lineptr. - * @param[in] buffer The buffer to read from. The buffer must not be a string literal. + MUST be 0 for the first call. + * @param[in] buffer The buffer to read from. + MUST be heap allocated (NOT a static string). * * @return true if a line has been read, false if the end of the buffer has been reached. */ @@ -124,7 +132,7 @@ static inline bool ffStrbufGetline(char** lineptr, size_t* n, FFstrbuf* buffer) } /** * @brief Restore the end of a line that was modified by ffStrbufGetline. - * @warning This function should be called before breaking an ffStrbufGetline loop. + * @warning This function should be called before breaking an ffStrbufGetline loop if `buffer` will be used later. */ static inline void ffStrbufGetlineRestore(char** lineptr, size_t* n, FFstrbuf* buffer) {