From: Bruno Haible Date: Wed, 5 Feb 2025 20:04:34 +0000 (+0100) Subject: xstring-buffer-reversed: New module. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=223b97283b01179adea9243081516dcc9745f9a0;p=gnulib.git xstring-buffer-reversed: New module. * lib/xstring-buffer-reversed.c: New file, based on lib/xstring-buffer.c. * lib/xstring-buffer-reversed-printf.c: New file, based on lib/xstring-buffer-printf.c. * modules/xstring-buffer-reversed: New file. --- diff --git a/ChangeLog b/ChangeLog index 98f756de9a..0f03055688 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2025-02-05 Bruno Haible + + xstring-buffer-reversed: New module. + * lib/xstring-buffer-reversed.c: New file, based on + lib/xstring-buffer.c. + * lib/xstring-buffer-reversed-printf.c: New file, based on + lib/xstring-buffer-printf.c. + * modules/xstring-buffer-reversed: New file. + 2025-02-05 Bruno Haible string-buffer-reversed: Add tests. diff --git a/lib/xstring-buffer-reversed-printf.c b/lib/xstring-buffer-reversed-printf.c new file mode 100644 index 0000000000..32a927ee5e --- /dev/null +++ b/lib/xstring-buffer-reversed-printf.c @@ -0,0 +1,52 @@ +/* Error-checking functions on a string buffer that accumulates from the end. + Copyright (C) 2024-2025 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2025. */ + +#include + +/* Specification. */ +#include "string-buffer-reversed.h" + +#include + +#include "xalloc.h" + +int +sbr_xprependvf (struct string_buffer_reversed *buffer, + const char *formatstring, va_list list) +{ + if (sbr_prependvf (buffer, formatstring, list) < 0) + { + if (errno == ENOMEM) + xalloc_die (); + return -1; + } + return 0; +} + +int +sbr_xprependf (struct string_buffer_reversed *buffer, + const char *formatstring, ...) +{ + va_list args; + int ret; + + va_start (args, formatstring); + ret = sbr_xprependvf (buffer, formatstring, args); + va_end (args); + return ret; +} diff --git a/lib/xstring-buffer-reversed.c b/lib/xstring-buffer-reversed.c new file mode 100644 index 0000000000..411f858782 --- /dev/null +++ b/lib/xstring-buffer-reversed.c @@ -0,0 +1,73 @@ +/* Error-checking functions on a string buffer that accumulates from the end. + Copyright (C) 2024-2025 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This file 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2025. */ + +#include + +/* Specification. */ +#include "string-buffer-reversed.h" + +#include "xalloc.h" + +void +sbr_xprepend1 (struct string_buffer_reversed *buffer, char c) +{ + if (sbr_prepend1 (buffer, c) < 0) + xalloc_die (); +} + +void +sbr_xprepend_desc (struct string_buffer_reversed *buffer, string_desc_t s) +{ + if (sbr_prepend_desc (buffer, s) < 0) + xalloc_die (); +} + +void +sbr_xprepend_c (struct string_buffer_reversed *buffer, const char *str) +{ + if (sbr_prepend_c (buffer, str) < 0) + xalloc_die (); +} + +string_desc_t +sbr_xdupfree (struct string_buffer_reversed *buffer) +{ + if (buffer->error) + { + sbr_free (buffer); + return sd_new_addr (0, NULL); + } + string_desc_t contents = sbr_dupfree (buffer); + if (sd_data (contents) == NULL) + xalloc_die (); + return contents; +} + +char * +sbr_xdupfree_c (struct string_buffer_reversed *buffer) +{ + if (buffer->error) + { + sbr_free (buffer); + return NULL; + } + char *contents = sbr_dupfree_c (buffer); + if (contents == NULL) + xalloc_die (); + return contents; +} diff --git a/modules/xstring-buffer-reversed b/modules/xstring-buffer-reversed new file mode 100644 index 0000000000..f4b8091d27 --- /dev/null +++ b/modules/xstring-buffer-reversed @@ -0,0 +1,25 @@ +Description: +Error-checking functions on a string buffer. + +Files: +lib/xstring-buffer-reversed.c +lib/xstring-buffer-reversed-printf.c + +Depends-on: +string-buffer-reversed +xalloc-die + +configure.ac: +gl_MODULE_INDICATOR([xstring-buffer-reversed]) + +Makefile.am: +lib_SOURCES += xstring-buffer-reversed.c xstring-buffer-reversed-printf.c + +Include: +"string-buffer-reversed.h" + +License: +GPL + +Maintainer: +all