diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | libio/iofopncook.c | 1 | ||||
-rw-r--r-- | libio/test-fmemopen.c | 21 |
4 files changed, 32 insertions, 2 deletions
@@ -1,5 +1,12 @@ 2015-09-01 Paul Pluzhnikov <ppluzhnikov@google.com> + [BZ #18757] + * libio/iofopncook.c (_IO_fopencookie): Set errno on failure. + * libio/test-fmemopen.c (do_bz18820): Extend the test to cover + BZ #18757. + +2015-09-01 Paul Pluzhnikov <ppluzhnikov@google.com> + * malloc/mtrace.pl: Filter out NULL entries. 2015-09-01 Joseph Myers <joseph@codesourcery.com> @@ -11,8 +11,9 @@ Version 2.23 2898, 14341, 15786, 16141, 16517, 16519, 16520, 16734, 16973, 17787, 17905, 18084, 18086, 18240, 18265, 18370, 18421, 18480, 18525, 18610, - 18618, 18647, 18661, 18674, 18681, 18778, 18781, 18787, 18789, 18790, - 18795, 18796, 18820, 18823, 18824, 18863, 18870, 18873, 18887. + 18618, 18647, 18661, 18674, 18681, 18757, 18778, 18781, 18787, 18789, + 18790, 18795, 18796, 18820, 18823, 18824, 18863, 18870, 18873, 18887. + * The obsolete header <regexp.h> has been removed. Programs that require this header must be updated to use <regex.h> instead. diff --git a/libio/iofopncook.c b/libio/iofopncook.c index b845d29..978a7fa 100644 --- a/libio/iofopncook.c +++ b/libio/iofopncook.c @@ -189,6 +189,7 @@ _IO_fopencookie (cookie, mode, io_functions) read_write = _IO_NO_READS|_IO_IS_APPENDING; break; default: + __set_errno (EINVAL); return NULL; } if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+')) diff --git a/libio/test-fmemopen.c b/libio/test-fmemopen.c index e8e757f..a62f664 100644 --- a/libio/test-fmemopen.c +++ b/libio/test-fmemopen.c @@ -19,6 +19,7 @@ static char buffer[] = "foobar"; +#include <errno.h> #include <stdio.h> #include <string.h> #include <errno.h> @@ -30,6 +31,7 @@ do_bz18820 (void) char ch; FILE *stream; + errno = 0; stream = fmemopen (&ch, 1, "?"); if (stream) { @@ -37,6 +39,11 @@ do_bz18820 (void) fclose (stream); return 1; } + if (errno != EINVAL) + { + printf ("fmemopen: got %i, expected EINVAL (%i)\n", errno, EINVAL); + return 10; + } stream = fmemopen (NULL, 42, "?"); if (stream) @@ -46,6 +53,20 @@ do_bz18820 (void) return 2; } + errno = 0; + stream = fmemopen (NULL, ~0, "w"); + if (stream) + { + printf ("fmemopen: expected NULL, got %p\n", stream); + fclose (stream); + return 3; + } + if (errno != ENOMEM) + { + printf ("fmemopen: got %i, expected ENOMEM (%i)\n", errno, ENOMEM); + return 20; + } + return 0; } |