From patchwork Mon Apr 13 12:28:34 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 6179 Received: (qmail 20619 invoked by alias); 13 Apr 2015 12:29:07 -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 20582 invoked by uid 89); 13 Apr 2015 12:29:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-lb0-f181.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=RKKsJG5T2y3e0w1FSoV8bouRAn2p2NruTWA5A49GJIo=; b=lpeNE6r6UwA4xIfP2K72EGCoOQ0XCC7MRIHRelJF7cScz9M56yDY0u5SRVzd6NI96t hAmc1niFm39Z2po9TR+pc7U4qX801BwLTw/ppCRMT04pqD+56SfukilmKwqZeIjZvexa 4vARKvRHzdmUHchjixNY+qivpMyfHK0IgD6vwqjYcVcw7cLcikiCjLGQi+lKRU6w5cIs 0waDlxqWnPQ777CQO2QhEn9dPi5p5jXj4bFtaL01b9Gf2Lsi78U3Skynx/lOjxbm+2VD GZyqxLSkaga88ykqD9XnuLHS40F5zPAgpGAtxvistXR5rt9/VfXz3QEEXyMYcLSbN2+p ymZA== X-Gm-Message-State: ALoCoQlakPmw4yiVN6E4W15shaA1YokO7LT/1FuqeYtZvWqwPBWRo9tIvcy95RhngdY9CWZuJqkl X-Received: by 10.152.36.2 with SMTP id m2mr12933618laj.72.1428928143259; Mon, 13 Apr 2015 05:29:03 -0700 (PDT) From: Rasmus Villemoes To: libc-alpha@sourceware.org Cc: Jeff King , Rasmus Villemoes Subject: [RFC/PoC 1/4] getdelim: Compute result separately Date: Mon, 13 Apr 2015 14:28:34 +0200 Message-Id: <1428928117-8643-2-git-send-email-rv@rasmusvillemoes.dk> In-Reply-To: <1428928117-8643-1-git-send-email-rv@rasmusvillemoes.dk> References: <1428928117-8643-1-git-send-email-rv@rasmusvillemoes.dk> In preparation for introducing getdelim_append (which will essentially change cur_len from a local variable to an input/output parameter), compute result separately from cur_len. Signed-off-by: Rasmus Villemoes --- libio/iogetdelim.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libio/iogetdelim.c b/libio/iogetdelim.c index ac93044..6606c4b 100644 --- a/libio/iogetdelim.c +++ b/libio/iogetdelim.c @@ -43,7 +43,7 @@ _IO_getdelim (lineptr, n, delimiter, fp) int delimiter; _IO_FILE *fp; { - _IO_ssize_t result; + _IO_ssize_t result = 0; _IO_ssize_t cur_len = 0; _IO_ssize_t len; @@ -89,7 +89,8 @@ _IO_getdelim (lineptr, n, delimiter, fp) t = (char *) memchr ((void *) fp->_IO_read_ptr, delimiter, len); if (t != NULL) len = (t - fp->_IO_read_ptr) + 1; - if (__glibc_unlikely (len >= SSIZE_MAX - cur_len)) + if (__glibc_unlikely (len >= SSIZE_MAX - cur_len) || + __glibc_unlikely (len >= SSIZE_MAX - result)) { __set_errno (EOVERFLOW); result = -1; @@ -115,12 +116,12 @@ _IO_getdelim (lineptr, n, delimiter, fp) memcpy (*lineptr + cur_len, (void *) fp->_IO_read_ptr, len); fp->_IO_read_ptr += len; cur_len += len; + result += len; if (t != NULL || __underflow (fp) == EOF) break; len = fp->_IO_read_end - fp->_IO_read_ptr; } (*lineptr)[cur_len] = '\0'; - result = cur_len; unlock_return: _IO_release_lock (fp);