]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - string.c
string: Clean up for_each_line() and related functions.
[paraslash.git] / string.c
index d7e74d9dda16915d4bbe865d1f268dfa7d311963..68e1f8a2d31735dae1e663bf833d2937e6466f4c 100644 (file)
--- a/string.c
+++ b/string.c
@@ -350,17 +350,38 @@ __malloc char *para_hostname(void)
 }
 
 /**
- * Controls behavior of for_each_complete_line().
+ * Call a custom function for each complete line.
+ *
+ * \param flags Any combination of flags defined in \ref for_each_line_flags.
+ * \param buf The buffer containing data separated by newlines.
+ * \param size The number of bytes in \a buf.
+ * \param line_handler The custom function.
+ * \param private_data Pointer passed to \a line_handler.
  *
- * \sa for_each_line(), for_each_line_ro().
+ * If \p line_handler is \p NULL, the function returns the number of complete
+ * lines in \p buf.
+ *
+ * Otherwise, \p line_handler is called for each complete line in \p buf. The
+ * first argument to \p line_handler is (a copy of) the current line, and \p
+ * private_data is passed as the second argument.  If the \p FELF_READ_ONLY
+ * flag is unset, a pointer into \a buf is passed to the line handler,
+ * otherwise a pointer to a copy of each line is passed instead.  This copy is
+ * freed immediately after the line handler returns.
+ *
+ * The function returns if \p line_handler returns a negative value or no more
+ * lines are in the buffer.  The rest of the buffer (last chunk containing an
+ * incomplete line) is moved to the beginning of the buffer if FELF_READ_ONLY is
+ * unset.
+ *
+ * \return If \p line_handler is not \p NULL and FELF_READ_ONLY is not set,
+ * this function returns the number of bytes not handled to \p line_handler,
+ * otherwise number of complete lines.  On errors the negative error code of
+ * the \p line_handler is returned.
+ *
+ * \sa \ref for_each_line_flags.
  */
-enum for_each_line_flags {
-       /** Activate read-only mode. */
-       FELF_READ_ONLY = 1 << 0,
-};
-
-static int for_each_complete_line(unsigned flags, char *buf,
-               size_t size, line_handler_t *line_handler, void *private_data)
+int for_each_line(unsigned flags, char *buf, size_t size,
+               line_handler_t *line_handler, void *private_data)
 {
        char *start = buf, *end;
        int ret, i, num_lines = 0;
@@ -409,56 +430,6 @@ static int for_each_complete_line(unsigned flags, char *buf,
        return i;
 }
 
-/**
- * Call a custom function for each complete line.
- *
- * \param buf The buffer containing data separated by newlines.
- * \param size The number of bytes in \a buf.
- * \param line_handler The custom function.
- * \param private_data Pointer passed to \a line_handler.
- *
- * If \p line_handler is \p NULL, the function returns the number of complete
- * lines in \p buf.  Otherwise, \p line_handler is called for each complete
- * line in \p buf.  The first argument to \p line_handler is the current line,
- * and \p private_data is passed as the second argument.  The function returns
- * if \p line_handler returns a negative value or no more lines are in the
- * buffer.  The rest of the buffer (last chunk containing an incomplete line)
- * is moved to the beginning of the buffer.
- *
- * \return If \p line_handler is not \p NULL, this function returns the number
- * of bytes not handled to \p line_handler on success, or the negative return
- * value of the \p line_handler on errors.
- *
- * \sa for_each_line_ro().
- */
-int for_each_line(char *buf, size_t size, line_handler_t *line_handler,
-               void *private_data)
-{
-       return for_each_complete_line(0, buf, size, line_handler, private_data);
-}
-
-/**
- * Call a custom function for each complete line.
- *
- * \param buf Same meaning as in \p for_each_line().
- * \param size Same meaning as in \p for_each_line().
- * \param line_handler Same meaning as in \p for_each_line().
- * \param private_data Same meaning as in \p for_each_line().
- *
- * This function behaves like \p for_each_line(), but \a buf is left unchanged.
- *
- * \return On success, the function returns the number of complete lines in \p
- * buf, otherwise the (negative) return value of \p line_handler is returned.
- *
- * \sa for_each_line().
- */
-int for_each_line_ro(char *buf, size_t size, line_handler_t *line_handler,
-               void *private_data)
-{
-       return for_each_complete_line(FELF_READ_ONLY, buf, size, line_handler,
-               private_data);
-}
-
 /** Return the hex characters of the lower 4 bits. */
 #define hex(a) (hexchar[(a) & 15])