- if (!line_handler || mode == LINE_MODE_RO)
- return num_lines;
- i = buf + size - start;
- if (i && i != size)
- memmove(buf, start, i);
- return i;
-}
-
-/**
- * Call a custom function for each complete line.
- *
- * \param buf The buffer containing data seperated 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(LINE_MODE_RW, buf, size, line_handler,
- private_data);
+ ret = 0;
+ if (!(state & LSF_HAVE_WORD))
+ goto out;
+ ret = -ERRNO_TO_ERROR(EINVAL);
+ if (state & LSF_BACKSLASH) {
+ ERROR_LOG("trailing backslash\n");
+ goto out;
+ }
+ if (state & LSF_QUOTE) {
+ ERROR_LOG("unmatched quote character\n");
+ goto out;
+ }
+success:
+ *out = '\0';
+ return in - line;
+out:
+ free(*word);
+ *word = NULL;
+ return ret;