]> Savannah Git Hosting - gnulib.git/commitdiff
xstring-buffer-reversed: New module.
authorBruno Haible <bruno@clisp.org>
Wed, 5 Feb 2025 20:04:34 +0000 (21:04 +0100)
committerBruno Haible <bruno@clisp.org>
Wed, 5 Feb 2025 20:58:25 +0000 (21:58 +0100)
* 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.

ChangeLog
lib/xstring-buffer-reversed-printf.c [new file with mode: 0644]
lib/xstring-buffer-reversed.c [new file with mode: 0644]
modules/xstring-buffer-reversed [new file with mode: 0644]

index 98f756de9a75a0945180b3a7e62e80d054dbd784..0f030556884970e526e35be951984c739da89520 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2025-02-05  Bruno Haible  <bruno@clisp.org>
+
+       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  <bruno@clisp.org>
 
        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 (file)
index 0000000..32a927e
--- /dev/null
@@ -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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2025.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "string-buffer-reversed.h"
+
+#include <errno.h>
+
+#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 (file)
index 0000000..411f858
--- /dev/null
@@ -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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2025.  */
+
+#include <config.h>
+
+/* 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 (file)
index 0000000..f4b8091
--- /dev/null
@@ -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