libio: Fix fmemopen 'w' mode with provided buffer
If 'w' mode is used with a provided buffer the fmemopen will try to find the first null byte to set as maximum internal stream size. It should be done only for append mode ('a'). Kudos for Stefan Liebler for finding this error on s390-32. * libio/fmemopen.c (__fmemopen): Fix 'w' openmode with provided buffer. * stdio-common/tst-fmemopen2.c (do_test_with_buffer): Fix typo and fail output information.
This commit is contained in:
parent
b42f8cad52
commit
787813b144
@ -1,3 +1,10 @@
|
||||
2015-07-16 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* libio/fmemopen.c (__fmemopen): Fix 'w' openmode with provided
|
||||
buffer.
|
||||
* stdio-common/tst-fmemopen2.c (do_test_with_buffer): Fix typo and
|
||||
fail output information.
|
||||
|
||||
2015-07-16 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc64/multiarch/Makefile: Add strstr-power7
|
||||
|
@ -150,7 +150,7 @@ __fmemopen (void *buf, size_t len, const char *mode)
|
||||
cookie_io_functions_t iof;
|
||||
fmemopen_cookie_t *c;
|
||||
|
||||
c = (fmemopen_cookie_t *) malloc (sizeof (fmemopen_cookie_t));
|
||||
c = (fmemopen_cookie_t *) calloc (sizeof (fmemopen_cookie_t), 1);
|
||||
if (c == NULL)
|
||||
return NULL;
|
||||
|
||||
@ -165,7 +165,6 @@ __fmemopen (void *buf, size_t len, const char *mode)
|
||||
return NULL;
|
||||
}
|
||||
c->buffer[0] = '\0';
|
||||
c->maxpos = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -182,7 +181,8 @@ __fmemopen (void *buf, size_t len, const char *mode)
|
||||
if (mode[0] == 'w' && mode[1] == '+')
|
||||
c->buffer[0] = '\0';
|
||||
|
||||
c->maxpos = strnlen (c->buffer, len);
|
||||
if (mode[0] == 'a')
|
||||
c->maxpos = strnlen (c->buffer, len);
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,7 +34,7 @@ do_test_with_buffer (void)
|
||||
FILE *fp = fmemopen (buf, nbuf, "w");
|
||||
if (fp == NULL)
|
||||
{
|
||||
printf ("FAIL: fmemopen failedi (%s)\n", __FUNCTION__);
|
||||
printf ("FAIL: fmemopen failed (%s)\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ do_test_with_buffer (void)
|
||||
if (o != nstr)
|
||||
{
|
||||
printf ("FAIL: third ftello returned %jd, expected %zu\n",
|
||||
(intmax_t)o, nbuf);
|
||||
(intmax_t)o, nstr);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user