From patchwork Thu Jul 16 11:58:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Liebler X-Patchwork-Id: 7718 Received: (qmail 82981 invoked by alias); 16 Jul 2015 11:58:48 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 82960 invoked by uid 89); 16 Jul 2015 11:58:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: plane.gmane.org To: libc-alpha@sourceware.org From: Stefan Liebler Subject: Re: [PATCH] libio: Fix fmemopen 'w' mode with provided buffer Date: Thu, 16 Jul 2015 13:58:25 +0200 Lines: 79 Message-ID: References: <55A799A3.6040202@linaro.org> Mime-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 In-Reply-To: <55A799A3.6040202@linaro.org> As already mentioned in https://www.sourceware.org/ml/libc-alpha/2015-07/msg00455.html, the testcase is now passing on s390-32. Can you change this printf in case of a failure, too: On 07/16/2015 01:46 PM, Adhemerval Zanella wrote: > 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): Typo. > > -- > > diff --git a/libio/fmemopen.c b/libio/fmemopen.c > index e6e6a49..3ab3e8d 100644 > --- a/libio/fmemopen.c > +++ b/libio/fmemopen.c > @@ -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); > } > > > diff --git a/stdio-common/tst-fmemopen2.c b/stdio-common/tst-fmemopen2.c > index 16dd3ad..ecd7824 100644 > --- a/stdio-common/tst-fmemopen2.c > +++ b/stdio-common/tst-fmemopen2.c > @@ -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; > } > diff --git a/stdio-common/tst-fmemopen2.c b/stdio-common/tst-fmemopen2.c index 16dd3ad..7e30241 100644 --- a/stdio-common/tst-fmemopen2.c +++ b/stdio-common/tst-fmemopen2.c @@ -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; }