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.
+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
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;
return NULL;
}
c->buffer[0] = '\0';
- c->maxpos = 0;
}
else
{
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);
}
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;
}
if (o != nstr)
{
printf ("FAIL: third ftello returned %jd, expected %zu\n",
- (intmax_t)o, nbuf);
+ (intmax_t)o, nstr);
result = 1;
}