From: Volker Lendecke Date: Fri, 1 Mar 2024 20:19:51 +0000 (+0100) Subject: ctdb: Remove common/line.[ch] X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=73e806c559d8889026b2b14a8d22145bd1a2b430 ctdb: Remove common/line.[ch] This was an implementation of getline(3), use that instead. Signed-off-by: Volker Lendecke Reviewed-by: Martin Schwenke --- diff --git a/ctdb/common/line.c b/ctdb/common/line.c deleted file mode 100644 index c4c6726875b..00000000000 --- a/ctdb/common/line.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - Line based I/O over fds - - Copyright (C) Amitay Isaacs 2018 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . -*/ - -#include "replace.h" - -#include - -#include "lib/util/sys_rw.h" - -#include "common/line.h" - -struct line_read_state { - line_process_fn_t callback; - void *private_data; - char *buf; - size_t hint, len, offset; - int num_lines; -}; - -static bool line_read_one(char *buf, size_t start, size_t len, size_t *pos) -{ - size_t i; - - for (i=start; ibuf, start, state->offset, &pos); - if (! ok) { - break; - } - - state->buf[pos] = '\0'; - state->num_lines += 1; - - ret = state->callback(state->buf + start, state->private_data); - if (ret != 0) { - return ret; - } - - start = pos+1; - } - - if (pos > 0) { - if (pos+1 < state->offset) { - memmove(state->buf, - state->buf + pos+1, - state->offset - (pos+1)); - } - state->offset -= (pos+1); - } - - return 0; -} - -int line_read(int fd, - size_t length, - TALLOC_CTX *mem_ctx, - line_process_fn_t callback, - void *private_data, - int *num_lines) -{ - struct line_read_state state; - - if (length < 32) { - length = 32; - } - - state = (struct line_read_state) { - .callback = callback, - .private_data = private_data, - .hint = length, - }; - - while (1) { - ssize_t n; - int ret; - - if (state.offset == state.len) { - state.len += state.hint; - state.buf = talloc_realloc_size(mem_ctx, - state.buf, - state.len); - if (state.buf == NULL) { - return ENOMEM; - } - } - - n = sys_read(fd, - state.buf + state.offset, - state.len - state.offset); - if (n < 0) { - return errno; - } - if (n == 0) { - break; - } - - state.offset += n; - - ret = line_read_process(&state); - if (ret != 0) { - if (num_lines != NULL) { - *num_lines = state.num_lines; - } - return ret; - } - } - - if (num_lines != NULL) { - *num_lines = state.num_lines; - } - return 0; -} diff --git a/ctdb/common/line.h b/ctdb/common/line.h deleted file mode 100644 index 6b67f1e92e1..00000000000 --- a/ctdb/common/line.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - Line based I/O over fds - - Copyright (C) Amitay Isaacs 2018 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . -*/ - -#ifndef __CTDB_LINE_H__ -#define __CTDB_LINE_H__ - -#include - -/** - * @file line.h - * - * @brief Line based I/O over pipes and sockets - */ - -/** - * @brief The callback routine called to process a line - * - * @param[in] line The line read - * @param[in] private_data Private data for callback - * @return 0 to continue processing lines, non-zero to stop reading - */ -typedef int (*line_process_fn_t)(char *line, void *private_data); - -/** - * @brief Read a line (terminated by \n or \0) - * - * If there is any read error on fd, then errno will be returned. - * If callback function returns a non-zero value, then that value will be - * returned. - * - * @param[in] fd The file descriptor - * @param[in] length The expected length of a line (this is only a hint) - * @param[in] mem_ctx Talloc memory context - * @param[in] callback Callback function called when a line is read - * @param[in] private_data Private data for callback - * @param[out] num_lines Number of lines read so far - * @return 0 on on success, errno on failure - */ -int line_read(int fd, - size_t length, - TALLOC_CTX *mem_ctx, - line_process_fn_t callback, - void *private_data, - int *num_lines); - -#endif /* __CTDB_LINE_H__ */ diff --git a/ctdb/tests/UNIT/cunit/line_test_001.sh b/ctdb/tests/UNIT/cunit/line_test_001.sh deleted file mode 100755 index 5676893ba17..00000000000 --- a/ctdb/tests/UNIT/cunit/line_test_001.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh - -. "${TEST_SCRIPTS_DIR}/unit.sh" - -tfile="${CTDB_TEST_TMP_DIR}/line.$$" - -remove_files () -{ - rm -f "$tfile" -} - -test_cleanup remove_files - -> "$tfile" - -ok_null -unit_test line_test "$tfile" - -printf "\0" > "$tfile" - -required_result 1 < "$tfile" - -ok_null -unit_test line_test "$tfile" - -cat < "$tfile" -hello -world -EOF - -required_result 2 << EOF -hello -world -EOF -unit_test line_test "$tfile" - -required_result 2 << EOF -hello -world -EOF -unit_test line_test "$tfile" - -cat < "$tfile" -This is a really long long line full of random words and hopefully it will be read properly by the line test program and identified as a single line -EOF - -required_result 1 < "$tfile" -line number one -line number two -line number one -line number two -line number one -EOF - -required_result 5 < "$tfile" -this is line number one -this is line number two -this is line number three -this is line number four -this is line number five -EOF - -required_result 5 <. -*/ - -#include "replace.h" -#include "system/filesys.h" - -#include -#include - -#include "common/line.c" - -static int line_print(char *line, void *private_data) -{ - printf("%s\n", line); - fflush(stdout); - - return 0; -} - -int main(int argc, const char **argv) -{ - TALLOC_CTX *mem_ctx; - size_t hint = 32; - pid_t pid; - int ret, lines = 0; - int pipefd[2]; - - if (argc < 2 || argc > 3) { - fprintf(stderr, "Usage: %s []\n", argv[0]); - exit(1); - } - - if (argc == 3) { - long value; - - value = atol(argv[2]); - assert(value > 0); - hint = value; - } - - ret = pipe(pipefd); - assert(ret == 0); - - pid = fork(); - assert(pid != -1); - - if (pid == 0) { - char buffer[16]; - ssize_t n, n2; - int fd; - - close(pipefd[0]); - - fd = open(argv[1], O_RDONLY); - assert(fd != -1); - - while (1) { - n = read(fd, buffer, sizeof(buffer)); - assert(n >= 0 && (size_t)n <= sizeof(buffer)); - - if (n == 0) { - break; - } - - n2 = write(pipefd[1], buffer, n); - assert(n2 == n); - } - - close(pipefd[1]); - close(fd); - - exit(0); - } - - close(pipefd[1]); - - mem_ctx = talloc_new(NULL); - assert(mem_ctx != NULL); - - ret = line_read(pipefd[0], hint, NULL, line_print, NULL, &lines); - assert(ret == 0); - - talloc_free(mem_ctx); - - return lines; -} diff --git a/ctdb/wscript b/ctdb/wscript index a7b04541014..aee1164a95f 100644 --- a/ctdb/wscript +++ b/ctdb/wscript @@ -441,7 +441,6 @@ def build(bld): db_hash.c event_script.c hash_count.c - line.c logging.c path.c pidfile.c @@ -940,7 +939,6 @@ def build(bld): 'db_hash_test', 'event_script_test', 'hash_count_test', - 'line_test', 'pidfile_test', 'pkt_read_test', 'pkt_write_test',