From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 89E785A005B for ; Thu, 06 Jun 2024 12:10:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1717668601; bh=rkb/u4VJ6AE418yRpTT7jw11FUWrMfGP8VwpOv/ajWA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ocgaU9TCkt8Y9haAP4+aSRWP94DneKUYLo4dS/O91ImPe6XkvTidM3wGn2fVgki3w YGEKUlv25rsh/u1gvV+GACanKQiGzgb9OHgHHoLVcuHZ+3H8sjGqw7MFtcccFFamEJ +JIzeWLS3iOTIgI0ls4rM9tOXGKwUWg9GcWoTRp4FivnZmnwBrjQpVUs9BeHGjC0s6 Gi9F3fRWHemENv9tW5E40wc03syIz+BXF50B3kwSu3CMUViCQkiDIjjhlTd2nh9hDq GIIGd8MoRGNn5wucsraTV9c/qKO6iO2cSM2+xDlxL19otMRKffrSr2yYlwkp0U8oqe mtZG6r+cODQzw== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4Vw0ST4q3Jz4x2M; Thu, 6 Jun 2024 20:10:01 +1000 (AEST) From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH 8/9] lineread: Use ssize_t for line lengths Date: Thu, 6 Jun 2024 20:09:48 +1000 Message-ID: <20240606100949.1250958-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240606100949.1250958-1-david@gibson.dropbear.id.au> References: <20240606100949.1250958-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: L7JH7LSMC6K7RWRA6KGNZQAZMGS5YO27 X-Message-ID-Hash: L7JH7LSMC6K7RWRA6KGNZQAZMGS5YO27 X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Functions and structures in lineread.c use plain int to record and report the length of lines we receive. This means we truncate the result from read(2) in some circumstances. Use ssize_t to avoid that. Signed-off-by: David Gibson --- conf.c | 2 +- lineread.c | 10 ++++------ lineread.h | 7 ++++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/conf.c b/conf.c index fdeb9db7..3998bfaa 100644 --- a/conf.c +++ b/conf.c @@ -401,9 +401,9 @@ static void get_dns(struct ctx *c) struct fqdn *s = c->dns_search; struct lineread resolvconf; unsigned int added = 0; + ssize_t line_len; char *line, *end; const char *p; - int line_len; dns4_set = !c->ifi4 || !IN4_IS_ADDR_UNSPECIFIED(dns4); dns6_set = !c->ifi6 || !IN6_IS_ADDR_UNSPECIFIED(dns6); diff --git a/lineread.c b/lineread.c index d631da44..0387f4a0 100644 --- a/lineread.c +++ b/lineread.c @@ -39,13 +39,11 @@ void lineread_init(struct lineread *lr, int fd) * * Return: length of line in bytes, -1 if no line was found */ -static int peek_line(struct lineread *lr, bool eof) +static ssize_t peek_line(struct lineread *lr, bool eof) { char *nl; /* Sanity checks (which also document invariants) */ - ASSERT(lr->count >= 0); - ASSERT(lr->next_line >= 0); ASSERT(lr->next_line + lr->count >= lr->next_line); ASSERT(lr->next_line + lr->count <= LINEREAD_BUFFER_SIZE); @@ -74,13 +72,13 @@ static int peek_line(struct lineread *lr, bool eof) * * Return: Length of line read on success, 0 on EOF, negative on error */ -int lineread_get(struct lineread *lr, char **line) +ssize_t lineread_get(struct lineread *lr, char **line) { bool eof = false; - int line_len; + ssize_t line_len; while ((line_len = peek_line(lr, eof)) < 0) { - int rc; + ssize_t rc; if ((lr->next_line + lr->count) == LINEREAD_BUFFER_SIZE) { /* No space at end */ diff --git a/lineread.h b/lineread.h index af864186..9203e280 100644 --- a/lineread.h +++ b/lineread.h @@ -18,14 +18,15 @@ * @buf: Buffer storing data read from file. */ struct lineread { - int fd; int next_line; - int count; + int fd; + ssize_t next_line; + ssize_t count; /* One extra byte for possible trailing \0 */ char buf[LINEREAD_BUFFER_SIZE+1]; }; void lineread_init(struct lineread *lr, int fd); -int lineread_get(struct lineread *lr, char **line); +ssize_t lineread_get(struct lineread *lr, char **line); #endif /* _LINEREAD_H */ -- 2.45.2