[PATCH 2.40 2/4] support: Implement 'xfmemopen' for seamless 'fmemopen' use

Adarsh Jagadish Kamini <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
From: "Maciej W. Rozycki" <[email protected]>

Add 'xfmemopen' wrapper for seamless 'fmemopen' use in tests, following
'xfopen', 'xfclose', etc., and providing a standardized error reporting
facility.

Reviewed-by: Florian Weimer <[email protected]>
(cherry picked from commit fe709cc24578ecfd2ff5b07e10e3829fcb55075b)
Signed-off-by: Adarsh Jagadish Kamini <[email protected]>
---
 support/Makefile    |  1 +
 support/xfmemopen.c | 31 +++++++++++++++++++++++++++++++
 support/xstdio.h    |  1 +
 3 files changed, 33 insertions(+)
 create mode 100644 support/xfmemopen.c

diff --git a/support/Makefile b/support/Makefile
index aa57207bdc..2999530068 100644
--- a/support/Makefile
+++ b/support/Makefile
@@ -125,6 +125,7 @@ libsupport-routines = \
   xfchmod \
   xfclose \
   xfgets \
+  xfmemopen \
   xfopen \
   xfork \
   xfread \
diff --git a/support/xfmemopen.c b/support/xfmemopen.c
new file mode 100644
index 0000000000..f1dbc72c67
--- /dev/null
+++ b/support/xfmemopen.c
@@ -0,0 +1,31 @@
+/* fmemopen with error checking.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library 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 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <support/xstdio.h>
+
+#include <support/check.h>
+#include <stdlib.h>
+
+FILE *
+xfmemopen (void *mem, size_t len, const char *mode)
+{
+  FILE *fp = fmemopen (mem, len, mode);
+  if (fp == NULL)
+    FAIL_EXIT1 ("fmemopen (mode \"%s\"): %m", mode);
+  return fp;
+}
diff --git a/support/xstdio.h b/support/xstdio.h
index 942b6225d7..5b5f2ce324 100644
--- a/support/xstdio.h
+++ b/support/xstdio.h
@@ -27,6 +27,7 @@ __BEGIN_DECLS
 FILE *xfopen (const char *path, const char *mode);
 void xfclose (FILE *);
 FILE *xfreopen (const char *path, const char *mode, FILE *stream);
+FILE *xfmemopen (void *mem, size_t len, const char *mode);
 void xfread (void *ptr, size_t size, size_t nmemb, FILE *stream);
 char *xfgets (char *s, int size, FILE *stream);
 
-- 
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.