mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 14:50:05 +00:00
tests: replace fread by xfread
With fortification enabled, fread calls return result needs to be checked, has it gets the __wur macro enabled. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
parent
127c21c0e2
commit
a84dcb4bdf
@ -3,6 +3,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
static char *fname;
|
static char *fname;
|
||||||
|
|
||||||
@ -48,7 +49,7 @@ do_test (void)
|
|||||||
perror ("fopen(\"r\")");
|
perror ("fopen(\"r\")");
|
||||||
}
|
}
|
||||||
|
|
||||||
fread (buf, 3, 1, f);
|
xfread (buf, 3, 1, f);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (fseek (f, -10, SEEK_CUR) == 0)
|
if (fseek (f, -10, SEEK_CUR) == 0)
|
||||||
{
|
{
|
||||||
@ -72,7 +73,7 @@ Got %d instead\n",
|
|||||||
perror ("fopen(\"r+\")");
|
perror ("fopen(\"r+\")");
|
||||||
}
|
}
|
||||||
|
|
||||||
fread (buf, 3, 1, f);
|
xfread (buf, 3, 1, f);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (fseek (f, -10, SEEK_CUR) == 0)
|
if (fseek (f, -10, SEEK_CUR) == 0)
|
||||||
{
|
{
|
||||||
@ -96,7 +97,7 @@ Got %d instead\n",
|
|||||||
perror ("fopen(\"r+\")");
|
perror ("fopen(\"r+\")");
|
||||||
}
|
}
|
||||||
|
|
||||||
fread (buf, 3, 1, f);
|
xfread (buf, 3, 1, f);
|
||||||
if (ftell (f) != 3)
|
if (ftell (f) != 3)
|
||||||
{
|
{
|
||||||
puts ("ftell failed");
|
puts ("ftell failed");
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
char x[4096], z[4096], b[21], m[4096 * 4];
|
char x[4096], z[4096], b[21], m[4096 * 4];
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -20,24 +22,24 @@ main (void)
|
|||||||
}
|
}
|
||||||
rewind (f);
|
rewind (f);
|
||||||
|
|
||||||
fread (m, 4096 * 4 - 10, 1, f);
|
xfread (m, 4096 * 4 - 10, 1, f);
|
||||||
fread (b, 20, 1, f);
|
xfread (b, 20, 1, f);
|
||||||
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx");
|
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx");
|
||||||
if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx"))
|
if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx"))
|
||||||
failed = 1;
|
failed = 1;
|
||||||
|
|
||||||
fseek (f, -40, SEEK_CUR);
|
fseek (f, -40, SEEK_CUR);
|
||||||
fread (b, 20, 1, f);
|
xfread (b, 20, 1, f);
|
||||||
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzzzzzzzzzzz");
|
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzzzzzzzzzzz");
|
||||||
if (strcmp (b, "zzzzzzzzzzzzzzzzzzzz"))
|
if (strcmp (b, "zzzzzzzzzzzzzzzzzzzz"))
|
||||||
failed = 1;
|
failed = 1;
|
||||||
|
|
||||||
fread (b, 20, 1, f);
|
xfread (b, 20, 1, f);
|
||||||
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx");
|
printf ("got %s (should be %s)\n", b, "zzzzzzzzzzxxxxxxxxxx");
|
||||||
if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx"))
|
if (strcmp (b, "zzzzzzzzzzxxxxxxxxxx"))
|
||||||
failed = 1;
|
failed = 1;
|
||||||
|
|
||||||
fread (b, 20, 1, f);
|
xfread (b, 20, 1, f);
|
||||||
printf ("got %s (should be %s)\n", b, "xxxxxxxxxxxxxxxxxxxx");
|
printf ("got %s (should be %s)\n", b, "xxxxxxxxxxxxxxxxxxxx");
|
||||||
if (strcmp (b, "xxxxxxxxxxxxxxxxxxxx"))
|
if (strcmp (b, "xxxxxxxxxxxxxxxxxxxx"))
|
||||||
failed = 1;
|
failed = 1;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
main (void)
|
main (void)
|
||||||
{
|
{
|
||||||
@ -32,7 +34,7 @@ main (void)
|
|||||||
char buf[25];
|
char buf[25];
|
||||||
|
|
||||||
buf[0] = j;
|
buf[0] = j;
|
||||||
fread (buf + 1, 1, 23, f);
|
xfread (buf + 1, 1, 23, f);
|
||||||
buf[24] = '\0';
|
buf[24] = '\0';
|
||||||
if (strcmp (buf, "Where does this text go?") != 0)
|
if (strcmp (buf, "Where does this text go?") != 0)
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
int stdio_block_read = 1, stdio_block_write = 1;
|
int stdio_block_read = 1, stdio_block_write = 1;
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -30,7 +32,7 @@ main (int argc, char *argv[])
|
|||||||
fseek (f, 8180L, 0);
|
fseek (f, 8180L, 0);
|
||||||
fwrite ("Where does this text come from?", 1, 31, f);
|
fwrite ("Where does this text come from?", 1, 31, f);
|
||||||
fseek (f, 8180L, 0);
|
fseek (f, 8180L, 0);
|
||||||
fread (buffer, 1, 31, f);
|
xfread (buffer, 1, 31, f);
|
||||||
fwrite (buffer, 1, 31, stdout);
|
fwrite (buffer, 1, 31, stdout);
|
||||||
fclose (f);
|
fclose (f);
|
||||||
remove (filename);
|
remove (filename);
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
|
|
||||||
#define THE_COOKIE ((void *) 0xdeadbeeful)
|
#define THE_COOKIE ((void *) 0xdeadbeeful)
|
||||||
|
|
||||||
@ -77,7 +79,8 @@ do_test (void)
|
|||||||
|
|
||||||
f = fopencookie (THE_COOKIE, "r+", fcts);
|
f = fopencookie (THE_COOKIE, "r+", fcts);
|
||||||
|
|
||||||
fread (buf, 1, 1, f);
|
xfread (buf, 1, 1, f);
|
||||||
|
|
||||||
fwrite (buf, 1, 1, f);
|
fwrite (buf, 1, 1, f);
|
||||||
fseek (f, 0, SEEK_CUR);
|
fseek (f, 0, SEEK_CUR);
|
||||||
fclose (f);
|
fclose (f);
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <support/xstdio.h>
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_buffer (const char *s, size_t n)
|
print_buffer (const char *s, size_t n)
|
||||||
{
|
{
|
||||||
@ -153,7 +155,7 @@ do_test_read_seek_neg (const char *mode, const char *expected)
|
|||||||
|
|
||||||
FILE *fp = fmemopen (buf, sizeof (buf), mode);
|
FILE *fp = fmemopen (buf, sizeof (buf), mode);
|
||||||
fseek (fp, offset, SEEK_END);
|
fseek (fp, offset, SEEK_END);
|
||||||
fread (tmp, tmps, 1, fp);
|
xfread (tmp, tmps, 1, fp);
|
||||||
|
|
||||||
if (memcmp (tmp, expected, tmps) != 0)
|
if (memcmp (tmp, expected, tmps) != 0)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +125,7 @@ libsupport-routines = \
|
|||||||
xfclose \
|
xfclose \
|
||||||
xfopen \
|
xfopen \
|
||||||
xfork \
|
xfork \
|
||||||
|
xfread \
|
||||||
xfreopen \
|
xfreopen \
|
||||||
xftruncate \
|
xftruncate \
|
||||||
xgetline \
|
xgetline \
|
||||||
|
39
support/xfread.c
Normal file
39
support/xfread.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* fread with error checking.
|
||||||
|
Copyright (C) 2023 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>
|
||||||
|
|
||||||
|
void
|
||||||
|
xfread (void *ptr, size_t size, size_t nmemb, FILE *stream)
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
char *p = ptr;
|
||||||
|
|
||||||
|
while (count < nmemb)
|
||||||
|
{
|
||||||
|
size_t ret = fread (p, size, nmemb - count, stream);
|
||||||
|
if (ret <= 0 && ferror(stream))
|
||||||
|
FAIL_EXIT1 ("read of %zu bytes failed after %td: %m",
|
||||||
|
size * nmemb, p - (char *) ptr);
|
||||||
|
count += ret;
|
||||||
|
p += size * ret;
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,7 @@ __BEGIN_DECLS
|
|||||||
FILE *xfopen (const char *path, const char *mode);
|
FILE *xfopen (const char *path, const char *mode);
|
||||||
void xfclose (FILE *);
|
void xfclose (FILE *);
|
||||||
FILE *xfreopen (const char *path, const char *mode, FILE *stream);
|
FILE *xfreopen (const char *path, const char *mode, FILE *stream);
|
||||||
|
void xfread (void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||||
|
|
||||||
/* Read a line from FP, using getline. *BUFFER must be NULL, or a
|
/* Read a line from FP, using getline. *BUFFER must be NULL, or a
|
||||||
heap-allocated pointer of *LENGTH bytes. Return the number of
|
heap-allocated pointer of *LENGTH bytes. Return the number of
|
||||||
|
Loading…
Reference in New Issue
Block a user