aboutsummaryrefslogtreecommitdiff
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.zip
glibc-96d0bf98cafd0b63721f369ca21ec64590551d47.tar.gz
glibc-96d0bf98cafd0b63721f369ca21ec64590551d47.tar.bz2
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 0000000..9b2d750
--- /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 */