diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2010-10-06 23:41:20 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2010-10-06 23:41:20 +0000 |
commit | 1c3e1c03eed0fd378b0b8f7933a3f898a1c25189 (patch) | |
tree | 14e4f05610be3fabd0e143b7174f9ef76312c5d3 | |
parent | 9711ae4d9fb353051cbce8d4f72ce25bdf988f74 (diff) | |
download | binutils-1c3e1c03eed0fd378b0b8f7933a3f898a1c25189.zip binutils-1c3e1c03eed0fd378b0b8f7933a3f898a1c25189.tar.gz binutils-1c3e1c03eed0fd378b0b8f7933a3f898a1c25189.tar.bz2 |
* sim/cris/c/seek3.c, sim/cris/c/seek4.c: New tests.
-rw-r--r-- | sim/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/seek3.c | 49 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/seek4.c | 44 |
3 files changed, 97 insertions, 0 deletions
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog index 36e3add..9a94cc5 100644 --- a/sim/testsuite/ChangeLog +++ b/sim/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-10-07 Hans-Peter Nilsson <hp@axis.com> + + * sim/cris/c/seek3.c, sim/cris/c/seek4.c: New tests. + 2010-08-24 Hans-Peter Nilsson <hp@axis.com> * sim/cris/asm/nonvcv32.ms: Neutralize changed &&-in-macro gas syntax. diff --git a/sim/testsuite/sim/cris/c/seek3.c b/sim/testsuite/sim/cris/c/seek3.c new file mode 100644 index 0000000..5e7b578 --- /dev/null +++ b/sim/testsuite/sim/cris/c/seek3.c @@ -0,0 +1,49 @@ +/* Check for a sim bug, whereby the position was always unsigned + (truncation instead of sign-extension for 64-bit hosts). */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> + +int +main (void) +{ + FILE *f; + const char fname[] = "sk1test.dat"; + const char tsttxt[] + = "A random line of text, used to test correct read, write and seek.\n"; + char buf[sizeof tsttxt] = ""; + const char correct[] = "correct"; + char buf2[sizeof correct] = {0}; + int fd; + + f = fopen (fname, "wb"); + if (f == NULL + || fwrite (tsttxt, 1, strlen (tsttxt), f) != strlen (tsttxt) + || fclose (f) != 0) + { + printf ("fail\n"); + exit (1); + } + + /* We have to use file-descriptor calls instead of stream calls to + provoke the bug (for stream calls, the lseek call is canonicalized + to use SEEK_SET). */ + fd = open (fname, O_RDONLY); + if (fd < 0 + || read (fd, buf, strlen (tsttxt)) != strlen (tsttxt) + || strcmp (buf, tsttxt) != 0 + || lseek (fd, -30L, SEEK_CUR) != 36 + || read (fd, buf2, strlen (correct)) != strlen (correct) + || strcmp (buf2, correct) != 0) + { + printf ("fail\n"); + exit (1); + } + + printf ("pass\n"); + exit (0); +} diff --git a/sim/testsuite/sim/cris/c/seek4.c b/sim/testsuite/sim/cris/c/seek4.c new file mode 100644 index 0000000..16f3bb0 --- /dev/null +++ b/sim/testsuite/sim/cris/c/seek4.c @@ -0,0 +1,44 @@ +/* Check for a sim bug, whereby an invalid seek (to a negative offset) + did not return an error. */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> + +int +main (void) +{ + FILE *f; + const char fname[] = "sk1test.dat"; + const char tsttxt[] + = "A random line of text, used to test correct read, write and seek.\n"; + char buf[sizeof tsttxt] = ""; + int fd; + + f = fopen (fname, "wb"); + if (f == NULL + || fwrite (tsttxt, 1, strlen (tsttxt), f) != strlen (tsttxt) + || fclose (f) != 0) + { + printf ("fail\n"); + exit (1); + } + + fd = open (fname, O_RDONLY); + if (fd < 0 + || lseek (fd, -1L, SEEK_CUR) != -1 + || errno != EINVAL + || read (fd, buf, strlen (tsttxt)) != strlen (tsttxt) + || strcmp (buf, tsttxt) != 0) + { + printf ("fail\n"); + exit (1); + } + + printf ("pass\n"); + exit (0); +} |