aboutsummaryrefslogtreecommitdiff
path: root/libio
diff options
context:
space:
mode:
Diffstat (limited to 'libio')
-rw-r--r--libio/iofopncook.c1
-rw-r--r--libio/test-fmemopen.c21
2 files changed, 22 insertions, 0 deletions
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;
}