about summary refs log tree commit diff
path: root/support/file_contents.h
diff options
context:
space:
mode:
authorJoseph Myers <josmyers@redhat.com>2024-09-03 13:53:01 +0000
committerJoseph Myers <josmyers@redhat.com>2024-09-03 13:53:01 +0000
commit96d0bf98cafd0b63721f369ca21ec64590551d47 (patch)
treeb246b03aa68b66903283e7155ad702e2f290f477 /support/file_contents.h
parent1927f718fcc48bdaea03086bdc2adf11279d655b (diff)
downloadglibc-96d0bf98cafd0b63721f369ca21ec64590551d47.tar.gz
glibc-96d0bf98cafd0b63721f369ca21ec64590551d47.tar.xz
glibc-96d0bf98cafd0b63721f369ca21ec64590551d47.zip
Add support/ code for checking file contents
For use in freopen tests, add various support/ helper interfaces for
use in checking file contents.

Tested for x86_64.
Diffstat (limited to 'support/file_contents.h')
-rw-r--r--support/file_contents.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/support/file_contents.h b/support/file_contents.h
new file mode 100644
index 0000000000..9b2d750aae
--- /dev/null
+++ b/support/file_contents.h
@@ -0,0 +1,63 @@
+/* Functionality for checking file contents.
+   Copyright (C) 2024 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/>.  */
+
+#ifndef SUPPORT_FILE_CONTENTS_H
+#define SUPPORT_FILE_CONTENTS_H
+
+#include <support/check.h>
+#include <stdio.h>
+
+__BEGIN_DECLS
+
+/* Check that an already-open file has exactly the given bytes,
+   starting at the current location in the file.  The file position
+   indicator is updated to point after the bytes compared.  Return 0
+   if equal, 1 otherwise or on read error.  */
+int support_compare_file_bytes (FILE *fp, const char *contents, size_t length);
+
+/* Check that an already-open file has exactly the given string as
+   contents, starting at the current offset.  The file position
+   indicator is updated to point after the bytes compared.  Return 0
+   if equal, 1 otherwise or on read error.  */
+int support_compare_file_string (FILE *fp, const char *contents);
+
+/* Check that a not-currently-open file has exactly the given bytes.
+   Return 0 if equal, 1 otherwise or on read error.  */
+int support_open_and_compare_file_bytes (const char *file,
+					 const char *contents,
+					 size_t length);
+
+/* Check that a not-currently-open file has exactly the given string
+   as contents, starting at the current offset.  Return 0 if equal, 1
+   otherwise or on read error.  */
+int support_open_and_compare_file_string (const char *file,
+					  const char *contents);
+
+/* Compare bytes read from an open file with the given string.  The
+   file position indicator is updated to point after the bytes
+   compared.  */
+#define TEST_COMPARE_FILE_STRING(FP, CONTENTS)			\
+  TEST_COMPARE (support_compare_file_string (FP, CONTENTS), 0)
+
+/* Read a file and compare bytes read from it with the given string.  */
+#define TEST_OPEN_AND_COMPARE_FILE_STRING(FILE, CONTENTS)		\
+  TEST_COMPARE (support_open_and_compare_file_string (FILE, CONTENTS), 0)
+
+__END_DECLS
+
+#endif /* SUPPORT_FILE_CONTENTS_H */