From patchwork Tue Jan 28 08:28:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952234 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3164F1DED6B for ; Tue, 28 Jan 2025 08:28:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052899; cv=none; b=PXg62A7FjdIWfjroWnZDS+7I0zTvbgAZew9XZ9Ji4QBkxTCuykUihD6AJvYKbNIUCzPx6sy/do2wAQ8JlsRfWhbQiouceReotr8JPApTi0dxwl2P9vHjQp+SsMqnLu+ikE8U9j5KL/hWKtqZugC0Pb2EpNrd4S+O6NaHCPBIu40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052899; c=relaxed/simple; bh=iOcbrhtMCsYUpXax7MvMzB7OUlu1X3LlpotWpleIkyw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vjjj1IcRSy3klSJ2txNa4py7DqjCEX0acoVwpJdzk1LmbYZUo2y7Tw1RlcrEZ8lf9fSHem0kYuu3dSUZz73LIFD3TFLtC0RuqDE30g5NebiENaFAoqGz3t77Diy5hDb5lthGu0QnIGTtoDaM0+pJxy8eTYDlUOVv/S5AKoU98LI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=Os8vuqmJ; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=jW06qG4w; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="Os8vuqmJ"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="jW06qG4w" Received: from phl-compute-05.internal (phl-compute-05.phl.internal [10.202.2.45]) by mailfout.stl.internal (Postfix) with ESMTP id 280E011401C5; Tue, 28 Jan 2025 03:28:16 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-05.internal (MEProxy); Tue, 28 Jan 2025 03:28:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052896; x=1738139296; bh=EKGJ7c9z7q80SUP1l/YoC2p2AyxMFGeXAJ1WXAFS/oY=; b= Os8vuqmJDEy2pYrh+v+nsFouNO4rkUSXqRrqjg62zUE3V3AUK/yQnc7CauOhUFUu l2Q0S1gBRhjOf9/wEGt+235l46IXbKIp6N4VmWcHUcuHznyo6MhREd3lOa8BKlqA Ol5EJ4b7m66KU95ZF8IXaHSOT+Cnj77RhE0jZ295xS2prvVib0VtsYHlR/FaEGNz 2x6Mb3bAnJQIq3PHYkW9Sa4SCSCTW2pMBmr3vIsY/KFNCvYZfTQ2GIG1bsSMDVbj F5k8esClQt7xZnSSIw3onYuVjoRChdXiuE0L8DfkqQQzXaf7ux6dLNka7bVBEiHT xC//K3/fHx+IOd9oyZ5ExQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052896; x= 1738139296; bh=EKGJ7c9z7q80SUP1l/YoC2p2AyxMFGeXAJ1WXAFS/oY=; b=j W06qG4wKCrfTbTwWJlwzal9uBthrKsYzpsCAJn3dC2sfDx3zb/AhUenA+muSc35H hk/5VTSLtRxfE5cbMMFXUqMX6pAFaUiDUKOT4xTnoxYmbiH7thcMLZ1xT0XPgun9 sssT2p6L7RD8jWsk2BVBsrJtKMGal44gd4ZbicZdboUChKNbMAw89T3POZnuxDET /nQtPIpzBSTbUvhqEOH4nEKl9R0NDLz8H1gxXF/mT+sFKS0BNkuoxoebrUsBRV9r ETMiqW1kYN6LRbGfuW5NcIztE159Ff4UIJ8ogxzNIOppvn+2RxOYVyfLRnOj+tA3 NY3qYYpHWu5KK6cx+sCIw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepvghthhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhm pdhrtghpthhtohepghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:15 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id f5330dcb (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:13 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:02 +0100 Subject: [PATCH v2 01/20] reftable/stack: stop using `read_in_full()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-1-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 There is a single callsite of `read_in_full()` in the reftable library. Open-code the function to reduce our dependency on the Git library. Note that we only partially port over the logic from `read_in_full()` and its underlying `xread()` helper. Most importantly, the latter also knows to handle `EWOULDBLOCK` via `handle_nonblock()`. This logic is irrelevant for us though because the reftable library never sets the `O_NONBLOCK` option in the first place. Signed-off-by: Patrick Steinhardt --- reftable/stack.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/reftable/stack.c b/reftable/stack.c index f7c1845e15..9490366795 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -115,13 +115,16 @@ int reftable_new_stack(struct reftable_stack **dest, const char *dir, static int fd_read_lines(int fd, char ***namesp) { - off_t size = lseek(fd, 0, SEEK_END); char *buf = NULL; int err = 0; + off_t size; + + size = lseek(fd, 0, SEEK_END); if (size < 0) { err = REFTABLE_IO_ERROR; goto done; } + err = lseek(fd, 0, SEEK_SET); if (err < 0) { err = REFTABLE_IO_ERROR; @@ -134,9 +137,16 @@ static int fd_read_lines(int fd, char ***namesp) goto done; } - if (read_in_full(fd, buf, size) != size) { - err = REFTABLE_IO_ERROR; - goto done; + for (size_t total_read = 0; total_read < (size_t) size; ) { + ssize_t bytes_read = read(fd, buf + total_read, size - total_read); + if (bytes_read < 0 && (errno == EAGAIN || errno == EINTR)) + continue; + if (bytes_read < 0 || !bytes_read) { + err = REFTABLE_IO_ERROR; + goto done; + } + + total_read += bytes_read; } buf[size] = 0; From patchwork Tue Jan 28 08:28:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952235 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 546E91DEFE4 for ; Tue, 28 Jan 2025 08:28:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052900; cv=none; b=ZcK0MAa2lUzGr/MxpA99MCtgZpEeQcQq/H0pPkRHXFJVkzYzSf2KYrrIST/UwA2BWtrNa2HG3t8mMszihqQAPgsRorNkDiNnL+YmoSaqaq6lxeAhXOSB0S/UUh5UgHUiS+Jfp8SKmV8S87pnEDnHuTW5/HEzV9Q0c60gzpXIQeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052900; c=relaxed/simple; bh=ZQ2XEXDcUn70nxnghchKgY/1/IPyW0wJW4m9KlBlwVY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dV/6BWygXpgxK7Wmg7oAybf+sWxOr0ebClCu29p/WhjL7Q48jCIYO5LN5snaQpxLqDJn3FALTSV+fs1afsJ5MPcpPy4t2lsGlyW+lDpe2e4rk2DAPaKprL+CSDOv5tJW527bMC6zVeqBTl3U/a26p7pq+LVYBiN4i8ONtV38Ufg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=V3XhkV8t; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=ton8C1nZ; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="V3XhkV8t"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="ton8C1nZ" Received: from phl-compute-06.internal (phl-compute-06.phl.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id 258A3254024A; Tue, 28 Jan 2025 03:28:17 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Tue, 28 Jan 2025 03:28:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052896; x=1738139296; bh=OAfz3VQFjKoHw7bRx0dztIrW4fPn64Mv0AWtbw4sj0g=; b= V3XhkV8tMXOV8ZnLYMG8fpyFZ8RHPd450InpvywfBN7oQPgpP1a5l9tY+xMoX0GI i+op3TjoNHEGPczSG61IhE9bOanvsRyhxZHkVWSfa7oPiuJHJg6e2PWvrQy2Roqa eIA0OrSwkLt4bd4ANaalaB6RN0015QpJk8WTQr1B5P2K8xXa2y3SMC/jVUeocI5U vMl7lzxCeQ09wFyqHlFT6y8CMoWP7Boa2O0PgAU0gReY94OvIMwl3ASLNNBX27y0 yoRWPbP//2iv0EgM4WKYXvEC7ahFjX/L8GlqEYT/QPMsOjDzkP/26L3mnUMLiPvw dt6qQ/eDlSIUxN6vNkkw/Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052896; x= 1738139296; bh=OAfz3VQFjKoHw7bRx0dztIrW4fPn64Mv0AWtbw4sj0g=; b=t on8C1nZSghOK+6NeJBU88DZ1+Yf6Ls7m2+WxGZ+Ako9c7VpTljrbx4J1qPcftwua VmwYkpx4nM6n5l4ERrGwWkv6HlWVXqV4GdyhX3RKqE6kJhT7dVTZG1SyiWQgff5S g9Nf6pFBojbBIdOzuG2+cpO66G/UoVgfCR/DiMdre55qTIr+U2kize+uYvOFAlAw HeyxW8V6iwtexpnovpFfLlWkc4KexakQsMtHmLtnPYFC3N4nck90lXXGMquUVr1R EdRrUEvVfzM/cHJSDMl1C95oy0ZFreA+K6Y79hKCGURQ7+tco+9ktWUHI42Q41g+ Fi+YyxCNfaTu8rCjptcoA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepjhhlthhosghlvghrsehgmhgrihhlrdgtohhmpdhrtghpthhtohep ghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:15 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 713607e7 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:14 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:03 +0100 Subject: [PATCH v2 02/20] reftable/stack: stop using `write_in_full()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-2-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Similar to the preceding commit, drop our use of `write_in_full()` and implement a new wrapper `reftable_write_full()` that handles this logic for us. This is done to reduce our dependency on the Git library. Signed-off-by: Patrick Steinhardt --- reftable/stack.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/reftable/stack.c b/reftable/stack.c index 9490366795..5f155b344b 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -48,6 +48,25 @@ static int stack_fsync(const struct reftable_write_options *opts, int fd) return fsync(fd); } +static ssize_t reftable_write_data(int fd, const void *data, size_t size) +{ + size_t total_written = 0; + const char *p = data; + + while (total_written < size) { + ssize_t bytes_written = write(fd, p, size - total_written); + if (bytes_written < 0 && (errno == EAGAIN || errno == EINTR)) + continue; + if (bytes_written < 0) + return REFTABLE_IO_ERROR; + + total_written += bytes_written; + p += bytes_written; + } + + return total_written; +} + struct fd_writer { const struct reftable_write_options *opts; int fd; @@ -56,7 +75,7 @@ struct fd_writer { static ssize_t fd_writer_write(void *arg, const void *data, size_t sz) { struct fd_writer *writer = arg; - return write_in_full(writer->fd, data, sz); + return reftable_write_data(writer->fd, data, sz); } static int fd_writer_flush(void *arg) @@ -784,7 +803,8 @@ int reftable_addition_commit(struct reftable_addition *add) goto done; } - err = write_in_full(add->tables_list_lock.fd, table_list.buf, table_list.len); + err = reftable_write_data(add->tables_list_lock.fd, + table_list.buf, table_list.len); reftable_buf_release(&table_list); if (err < 0) { err = REFTABLE_IO_ERROR; @@ -1468,8 +1488,8 @@ static int stack_compact_range(struct reftable_stack *st, goto done; } - err = write_in_full(tables_list_lock.fd, - tables_list_buf.buf, tables_list_buf.len); + err = reftable_write_data(tables_list_lock.fd, + tables_list_buf.buf, tables_list_buf.len); if (err < 0) { err = REFTABLE_IO_ERROR; unlink(new_table_path.buf); From patchwork Tue Jan 28 08:28:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952237 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D28661DEFDD for ; Tue, 28 Jan 2025 08:28:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052901; cv=none; b=knCz8w3759yo3Vs1mV2z0h69S3lkCILFID5vV9bHoPSD9vB/G0Q3nVPFSCGBEp9fPaiejt8jyvaTW2O/9M21AhYu/XolLCtR3YUBiOpzKjAqAb5XtfhtQO+FGOnrvKPOCQEPWjSbAwQigJQfB/DLCKG55hP51ZCPpFHYGS5Ayh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052901; c=relaxed/simple; bh=PmJRt6fXmGoAwu59QosLn0Idv1b0404jbmWLyYpzdS8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=E9rjInCiWj/hze45XL3AF4O5NXgACPpMfw1dm5/ymbGbNhiNOzBxIRZoto/nFchv3d8XZgKmXz+fB8CuluEnwP81Iq5uAww8jbbAUQ7LD5FgPsS3WWYX0DrWue9jNVkg1EtsZEcfJeSzQFV1LiG4i1sp3CCG+p/HOBNCDap7RpM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=bF0Anvl1; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=GVeJOWPS; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="bF0Anvl1"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="GVeJOWPS" Received: from phl-compute-05.internal (phl-compute-05.phl.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id C41E52540246; Tue, 28 Jan 2025 03:28:18 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Tue, 28 Jan 2025 03:28:18 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052898; x=1738139298; bh=PKAhJl6MulJ8BREkwp1+4UxGCBsYnhbC1wjnWaXA8NQ=; b= bF0Anvl19vL/U2CTLxxTO2lILTje6hHJCvLJcH0ed6vwoGeDA1iRTt/BfIIcvbS8 q+pwjkKaZmL+ufdwNZef/hIzPcAq1WkrDYtGV0wFoeKMoj+uNUNYcO2ALKZVGIX1 LiCfS04tiw6R6EAFXSJRGGOzStTK4r5UAbGkWw2pVjW7a/mCasC834piOsQm0CHj fyHV+sf7JaeTmhGbLNVQBwUEMZTj3S2CVMZs6J3anicfWJ+yeY6/SBXzJnEqtXJV gW8XfVsxr0b3UbnUZ1COaXbwgx3whvOGY/fM6/ih4zBkJJxyCNP0wkVjKB5Zw9NX 4b8TF3XIS0JcvGrAD9dTMA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052898; x= 1738139298; bh=PKAhJl6MulJ8BREkwp1+4UxGCBsYnhbC1wjnWaXA8NQ=; b=G VeJOWPSpfgQrutbhwOt/Glb8i9Zfj1CvjBmAAFWgcc+bofuEV9A70RJ+Bfs4pVDl DhC/PbXoWEqKsR1MDfpvDKxSaj/GWzofI4bzSjLLzvrO/FEjSnqyzfliVCopsXFY DYhAoaoPACl/Db6LMAx38KfSaqXNVc6B0j4rgIUsgNOlQTotEBRKMqEx270vFZn5 GrEJbnk/3dCz0/x7bAPJu9fM0SPXEqEM4DjjUykyhps7LV14COaDscmlP1yFGanb RaNoECDR336+pIRmBwcxGfGIPODUjEEKs4SkO9VxxEXXvXAIdm1T0vS1FQrGWX4t 3iNT/N+FBZAx5HzA5DM4A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepvghthhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhm pdhrtghpthhtohepghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:17 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 2cc85466 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:15 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:04 +0100 Subject: [PATCH v2 03/20] reftable/blocksource: stop using `xmmap()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-3-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 We use `xmmap()` to map reftables into memory. This function has two problems: - It causes us to die in case the mmap fails. - It ties us to the Git codebase. Refactor the code to use mmap(3p) instead with manual error checking. Note that this function may not be the system-provided mmap(3p), but may point to our `git_mmap()` wrapper that emulates the syscall on systems that do not have mmap(3p) available. Fix `reftable_block_source_from_file()` to properly bubble up the error code in case the map(3p) call fails. Signed-off-by: Patrick Steinhardt --- reftable/blocksource.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/reftable/blocksource.c b/reftable/blocksource.c index bba4a45b98..02972c46f4 100644 --- a/reftable/blocksource.c +++ b/reftable/blocksource.c @@ -98,7 +98,7 @@ static struct reftable_block_source_vtable file_vtable = { int reftable_block_source_from_file(struct reftable_block_source *bs, const char *name) { - struct file_block_source *p; + struct file_block_source *p = NULL; struct stat st; int fd, err; @@ -122,7 +122,12 @@ int reftable_block_source_from_file(struct reftable_block_source *bs, } p->size = st.st_size; - p->data = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + p->data = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (p->data == MAP_FAILED) { + err = REFTABLE_IO_ERROR; + p->data = NULL; + goto out; + } assert(!bs->ops); bs->ops = &file_vtable; @@ -135,5 +140,5 @@ int reftable_block_source_from_file(struct reftable_block_source *bs, close(fd); if (err < 0) reftable_free(p); - return 0; + return err; } From patchwork Tue Jan 28 08:28:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952236 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B32CF1DFD9C for ; Tue, 28 Jan 2025 08:28:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052901; cv=none; b=qjlXr9Kc57LBPM8SIApT21MukdNL9Z3XcYdbE/jsxsf1Mj96quY06e+vol6Y0zlYSPTwZPjWKwJJ5Pf9Y3DXZ5DYckO0U89uigT+/ISVfh7/B8+BSdEE+xWrMwq5IR1SpiJ9yJudHQu4CLUfXXGtiQldBULGb9ZtiwwvHcoN294= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052901; c=relaxed/simple; bh=isW44sI+hPQmmM/id5qyNHnGUjfiKjltOXrxxnn+FhA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lel4cxkTGu7KFsKVTVZfUNFj13FaX10UKD4DWbx8cM3wt5DCbeLZotPqYpThuxvkr47heUv0UFtYsFrjwh/sCd9qbYYpeLTp+c0auXcd9IGN2vSK0eWUTedUJW8QMj0aH2Vw/UtZfbz128x8hTbWa9tRZeTKRDQqyU/xW2sUGRs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=O88wPDR4; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Ja6rxpAu; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="O88wPDR4"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Ja6rxpAu" Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43]) by mailfout.stl.internal (Postfix) with ESMTP id BD4641140149; Tue, 28 Jan 2025 03:28:18 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-03.internal (MEProxy); Tue, 28 Jan 2025 03:28:18 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052898; x=1738139298; bh=OX7TtIP6uvImCavOgAuwk2ZK66HkAEPH4PAUW1rGZn8=; b= O88wPDR42EOe8k2FiuO3O4m9TaGaD5Rp4Sqnn2XCOcKl+5nZg+uzIORvoV5Dy8e2 56kQD5n+I+naMopG7M6NfDOEzV2PXNZzRP/gr+utQSRccXCjRUOLUaCDtfdK7D2b 5FX7iU4fgqW4SsTbd0ZXLZfM6XsSo8qq3jLHgl4zMAZZKJwJXotW/v0OHKh9i+X7 yjzd2ETAtMOvSX+DgmPsq4Jj4341onA03xTPttliyr+IrmxQIFwnPS0kTgv3zyCx RsDPvRohaF0iSxGF4FsVsrLwKP5VeGi/jnI8tRrtvciG5j7f2iNZaqdzToCG9U4t tTuW2eP9SoxmLM8TxvKp9Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052898; x= 1738139298; bh=OX7TtIP6uvImCavOgAuwk2ZK66HkAEPH4PAUW1rGZn8=; b=J a6rxpAuSL9g5L4M9JJEsNDhr59PW/F0TihAFX/rEp5htVO0TSHJj2KGlHapkNHyE QQMmmDjWcgCsw7+zQYi1hhNRDk0ScCzkkE+UdXsFEfBDBarQ3ZFbC8fvOZgYn3ik N9F47YbPFcG0fW+KOqQ+AXS25hDA6yvmGx/X7mZwn7kMBhBjU+cWesN4KhvSYnh8 4XxK/ysOAIHJNcgKSHyJ1Y2Emv+9CfOCIlw7QOZRJOdE+7fQpJ2yPjhwC2Huc0t3 ipZPdMQaynpUv+68ss39Hnji2QeTbPO8eZ62FUqHRjaoZPuYiXhCggIP057cL7zC MXYbo30bKwjXmLeRe8scA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepvghthhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhm pdhrtghpthhtohepghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:17 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id e502448b (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:16 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:05 +0100 Subject: [PATCH v2 04/20] reftable/record: stop using `COPY_ARRAY()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-4-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Drop our use of `COPY_ARRAY()`, replacing it with an open-coded variant thereof. This is done to reduce our dependency on the Git library. Signed-off-by: Patrick Steinhardt --- reftable/record.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reftable/record.c b/reftable/record.c index 8919df8a4d..d1664c47ca 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -508,7 +508,8 @@ static int reftable_obj_record_copy_from(void *rec, const void *src_rec, if (!obj->offsets) return REFTABLE_OUT_OF_MEMORY_ERROR; obj->offset_len = src->offset_len; - COPY_ARRAY(obj->offsets, src->offsets, src->offset_len); + if (src->offset_len) + memcpy(obj->offsets, src->offsets, sizeof(*src->offsets) * src->offset_len); return 0; } From patchwork Tue Jan 28 08:28:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952238 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43EB51DFE36 for ; Tue, 28 Jan 2025 08:28:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052903; cv=none; b=JWnzEwB/uTP/D8ckFtcresSVmKP3XYVcsnCZCDHaddSwBHpTdVQGxjBIU6EbvcwiGOyxgxD0WfghaNKDSzUaw5DGuUwwBYS0TBoksq2NMiyC5lPLFGtnl0iHyiYfT1vlqgVvVIVga+ypihecR90kILJIUzagnNjDzclA9BaqIz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052903; c=relaxed/simple; bh=ihLF34Kh3KEFnHLYIyJ4ZIKsd32TWzp4NSq8yVDamWU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U/piNn1gr5vpoCzvb3dCvPVVp3qcI62JWnuq7oEiYQe8rKcs0ivaBSfCvhcGPrtrkblBNcKllhpO/zyoyx7mJoz5ybE3QSDWfSVkL7QlFc90bSWGIGmzYZJ+1sCfsjERIopyqopsk03GzkBKNMnTSyoHBfRFHPuyfJnvDNUlYEQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=RJErwZML; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=z2O+2GlG; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="RJErwZML"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="z2O+2GlG" Received: from phl-compute-10.internal (phl-compute-10.phl.internal [10.202.2.50]) by mailfhigh.stl.internal (Postfix) with ESMTP id 56FE3254024F; Tue, 28 Jan 2025 03:28:20 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-10.internal (MEProxy); Tue, 28 Jan 2025 03:28:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052900; x=1738139300; bh=b+Euunc3x+y+OvvlvQau2yVS5rSSELXS6sZ42aQZK0g=; b= RJErwZMLcf97pkbf/3BluGICPMNqajC+JAB6qDyTOfOEBL8yJCpwFoTSDryXPQhp jSZl3p/ICPjoeLC44VLH9XG6lVkd5ZO01/27q0o4YUrLo0u9FsXRfLq466Iw/Q8r 3R9TUcA5AtxLFu9ii7YiH06AT5GsF/nLTPXRuQTJh+RT+qFYIOCfHDq5WgR9F6HK QXuEFhjYYuxBnhFVQY8jOd1pTV7PlBY3EL83/jpfKirKEKBWeyEAyjYZTn3RPPcp xOvqpLmPRA2caxjf989n4MJ2W/vR7zfUdICIptcfbD3ryVugKdcQf4K0DsLEajji NJERbkQKYeIeGWXa7uWlFA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052900; x= 1738139300; bh=b+Euunc3x+y+OvvlvQau2yVS5rSSELXS6sZ42aQZK0g=; b=z 2O+2GlGxNWSO2B8xpXvMX/lrFW7f6Fcem4+Xp5Btq1vPjmrskOBO92NL82krOrGm LelaJMrQOf2LEXO84gjgniivDkdBGo+TIzmMEPpa+cGT4BWy5AnJE82yTPgrJZkZ ENRtuVPtIjVa576biqjL++yrGw3uaWClOYmx/hJKZ48LH2Eo8tl6TmoagXoZ/6I7 hxx4pGSffzXRpIUg9WDgbFFOlyAXUi0QYC8Zoxt0F1P0VGrY0BPY5ZZbxgHR1xMl qR7ZI1B58qLoJ9cksFz5lI5WWPYKolD/KBzWkiFXmH0hq81yfNiDzHTUq79ZuEWP 6ZWSl5clgctCG+shAn7Tw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopehj lhhtohgslhgvrhesghhmrghilhdrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:19 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id ff933276 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:17 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:06 +0100 Subject: [PATCH v2 05/20] reftable/record: stop using `BUG()` in `reftable_record_init()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-5-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 We're aborting the program via `BUG()` in case `reftable_record_init()` was invoked with an unknown record type. This is bad because we may now die in library code, and because it makes us depend on the Git codebase. Refactor the code such that `reftable_record_init()` can return an error code to the caller. Adapt any callers accordingly. Signed-off-by: Patrick Steinhardt --- reftable/block.c | 4 +++- reftable/merged.c | 5 ++++- reftable/reader.c | 5 ++++- reftable/record.c | 8 ++++---- reftable/record.h | 4 ++-- t/unit-tests/t-reftable-pq.c | 6 +++--- t/unit-tests/t-reftable-record.c | 2 +- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/reftable/block.c b/reftable/block.c index 8ac865ce78..255d566854 100644 --- a/reftable/block.c +++ b/reftable/block.c @@ -509,7 +509,9 @@ int block_iter_seek_key(struct block_iter *it, const struct block_reader *br, it->block_len = br->block_len; it->hash_size = br->hash_size; - reftable_record_init(&rec, block_reader_type(br)); + err = reftable_record_init(&rec, block_reader_type(br)); + if (err < 0) + goto done; /* * We're looking for the last entry less than the wanted key so that diff --git a/reftable/merged.c b/reftable/merged.c index e72b39e178..4156eec07f 100644 --- a/reftable/merged.c +++ b/reftable/merged.c @@ -253,7 +253,10 @@ int merged_table_init_iter(struct reftable_merged_table *mt, } for (size_t i = 0; i < mt->readers_len; i++) { - reftable_record_init(&subiters[i].rec, typ); + ret = reftable_record_init(&subiters[i].rec, typ); + if (ret < 0) + goto out; + ret = reader_init_iter(mt->readers[i], &subiters[i].iter, typ); if (ret < 0) goto out; diff --git a/reftable/reader.c b/reftable/reader.c index 3f2e4b2800..de6e6dd932 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -360,7 +360,10 @@ static int table_iter_seek_linear(struct table_iter *ti, struct reftable_record rec; int err; - reftable_record_init(&rec, reftable_record_type(want)); + err = reftable_record_init(&rec, reftable_record_type(want)); + if (err < 0) + goto done; + err = reftable_record_key(want, &want_key); if (err < 0) goto done; diff --git a/reftable/record.c b/reftable/record.c index d1664c47ca..31985bb977 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -1301,7 +1301,7 @@ reftable_record_vtable(struct reftable_record *rec) abort(); } -void reftable_record_init(struct reftable_record *rec, uint8_t typ) +int reftable_record_init(struct reftable_record *rec, uint8_t typ) { memset(rec, 0, sizeof(*rec)); rec->type = typ; @@ -1310,11 +1310,11 @@ void reftable_record_init(struct reftable_record *rec, uint8_t typ) case BLOCK_TYPE_REF: case BLOCK_TYPE_LOG: case BLOCK_TYPE_OBJ: - return; + return 0; case BLOCK_TYPE_INDEX: reftable_buf_init(&rec->u.idx.last_key); - return; + return 0; default: - BUG("unhandled record type"); + return REFTABLE_API_ERROR; } } diff --git a/reftable/record.h b/reftable/record.h index c7755a4d75..e1846c294b 100644 --- a/reftable/record.h +++ b/reftable/record.h @@ -130,8 +130,8 @@ struct reftable_record { } u; }; -/* Initialize the reftable record for the given type */ -void reftable_record_init(struct reftable_record *rec, uint8_t typ); +/* Initialize the reftable record for the given type. */ +int reftable_record_init(struct reftable_record *rec, uint8_t typ); /* see struct record_vtable */ int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b); diff --git a/t/unit-tests/t-reftable-pq.c b/t/unit-tests/t-reftable-pq.c index f3f8a0cdf3..d8a4c283a1 100644 --- a/t/unit-tests/t-reftable-pq.c +++ b/t/unit-tests/t-reftable-pq.c @@ -32,7 +32,7 @@ static void t_pq_record(void) char *last = NULL; for (i = 0; i < N; i++) { - reftable_record_init(&recs[i], BLOCK_TYPE_REF); + check(!reftable_record_init(&recs[i], BLOCK_TYPE_REF)); recs[i].u.ref.refname = xstrfmt("%02"PRIuMAX, (uintmax_t)i); } @@ -72,7 +72,7 @@ static void t_pq_index(void) size_t N = ARRAY_SIZE(recs), i; for (i = 0; i < N; i++) { - reftable_record_init(&recs[i], BLOCK_TYPE_REF); + check(!reftable_record_init(&recs[i], BLOCK_TYPE_REF)); recs[i].u.ref.refname = (char *) "refs/heads/master"; } @@ -111,7 +111,7 @@ static void t_merged_iter_pqueue_top(void) size_t N = ARRAY_SIZE(recs), i; for (i = 0; i < N; i++) { - reftable_record_init(&recs[i], BLOCK_TYPE_REF); + check(!reftable_record_init(&recs[i], BLOCK_TYPE_REF)); recs[i].u.ref.refname = (char *) "refs/heads/master"; } diff --git a/t/unit-tests/t-reftable-record.c b/t/unit-tests/t-reftable-record.c index d49d2a2729..6540bd20e3 100644 --- a/t/unit-tests/t-reftable-record.c +++ b/t/unit-tests/t-reftable-record.c @@ -17,7 +17,7 @@ static void t_copy(struct reftable_record *rec) uint8_t typ; typ = reftable_record_type(rec); - reftable_record_init(©, typ); + check(!reftable_record_init(©, typ)); reftable_record_copy_from(©, rec, REFTABLE_HASH_SIZE_SHA1); /* do it twice to catch memory leaks */ reftable_record_copy_from(©, rec, REFTABLE_HASH_SIZE_SHA1); From patchwork Tue Jan 28 08:28:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952239 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43E5F1DFE34 for ; Tue, 28 Jan 2025 08:28:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052903; cv=none; b=aFmw6e9+ah4JpRpFaAkzpaj9WMKdpVbARbi+lsOMLs0OF61n2P9CtDp8dMrSRywPqlxbI31Kh5UNxBMDYmFIKSZ2HCXL+urMopRvamQBXpFzHhjIHdbEEZPxTHz3+OI1lGi3JwUkHlIAiO/tWwhkTxUsRkRF3QxbemUAfOZLcN0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052903; c=relaxed/simple; bh=b2z7t5YN1/UPU3YkC+nM8O0ZVN300GUW8fHH4jmXH3E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LQykLNh8ExbtUNBAg3e8zGPeDSaMGV5dcwgSqdot8JOvQL7gc15mVXKHPHJxpNH+JHbLrXkp041L4Ru3dYWo5E15+pxnZCD3hJc62K561XAWFM3kV1wR8/sxMTKm1Y4NXWliRfOECgRE88UMTgjnaAqJnKhmGoFqBPEY9d/YhSc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=cEJ7dpSF; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=gY1Vt9Df; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="cEJ7dpSF"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="gY1Vt9Df" Received: from phl-compute-06.internal (phl-compute-06.phl.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id 558FD254024A; Tue, 28 Jan 2025 03:28:20 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Tue, 28 Jan 2025 03:28:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052900; x=1738139300; bh=uSt5YIJcgTdGx3jc7hmqXzUCWEg9yZNfRszfOh31fSU=; b= cEJ7dpSFMDPXC7w6S9HX3TwVqtfvuHkLgfWWs1xjkexsDn6nBqxWb09a1Tk3qpTe QPSZfRKuggeCUxxDqkvnkN1upxIEayUkO1V0XNxbwLaLbOzBBwJ7aAm+IjXk/H7O ryCVc/VmzGG+58Wd2iXocR6f9dQX8yYM5zAFMIdmdqW5XyIszifsGuzfIVDbxQAE a0jBwdoaVOw0ceqh/oArU+Wp+I3EmJRA9iK2COeqKt33TMcxFViNTsdBy1Y5e1Xx 2lRISrY1eqRa7LMgw2ZiEIYpvjnsIkUgqQBHUvqsK7fUOy7ORHQ9PPXvo5SVa7LC NvqM8xQ1QlYpPMr0h/N79Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052900; x= 1738139300; bh=uSt5YIJcgTdGx3jc7hmqXzUCWEg9yZNfRszfOh31fSU=; b=g Y1Vt9DfmltLo0eSLceL7HTuDjhWqQBCOv00S661t3yNpegu9VJvs0lXzIDpIIckZ Eyh47ZKERKEXDD5j3P9fSy/tTtTDFHo8fi5NbTxKmQeM+ZXSRrMH1UzsAs3fmWdM HontoZ332BP8qyx/6oVYZQc5TSyxNGGu9XXugSPcxvWMH3cE9438Ov8dfxcriQvI zARqzl4ZbL29qAQeGeT9jFKA8GZOO3+DWPJO9SBZMTkl9eeIBkhQX5r12VqZG2gr zvEOFcLHjcFGzFECEqyZUpwEEkQOjEMbquOKIfp8iN5nbLwvcr+uN+9SZCtZinP2 +zHDk/sb+CLXZbZJtNJfA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopegvthhhohhmshhonhesvggufigrrhguthhhoh hmshhonhdrtghomhdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorhhg pdhrtghpthhtohepjhhlthhosghlvghrsehgmhgrihhlrdgtohhmpdhrtghpthhtohepgh hithhsthgvrhesphhosghogidrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:19 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 7b490749 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:18 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:07 +0100 Subject: [PATCH v2 06/20] reftable/record: don't `BUG()` in `reftable_record_cmp()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-6-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 The reftable library aborts with a bug in case `reftable_record_cmp()` is invoked with two records of differing types. This would cause the program to die without the caller being able to handle the error, which is not something we want in the context of library code. And it ties us to the Git codebase. Refactor the code such that `reftable_record_cmp()` returns an error code separate from the actual comparison result. This requires us to also adapt some callers up the callchain in a similar fashion. Signed-off-by: Patrick Steinhardt --- reftable/merged.c | 20 +++++++++++++++----- reftable/pq.c | 36 +++++++++++++++++++++++++++++------- reftable/pq.h | 2 +- reftable/record.c | 10 ++++++---- reftable/record.h | 2 +- t/unit-tests/t-reftable-pq.c | 16 ++++++++++++---- t/unit-tests/t-reftable-record.c | 40 ++++++++++++++++++++++++++++------------ 7 files changed, 92 insertions(+), 34 deletions(-) diff --git a/reftable/merged.c b/reftable/merged.c index 4156eec07f..563864068c 100644 --- a/reftable/merged.c +++ b/reftable/merged.c @@ -66,8 +66,11 @@ static int merged_iter_seek(struct merged_iter *mi, struct reftable_record *want int err; mi->advance_index = -1; - while (!merged_iter_pqueue_is_empty(mi->pq)) - merged_iter_pqueue_remove(&mi->pq); + while (!merged_iter_pqueue_is_empty(mi->pq)) { + err = merged_iter_pqueue_remove(&mi->pq, NULL); + if (err < 0) + return err; + } for (size_t i = 0; i < mi->subiters_len; i++) { err = iterator_seek(&mi->subiters[i].iter, want); @@ -120,7 +123,9 @@ static int merged_iter_next_entry(struct merged_iter *mi, if (empty) return 1; - entry = merged_iter_pqueue_remove(&mi->pq); + err = merged_iter_pqueue_remove(&mi->pq, &entry); + if (err < 0) + return err; /* One can also use reftable as datacenter-local storage, where the ref @@ -134,11 +139,16 @@ static int merged_iter_next_entry(struct merged_iter *mi, struct pq_entry top = merged_iter_pqueue_top(mi->pq); int cmp; - cmp = reftable_record_cmp(top.rec, entry.rec); + err = reftable_record_cmp(top.rec, entry.rec, &cmp); + if (err < 0) + return err; if (cmp > 0) break; - merged_iter_pqueue_remove(&mi->pq); + err = merged_iter_pqueue_remove(&mi->pq, NULL); + if (err < 0) + return err; + err = merged_iter_advance_subiter(mi, top.index); if (err < 0) return err; diff --git a/reftable/pq.c b/reftable/pq.c index 5591e875e1..ef8035cfd9 100644 --- a/reftable/pq.c +++ b/reftable/pq.c @@ -15,13 +15,18 @@ license that can be found in the LICENSE file or at int pq_less(struct pq_entry *a, struct pq_entry *b) { - int cmp = reftable_record_cmp(a->rec, b->rec); + int cmp, err; + + err = reftable_record_cmp(a->rec, b->rec, &cmp); + if (err < 0) + return err; + if (cmp == 0) return a->index > b->index; return cmp < 0; } -struct pq_entry merged_iter_pqueue_remove(struct merged_iter_pqueue *pq) +int merged_iter_pqueue_remove(struct merged_iter_pqueue *pq, struct pq_entry *out) { size_t i = 0; struct pq_entry e = pq->heap[0]; @@ -32,17 +37,34 @@ struct pq_entry merged_iter_pqueue_remove(struct merged_iter_pqueue *pq) size_t min = i; size_t j = 2 * i + 1; size_t k = 2 * i + 2; - if (j < pq->len && pq_less(&pq->heap[j], &pq->heap[i])) - min = j; - if (k < pq->len && pq_less(&pq->heap[k], &pq->heap[min])) - min = k; + int cmp; + + if (j < pq->len) { + cmp = pq_less(&pq->heap[j], &pq->heap[i]); + if (cmp < 0) + return -1; + else if (cmp) + min = j; + } + + if (k < pq->len) { + cmp = pq_less(&pq->heap[k], &pq->heap[min]); + if (cmp < 0) + return -1; + else if (cmp) + min = k; + } + if (min == i) break; SWAP(pq->heap[i], pq->heap[min]); i = min; } - return e; + if (out) + *out = e; + + return 0; } int merged_iter_pqueue_add(struct merged_iter_pqueue *pq, const struct pq_entry *e) diff --git a/reftable/pq.h b/reftable/pq.h index 83c062eeca..ff39016445 100644 --- a/reftable/pq.h +++ b/reftable/pq.h @@ -22,7 +22,7 @@ struct merged_iter_pqueue { size_t cap; }; -struct pq_entry merged_iter_pqueue_remove(struct merged_iter_pqueue *pq); +int merged_iter_pqueue_remove(struct merged_iter_pqueue *pq, struct pq_entry *out); int merged_iter_pqueue_add(struct merged_iter_pqueue *pq, const struct pq_entry *e); void merged_iter_pqueue_release(struct merged_iter_pqueue *pq); int pq_less(struct pq_entry *a, struct pq_entry *b); diff --git a/reftable/record.c b/reftable/record.c index 31985bb977..da550494a2 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -1190,12 +1190,14 @@ int reftable_record_is_deletion(struct reftable_record *rec) reftable_record_data(rec)); } -int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b) +int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b, + int *cmp) { if (a->type != b->type) - BUG("cannot compare reftable records of different type"); - return reftable_record_vtable(a)->cmp( - reftable_record_data(a), reftable_record_data(b)); + return -1; + *cmp = reftable_record_vtable(a)->cmp(reftable_record_data(a), + reftable_record_data(b)); + return 0; } int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size) diff --git a/reftable/record.h b/reftable/record.h index e1846c294b..867810a932 100644 --- a/reftable/record.h +++ b/reftable/record.h @@ -134,7 +134,7 @@ struct reftable_record { int reftable_record_init(struct reftable_record *rec, uint8_t typ); /* see struct record_vtable */ -int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b); +int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b, int *cmp); int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, uint32_t hash_size); int reftable_record_key(struct reftable_record *rec, struct reftable_buf *dest); int reftable_record_copy_from(struct reftable_record *rec, diff --git a/t/unit-tests/t-reftable-pq.c b/t/unit-tests/t-reftable-pq.c index d8a4c283a1..c128fe8616 100644 --- a/t/unit-tests/t-reftable-pq.c +++ b/t/unit-tests/t-reftable-pq.c @@ -21,7 +21,9 @@ static void merged_iter_pqueue_check(const struct merged_iter_pqueue *pq) static int pq_entry_equal(struct pq_entry *a, struct pq_entry *b) { - return !reftable_record_cmp(a->rec, b->rec) && (a->index == b->index); + int cmp; + check(!reftable_record_cmp(a->rec, b->rec, &cmp)); + return !cmp && (a->index == b->index); } static void t_pq_record(void) @@ -49,7 +51,9 @@ static void t_pq_record(void) while (!merged_iter_pqueue_is_empty(pq)) { struct pq_entry top = merged_iter_pqueue_top(pq); - struct pq_entry e = merged_iter_pqueue_remove(&pq); + struct pq_entry e; + + check(!merged_iter_pqueue_remove(&pq, &e)); merged_iter_pqueue_check(&pq); check(pq_entry_equal(&top, &e)); @@ -90,7 +94,9 @@ static void t_pq_index(void) for (i = N - 1; i > 0; i--) { struct pq_entry top = merged_iter_pqueue_top(pq); - struct pq_entry e = merged_iter_pqueue_remove(&pq); + struct pq_entry e; + + check(!merged_iter_pqueue_remove(&pq, &e)); merged_iter_pqueue_check(&pq); check(pq_entry_equal(&top, &e)); @@ -129,7 +135,9 @@ static void t_merged_iter_pqueue_top(void) for (i = N - 1; i > 0; i--) { struct pq_entry top = merged_iter_pqueue_top(pq); - struct pq_entry e = merged_iter_pqueue_remove(&pq); + struct pq_entry e; + + check(!merged_iter_pqueue_remove(&pq, &e)); merged_iter_pqueue_check(&pq); check(pq_entry_equal(&top, &e)); diff --git a/t/unit-tests/t-reftable-record.c b/t/unit-tests/t-reftable-record.c index 6540bd20e3..5954966373 100644 --- a/t/unit-tests/t-reftable-record.c +++ b/t/unit-tests/t-reftable-record.c @@ -100,16 +100,20 @@ static void t_reftable_ref_record_comparison(void) .u.ref.value.symref = (char *) "refs/heads/master", }, }; + int cmp; check(!reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); check(!reftable_record_equal(&in[1], &in[2], REFTABLE_HASH_SIZE_SHA1)); - check_int(reftable_record_cmp(&in[1], &in[2]), >, 0); + check(!reftable_record_cmp(&in[1], &in[2], &cmp)); + check_int(cmp, >, 0); in[1].u.ref.value_type = in[0].u.ref.value_type; check(reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); } static void t_reftable_ref_record_compare_name(void) @@ -209,17 +213,20 @@ static void t_reftable_log_record_comparison(void) .u.log.update_index = 22, }, }; + int cmp; check(!reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); check(!reftable_record_equal(&in[1], &in[2], REFTABLE_HASH_SIZE_SHA1)); - check_int(reftable_record_cmp(&in[1], &in[2]), >, 0); + check(!reftable_record_cmp(&in[1], &in[2], &cmp)); + check_int(cmp, >, 0); /* comparison should be reversed for equal keys, because * comparison is now performed on the basis of update indices */ - check_int(reftable_record_cmp(&in[0], &in[1]), <, 0); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check_int(cmp, <, 0); in[1].u.log.update_index = in[0].u.log.update_index; check(reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); } static void t_reftable_log_record_compare_key(void) @@ -396,16 +403,20 @@ static void t_reftable_obj_record_comparison(void) .u.obj.hash_prefix_len = 5, }, }; + int cmp; check(!reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); check(!reftable_record_equal(&in[1], &in[2], REFTABLE_HASH_SIZE_SHA1)); - check_int(reftable_record_cmp(&in[1], &in[2]), >, 0); + check(!reftable_record_cmp(&in[1], &in[2], &cmp)); + check_int(cmp, >, 0); in[1].u.obj.offset_len = in[0].u.obj.offset_len; check(reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); } static void t_reftable_obj_record_roundtrip(void) @@ -486,19 +497,24 @@ static void t_reftable_index_record_comparison(void) .u.idx.last_key = REFTABLE_BUF_INIT, }, }; + int cmp; + check(!reftable_buf_addstr(&in[0].u.idx.last_key, "refs/heads/master")); check(!reftable_buf_addstr(&in[1].u.idx.last_key, "refs/heads/master")); check(!reftable_buf_addstr(&in[2].u.idx.last_key, "refs/heads/branch")); check(!reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); check(!reftable_record_equal(&in[1], &in[2], REFTABLE_HASH_SIZE_SHA1)); - check_int(reftable_record_cmp(&in[1], &in[2]), >, 0); + check(!reftable_record_cmp(&in[1], &in[2], &cmp)); + check_int(cmp, >, 0); in[1].u.idx.offset = in[0].u.idx.offset; check(reftable_record_equal(&in[0], &in[1], REFTABLE_HASH_SIZE_SHA1)); - check(!reftable_record_cmp(&in[0], &in[1])); + check(!reftable_record_cmp(&in[0], &in[1], &cmp)); + check(!cmp); for (size_t i = 0; i < ARRAY_SIZE(in); i++) reftable_record_release(&in[i]); From patchwork Tue Jan 28 08:28:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952240 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E75B61E0B8A for ; Tue, 28 Jan 2025 08:28:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052904; cv=none; b=S5bHfdF6+LM25uvERuLR/m6qMFrRd77Ag75ePuUWLW6oV9L9fVzOrCp6HoXyk9vXIQbrGqffuZI+W6nD+h8B3JoYmLq/Ysdt2447+rGu/aUlykyLfYXpu/hSDcgwQQ+DOV0TkYhdPbhSTarYpeSt8k0ucUAF/ULcCC4aGfK6w1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052904; c=relaxed/simple; bh=Xj0t7OUm0FAA2j2ZiRD0dBNHYUM+0vpI1xBwvt+7UYE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YQLFGXav9IUP5rqZkJ13Ps+PoBUTJZ+cuRDaNyMM+ke/yETqVg6pozTagdtPZ6RMSIpyFfroS28R0x6I1pGOnt5dl0PGQtKfQEMsjJJV8UMv/DVIDoCx9O0tNm1/l+1Spd2GplLbHEDpQOy900O7gyfltqxyFf4+UrQDnmuu2wU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=q8O9Qv/M; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=WsaddVmk; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="q8O9Qv/M"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="WsaddVmk" Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfout.stl.internal (Postfix) with ESMTP id EA46D1140149; Tue, 28 Jan 2025 03:28:21 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Tue, 28 Jan 2025 03:28:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052901; x=1738139301; bh=Ojg+QT7n1TKpobEbDjVPCkYXS12/+9O7UADZnn1jQ9c=; b= q8O9Qv/MIEpTo2T2NwWvC5mYnn3OQAJTXCCUts5f1r3QVkBw1TDFs3MVDCP7TKQx 5AAo4EVbfIZRhxnOjhrx84ZUijzE6OeKCSTXWNgz3JLVs10VvWfAOwUK2yMH0+sI iOTWgsGQKqM1CA+fQ57VziLOupKXV7XM5TgmULMsZHXe+HhO2D8jMvvecTMLy0k0 QzEpnFq+6LHc67oosukny+YUR0wklQpjWL+uIJDCQ7z6Ikx7M7ov6OMNkzSXOH8C OkF+jOV19CJ0uQBo448x/tFLL5oacLVPEc9uU5uDI9liV7VBpOIM7perZdAhRuyx gohDfEIAW5dhxRquPna6hQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052901; x= 1738139301; bh=Ojg+QT7n1TKpobEbDjVPCkYXS12/+9O7UADZnn1jQ9c=; b=W saddVmkoJ3+LOnzMMgs2lLePZ7FyhIYPj5A21bH8x8i2Pog8JRUARVGlfT4jk+Sm azSe/9mNwYTFAHOp4WeFtaEPl0z5KYXbJ0G1W77ETT3WbHNtXwD4W8aoImVFpQv8 nBpNOImg+y8w9lWRcayR2/GaRqyECaTN5nJ060edIyYv+4mEZUl9zzB2JcZFwGT8 f0f4himfF0UjhBht65X5No0giYuMWBKqqN1RnUytynQoEl/OxkdLXQbMAfmv7lo+ hjAbluLw3blXxcwFUkla/07DRb242Va8aA2UNtKQ1BLspbEJT5I9ZS2LYwWLPpgF TofDvdpXMu7I9n2XPxp0g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehjlhhtohgslhgvrhesghhmrghilhdrtghomh dprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpdhrtghpthhtohepvght hhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhmpdhrtghpthhtohepghhith esvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:20 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id aa416bd3 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:19 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:08 +0100 Subject: [PATCH v2 07/20] reftable: stop using `BUG()` in trivial cases Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-7-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Stop using `BUG()` in the remaining trivial cases that we still have in the reftable library. Instead of aborting the program, we'll now bubble up a `REFTABLE_API_ERROR` to indicate misuse of the calling conventions. Note that in both `reftable_reader_{inc,dec}ref()` we simply stop calling `BUG()` altogether. The only situation where the counter should be zero is when the structure has already been free'd anyway, so we would run into undefined behaviour regardless of whether we try to abort the program or not. Signed-off-by: Patrick Steinhardt --- reftable/iter.c | 3 +-- reftable/reader.c | 4 ---- reftable/writer.c | 5 ++--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/reftable/iter.c b/reftable/iter.c index 86e801ca9f..b2ffb09c16 100644 --- a/reftable/iter.c +++ b/reftable/iter.c @@ -146,8 +146,7 @@ static int indexed_table_ref_iter_next_block(struct indexed_table_ref_iter *it) static int indexed_table_ref_iter_seek(void *p UNUSED, struct reftable_record *want UNUSED) { - BUG("seeking indexed table is not supported"); - return -1; + return REFTABLE_API_ERROR; } static int indexed_table_ref_iter_next(void *p, struct reftable_record *rec) diff --git a/reftable/reader.c b/reftable/reader.c index de6e6dd932..36a5633ede 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -677,8 +677,6 @@ int reftable_reader_new(struct reftable_reader **out, void reftable_reader_incref(struct reftable_reader *r) { - if (!r->refcount) - BUG("cannot increment ref counter of dead reader"); r->refcount++; } @@ -686,8 +684,6 @@ void reftable_reader_decref(struct reftable_reader *r) { if (!r) return; - if (!r->refcount) - BUG("cannot decrement ref counter of dead reader"); if (--r->refcount) return; block_source_close(&r->source); diff --git a/reftable/writer.c b/reftable/writer.c index 91d6629486..155863ee5f 100644 --- a/reftable/writer.c +++ b/reftable/writer.c @@ -158,7 +158,7 @@ int reftable_writer_new(struct reftable_writer **out, opts = *_opts; options_set_defaults(&opts); if (opts.block_size >= (1 << 24)) - BUG("configured block size exceeds 16MB"); + return REFTABLE_API_ERROR; reftable_buf_init(&wp->block_writer_data.last_key); reftable_buf_init(&wp->last_key); @@ -289,8 +289,7 @@ static int writer_add_record(struct reftable_writer *w, } if (block_writer_type(w->block_writer) != reftable_record_type(rec)) - BUG("record of type %d added to writer of type %d", - reftable_record_type(rec), block_writer_type(w->block_writer)); + return REFTABLE_API_ERROR; /* * Try to add the record to the writer. If this succeeds then we're From patchwork Tue Jan 28 08:28:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952241 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 124751DF259 for ; Tue, 28 Jan 2025 08:28:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052904; cv=none; b=tfTOgniLXxcKqWjUpVYhdnldaXG4m1kKBoEsnEC91HIextg6Brv/1kGlQQxz9H8ZOxNHFeO313MkAw+3f5C9sbJSX3ZxlFy4XNnGs76TtOcWpHC1rVlzvbeZkp2h5p9aoK8JuAwE27LIFfHyWhb4uybslkNgRiwBwGY7xFRsLUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052904; c=relaxed/simple; bh=Et2KRIpZ50Ti8K5L+Hq3oKjm7iR2mXqbWRq/2ZcQm8I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YFDFg3zhsp9Z8IK4wHec/SbpwmIRWKdfUIRpHPHee3ERRSBuCiYxYXTGukSoI1LN2x5V4YZmZ1rI1trVEo4JyXyPDmWqEKViNEl6cEMdeo5dljZmKIgU5BDvDugJWxoXPEqdRHJiRY+2G0s8gq7DBZ1GdaajUlqqDhAlKLi9xgA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=RPenCoMq; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=enUuCbKi; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="RPenCoMq"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="enUuCbKi" Received: from phl-compute-08.internal (phl-compute-08.phl.internal [10.202.2.48]) by mailfout.stl.internal (Postfix) with ESMTP id 09B2111401CC; Tue, 28 Jan 2025 03:28:22 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-08.internal (MEProxy); Tue, 28 Jan 2025 03:28:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052901; x=1738139301; bh=KrYZAgyOUV0fxo0mPxCdHkYI5Fum1vgO46A+ah3bT00=; b= RPenCoMqfOqtBZbo+E36NmryYIHuh/Ofm8Su92a3nG8zSqbfBqLTHY5G4hPRobgb KHJ0ZjzD6W/w6Vfj2W6lp6UXxAkPMc4C+9xMt6FyJQkjZnLSywSQo0l5h12k9B36 7B+2Ul36cilLViGGxQy1zVvfCT95kJawzHwNcn0izo8IN/REBcfd7NIZORu/PhTY nts5TpItwAwTRaXrohqhMF00IueoHw/aS/IEGSQNfT+XHV7+VljL9M4NXPHyuVde aqWHlK7pglc2nuGb6pKVhDp+eVweUsmoWunLOPSxaqxNJrNRJdpuwRpquupc0BLt 0dHOq04Ze6mriNGO188CVw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052901; x= 1738139301; bh=KrYZAgyOUV0fxo0mPxCdHkYI5Fum1vgO46A+ah3bT00=; b=e nUuCbKi6gKP7qBCcQUaNuz9yaPBIcB+phVi2jQIsxbBQWxidfA5/A3aV/kj5CkhE DlTC1GAw8mRaOYZ0g8vVZqOTlHxc4QGw/XK/n9RX8xmpwyV2qD3FdfmS9w2zaHAs xPRRIkqoEYqcLduWteSKUKS8yUwqmi8hKTWix6WFd9MffvoniyCYDjo1wkC7uHYU 5Yj2Eh5lMSgk1ybwImoqUY39lDpYrWchZXBJN/BmuHXEUN8/i7JiRxnAI1Fsed1f fpJhl78Dbyw9xArZKlT8SuxtKPIvFCTw85OH15QUwIB9zzGcnCBqjW46sCGwub8K ugRjlJcyYTsj5ezvmkprA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpd hrtghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehj lhhtohgslhgvrhesghhmrghilhdrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:20 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 51ec9d84 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:20 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:09 +0100 Subject: [PATCH v2 08/20] reftable/basics: stop using `st_mult()` in array allocators Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-8-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 We're using `st_mult()` as part of our macro helpers that allocate arrays. This is bad due two two reasons: - `st_mult()` causes us to die in case the multiplication overflows. - `st_mult()` ties us to the Git codebase. Refactor the code to instead detect overflows manually and return an error in such cases. Signed-off-by: Patrick Steinhardt --- reftable/basics.h | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/reftable/basics.h b/reftable/basics.h index a2a010a0e1..646f8d67f2 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -117,18 +117,46 @@ void reftable_free(void *p); void *reftable_calloc(size_t nelem, size_t elsize); char *reftable_strdup(const char *str); -#define REFTABLE_ALLOC_ARRAY(x, alloc) (x) = reftable_malloc(st_mult(sizeof(*(x)), (alloc))) +static inline int reftable_alloc_size(size_t nelem, size_t elsize, size_t *out) +{ + if (nelem && elsize > SIZE_MAX / nelem) + return -1; + *out = nelem * elsize; + return 0; +} + +#define REFTABLE_ALLOC_ARRAY(x, alloc) do { \ + size_t alloc_size; \ + if (reftable_alloc_size(sizeof(*(x)), (alloc), &alloc_size) < 0) { \ + errno = ENOMEM; \ + (x) = NULL; \ + } else { \ + (x) = reftable_malloc(alloc_size); \ + } \ + } while (0) #define REFTABLE_CALLOC_ARRAY(x, alloc) (x) = reftable_calloc((alloc), sizeof(*(x))) -#define REFTABLE_REALLOC_ARRAY(x, alloc) (x) = reftable_realloc((x), st_mult(sizeof(*(x)), (alloc))) +#define REFTABLE_REALLOC_ARRAY(x, alloc) do { \ + size_t alloc_size; \ + if (reftable_alloc_size(sizeof(*(x)), (alloc), &alloc_size) < 0) { \ + errno = ENOMEM; \ + (x) = NULL; \ + } else { \ + (x) = reftable_realloc((x), alloc_size); \ + } \ + } while (0) static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize, size_t *allocp) { void *new_p; - size_t alloc = *allocp * 2 + 1; + size_t alloc = *allocp * 2 + 1, alloc_bytes; if (alloc < nelem) alloc = nelem; - new_p = reftable_realloc(p, st_mult(elsize, alloc)); + if (reftable_alloc_size(elsize, alloc, &alloc_bytes) < 0) { + errno = ENOMEM; + return p; + } + new_p = reftable_realloc(p, alloc_bytes); if (!new_p) return p; *allocp = alloc; From patchwork Tue Jan 28 08:28:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952242 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 832E21EE7BE for ; Tue, 28 Jan 2025 08:28:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052906; cv=none; b=lKLe/0U8dp0CNTO43VFSIPTYVBTvpey2v3WIQ0IIi+l1P5y9nLXcOhGfuRm4TBwbFXOPUzjBQoX8pUYlbbfP04qQ/+80RHwU0GuQfML6hKkL9sQ5vOssLKK4s1NMmDWYSpAXR9iYic79WbRJpEMqvIwtjKJZZ1zKsPrfcy+e73Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052906; c=relaxed/simple; bh=War32tBLIzvUATGNe9LweLzLOgcUPOOCHX38M2WjYQU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JLGNsy5M9ykqDv15TQjC8JSjVsAKdmkQMaOccUB+uTUz3H1htZV3YpqrUVvDXanDg933FawaEo943YkHLkKsZ3BGvOz+vDEap+E7uUz+NxcQF77RM0Hw9Juw8ug+O//+kaGSVOWgaRjlxYNV/4hbJENZcLgw9fBWrRT/0K5WRPA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=A9S92ez7; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=yMum+55q; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="A9S92ez7"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="yMum+55q" Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfhigh.stl.internal (Postfix) with ESMTP id 86A07254024E; Tue, 28 Jan 2025 03:28:23 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Tue, 28 Jan 2025 03:28:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052903; x=1738139303; bh=I8CFGm4rnDGF4WqyQO9uQfFzGhrLD15UJ+ID3wFGIpA=; b= A9S92ez7Omg/xV+lq7rtM7yXhN55njlXWbKcJ8Qk3479KxfyOp2olzXS/8faLcqO ImZ0ntru4Z9x6FTMOAXO+XGWwlqNz5aJnj/bOCdNXN4yogh1RXmm3XsMf55y4MQk 3XU6L8JZZdWNJv1bWS6eIgV3SSof/lhBka0TVrhx4fwBHBQ8Sd155jS0Uk7fL6fL yHFfeqodT7NGHFw0DWEKUGi28a0K3ps8rrMQmEaSUtXKb8tTknPxx0Da6by4n0Bw 0G9aP+2BPQ/s4r8bkcf+PQ6t6GH41mtkW06W/0ZDBmRpdUjId6ReffxTwTq58zyq rPrN09sbF+OFIkDftE+j1w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052903; x= 1738139303; bh=I8CFGm4rnDGF4WqyQO9uQfFzGhrLD15UJ+ID3wFGIpA=; b=y Mum+55qoBC9AjG3qdRAYzy2Wvs2ZLaDd+7SujtTEZA4ImtMqyKOeD1CXDXTeBs3w s6oz/7EWIsxD63ecyg/ZQrINcIBXKMe00oC5BtvKt+VzNk4VsKIka054bqZlzRWV //Uxgc8fqjku41eFYBYmukf5OkGPI5LuWUH4b6LH3ASqhhyH1ybJBS7HQpTulktS 0dv+SAsEIeFhVMyXqCq98h93pXGu3s1IHb/V38qwz6PhbwAlewDCMClHucYJoV6h vYGIlobhnYzaL0Rk9QL5JpqtAHtbBB+XmtYjMmdb4txorJQwvgqMeWI6x9YowIOX SmRu69axxXwgRCZ3Yy5PQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpefhfeeiveffudfhjedvveffhfdukefhvdekveev geeuieetteevgeelgffhvedtgfenucffohhmrghinhepuhhpuggrthgvrdhtiienucevlh hushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpshesphhkshdr ihhmpdhnsggprhgtphhtthhopeegpdhmohguvgepshhmthhpohhuthdprhgtphhtthhope hjlhhtohgslhgvrhesghhmrghilhdrtghomhdprhgtphhtthhopegvthhhohhmshhonhes vggufigrrhguthhhohhmshhonhdrtghomhdprhgtphhtthhopehgihhtshhtvghrsehpoh gsohigrdgtohhmpdhrtghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:22 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 8ddbff70 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:21 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:10 +0100 Subject: [PATCH v2 09/20] reftable/basics: provide wrappers for big endian conversion Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-9-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 We're using a mixture of big endian conversion functions provided by both the reftable library, but also by the Git codebase. Refactor the code so that we exclusively use reftable-provided wrappers in order to untangle us from the Git codebase. Signed-off-by: Patrick Steinhardt --- reftable/basics.c | 19 ---------- reftable/basics.h | 76 ++++++++++++++++++++++++++++++++++++++-- reftable/block.c | 12 +++---- reftable/reader.c | 22 ++++++------ reftable/record.c | 8 ++--- reftable/writer.c | 20 +++++------ t/unit-tests/t-reftable-basics.c | 28 ++++++++++++--- 7 files changed, 127 insertions(+), 58 deletions(-) diff --git a/reftable/basics.c b/reftable/basics.c index 3b5ea27bbd..8c4a4433e4 100644 --- a/reftable/basics.c +++ b/reftable/basics.c @@ -147,25 +147,6 @@ char *reftable_buf_detach(struct reftable_buf *buf) return result; } -void put_be24(uint8_t *out, uint32_t i) -{ - out[0] = (uint8_t)((i >> 16) & 0xff); - out[1] = (uint8_t)((i >> 8) & 0xff); - out[2] = (uint8_t)(i & 0xff); -} - -uint32_t get_be24(uint8_t *in) -{ - return (uint32_t)(in[0]) << 16 | (uint32_t)(in[1]) << 8 | - (uint32_t)(in[2]); -} - -void put_be16(uint8_t *out, uint16_t i) -{ - out[0] = (uint8_t)((i >> 8) & 0xff); - out[1] = (uint8_t)(i & 0xff); -} - size_t binsearch(size_t sz, int (*f)(size_t k, void *args), void *args) { size_t lo = 0; diff --git a/reftable/basics.h b/reftable/basics.h index 646f8d67f2..c1ddbaec3f 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -76,9 +76,79 @@ char *reftable_buf_detach(struct reftable_buf *buf); /* Bigendian en/decoding of integers */ -void put_be24(uint8_t *out, uint32_t i); -uint32_t get_be24(uint8_t *in); -void put_be16(uint8_t *out, uint16_t i); +static inline void reftable_put_be16(void *out, uint16_t i) +{ + unsigned char *p = out; + p[0] = (uint8_t)((i >> 8) & 0xff); + p[1] = (uint8_t)((i >> 0) & 0xff); +} + +static inline void reftable_put_be24(void *out, uint32_t i) +{ + unsigned char *p = out; + p[0] = (uint8_t)((i >> 16) & 0xff); + p[1] = (uint8_t)((i >> 8) & 0xff); + p[2] = (uint8_t)((i >> 0) & 0xff); +} + +static inline void reftable_put_be32(void *out, uint32_t i) +{ + unsigned char *p = out; + p[0] = (uint8_t)((i >> 24) & 0xff); + p[1] = (uint8_t)((i >> 16) & 0xff); + p[2] = (uint8_t)((i >> 8) & 0xff); + p[3] = (uint8_t)((i >> 0) & 0xff); +} + +static inline void reftable_put_be64(void *out, uint64_t i) +{ + unsigned char *p = out; + p[0] = (uint8_t)((i >> 56) & 0xff); + p[1] = (uint8_t)((i >> 48) & 0xff); + p[2] = (uint8_t)((i >> 40) & 0xff); + p[3] = (uint8_t)((i >> 32) & 0xff); + p[4] = (uint8_t)((i >> 24) & 0xff); + p[5] = (uint8_t)((i >> 16) & 0xff); + p[6] = (uint8_t)((i >> 8) & 0xff); + p[7] = (uint8_t)((i >> 0) & 0xff); +} + +static inline uint16_t reftable_get_be16(const void *in) +{ + const unsigned char *p = in; + return (uint16_t)(p[0]) << 8 | + (uint16_t)(p[1]) << 0; +} + +static inline uint32_t reftable_get_be24(const void *in) +{ + const unsigned char *p = in; + return (uint32_t)(p[0]) << 16 | + (uint32_t)(p[1]) << 8 | + (uint32_t)(p[2]) << 0; +} + +static inline uint32_t reftable_get_be32(const void *in) +{ + const unsigned char *p = in; + return (uint32_t)(p[0]) << 24 | + (uint32_t)(p[1]) << 16 | + (uint32_t)(p[2]) << 8| + (uint32_t)(p[3]) << 0; +} + +static inline uint64_t reftable_get_be64(const void *in) +{ + const unsigned char *p = in; + return (uint64_t)(p[0]) << 56 | + (uint64_t)(p[1]) << 48 | + (uint64_t)(p[2]) << 40 | + (uint64_t)(p[3]) << 32 | + (uint64_t)(p[4]) << 24 | + (uint64_t)(p[5]) << 16 | + (uint64_t)(p[6]) << 8 | + (uint64_t)(p[7]) << 0; +} /* * find smallest index i in [0, sz) at which `f(i) > 0`, assuming that f is diff --git a/reftable/block.c b/reftable/block.c index 255d566854..373908807e 100644 --- a/reftable/block.c +++ b/reftable/block.c @@ -148,13 +148,13 @@ int block_writer_add(struct block_writer *w, struct reftable_record *rec) int block_writer_finish(struct block_writer *w) { for (uint32_t i = 0; i < w->restart_len; i++) { - put_be24(w->block + w->next, w->restarts[i]); + reftable_put_be24(w->block + w->next, w->restarts[i]); w->next += 3; } - put_be16(w->block + w->next, w->restart_len); + reftable_put_be16(w->block + w->next, w->restart_len); w->next += 2; - put_be24(w->block + 1 + w->header_off, w->next); + reftable_put_be24(w->block + 1 + w->header_off, w->next); /* * Log records are stored zlib-compressed. Note that the compression @@ -216,7 +216,7 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block, { uint32_t full_block_size = table_block_size; uint8_t typ = block->data[header_off]; - uint32_t sz = get_be24(block->data + header_off + 1); + uint32_t sz = reftable_get_be24(block->data + header_off + 1); int err = 0; uint16_t restart_count = 0; uint32_t restart_start = 0; @@ -300,7 +300,7 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block, full_block_size = sz; } - restart_count = get_be16(block->data + sz - 2); + restart_count = reftable_get_be16(block->data + sz - 2); restart_start = sz - 2 - 3 * restart_count; restart_bytes = block->data + restart_start; @@ -355,7 +355,7 @@ int block_reader_first_key(const struct block_reader *br, struct reftable_buf *k static uint32_t block_reader_restart_offset(const struct block_reader *br, size_t idx) { - return get_be24(br->restart_bytes + 3 * idx); + return reftable_get_be24(br->restart_bytes + 3 * idx); } void block_iter_seek_start(struct block_iter *it, const struct block_reader *br) diff --git a/reftable/reader.c b/reftable/reader.c index 36a5633ede..bf07a0a586 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -101,18 +101,18 @@ static int parse_footer(struct reftable_reader *r, uint8_t *footer, } f++; - r->block_size = get_be24(f); + r->block_size = reftable_get_be24(f); f += 3; - r->min_update_index = get_be64(f); + r->min_update_index = reftable_get_be64(f); f += 8; - r->max_update_index = get_be64(f); + r->max_update_index = reftable_get_be64(f); f += 8; if (r->version == 1) { r->hash_id = REFTABLE_HASH_SHA1; } else { - switch (get_be32(f)) { + switch (reftable_get_be32(f)) { case REFTABLE_FORMAT_ID_SHA1: r->hash_id = REFTABLE_HASH_SHA1; break; @@ -127,24 +127,24 @@ static int parse_footer(struct reftable_reader *r, uint8_t *footer, f += 4; } - r->ref_offsets.index_offset = get_be64(f); + r->ref_offsets.index_offset = reftable_get_be64(f); f += 8; - r->obj_offsets.offset = get_be64(f); + r->obj_offsets.offset = reftable_get_be64(f); f += 8; r->object_id_len = r->obj_offsets.offset & ((1 << 5) - 1); r->obj_offsets.offset >>= 5; - r->obj_offsets.index_offset = get_be64(f); + r->obj_offsets.index_offset = reftable_get_be64(f); f += 8; - r->log_offsets.offset = get_be64(f); + r->log_offsets.offset = reftable_get_be64(f); f += 8; - r->log_offsets.index_offset = get_be64(f); + r->log_offsets.index_offset = reftable_get_be64(f); f += 8; computed_crc = crc32(0, footer, f - footer); - file_crc = get_be32(f); + file_crc = reftable_get_be32(f); f += 4; if (computed_crc != file_crc) { err = REFTABLE_FORMAT_ERROR; @@ -214,7 +214,7 @@ static int32_t extract_block_size(uint8_t *data, uint8_t *typ, uint64_t off, *typ = data[0]; if (reftable_is_block_type(*typ)) { - result = get_be24(data + 1); + result = reftable_get_be24(data + 1); } return result; } diff --git a/reftable/record.c b/reftable/record.c index da550494a2..286659c098 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -684,7 +684,7 @@ static int reftable_log_record_key(const void *r, struct reftable_buf *dest) return err; ts = (~ts) - rec->update_index; - put_be64(&i64[0], ts); + reftable_put_be64(&i64[0], ts); err = reftable_buf_add(dest, i64, sizeof(i64)); if (err < 0) @@ -809,7 +809,7 @@ static int reftable_log_record_encode(const void *rec, struct string_view s, if (s.len < 2) return -1; - put_be16(s.buf, r->value.update.tz_offset); + reftable_put_be16(s.buf, r->value.update.tz_offset); string_view_consume(&s, 2); n = encode_string( @@ -841,7 +841,7 @@ static int reftable_log_record_decode(void *rec, struct reftable_buf key, } memcpy(r->refname, key.buf, key.len - 8); - ts = get_be64(key.buf + key.len - 8); + ts = reftable_get_be64((unsigned char *)key.buf + key.len - 8); r->update_index = (~max) - ts; @@ -932,7 +932,7 @@ static int reftable_log_record_decode(void *rec, struct reftable_buf key, goto done; } - r->value.update.tz_offset = get_be16(in.buf); + r->value.update.tz_offset = reftable_get_be16(in.buf); string_view_consume(&in, 2); n = decode_string(scratch, in); diff --git a/reftable/writer.c b/reftable/writer.c index 155863ee5f..5961698311 100644 --- a/reftable/writer.c +++ b/reftable/writer.c @@ -99,9 +99,9 @@ static int writer_write_header(struct reftable_writer *w, uint8_t *dest) dest[4] = writer_version(w); - put_be24(dest + 5, w->opts.block_size); - put_be64(dest + 8, w->min_update_index); - put_be64(dest + 16, w->max_update_index); + reftable_put_be24(dest + 5, w->opts.block_size); + reftable_put_be64(dest + 8, w->min_update_index); + reftable_put_be64(dest + 16, w->max_update_index); if (writer_version(w) == 2) { uint32_t hash_id; @@ -116,7 +116,7 @@ static int writer_write_header(struct reftable_writer *w, uint8_t *dest) return -1; } - put_be32(dest + 24, hash_id); + reftable_put_be32(dest + 24, hash_id); } return header_size(writer_version(w)); @@ -717,19 +717,19 @@ int reftable_writer_close(struct reftable_writer *w) } p += writer_write_header(w, footer); - put_be64(p, w->stats.ref_stats.index_offset); + reftable_put_be64(p, w->stats.ref_stats.index_offset); p += 8; - put_be64(p, (w->stats.obj_stats.offset) << 5 | w->stats.object_id_len); + reftable_put_be64(p, (w->stats.obj_stats.offset) << 5 | w->stats.object_id_len); p += 8; - put_be64(p, w->stats.obj_stats.index_offset); + reftable_put_be64(p, w->stats.obj_stats.index_offset); p += 8; - put_be64(p, w->stats.log_stats.offset); + reftable_put_be64(p, w->stats.log_stats.offset); p += 8; - put_be64(p, w->stats.log_stats.index_offset); + reftable_put_be64(p, w->stats.log_stats.index_offset); p += 8; - put_be32(p, crc32(0, footer, p - footer)); + reftable_put_be32(p, crc32(0, footer, p - footer)); p += 4; err = w->flush(w->write_arg); diff --git a/t/unit-tests/t-reftable-basics.c b/t/unit-tests/t-reftable-basics.c index 9ba7eb05ad..c9e751e49e 100644 --- a/t/unit-tests/t-reftable-basics.c +++ b/t/unit-tests/t-reftable-basics.c @@ -128,12 +128,30 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED) reftable_buf_release(&b); } - if_test ("put_be24 and get_be24 work") { + if_test ("reftable_put_be64 and reftable_get_be64 work") { + uint64_t in = 0x1122334455667788; + uint8_t dest[8]; + uint64_t out; + reftable_put_be64(dest, in); + out = reftable_get_be64(dest); + check_int(in, ==, out); + } + + if_test ("reftable_put_be32 and reftable_get_be32 work") { + uint32_t in = 0x11223344; + uint8_t dest[4]; + uint32_t out; + reftable_put_be32(dest, in); + out = reftable_get_be32(dest); + check_int(in, ==, out); + } + + if_test ("reftable_put_be24 and reftable_get_be24 work") { uint32_t in = 0x112233; uint8_t dest[3]; uint32_t out; - put_be24(dest, in); - out = get_be24(dest); + reftable_put_be24(dest, in); + out = reftable_get_be24(dest); check_int(in, ==, out); } @@ -141,8 +159,8 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED) uint32_t in = 0xfef1; uint8_t dest[3]; uint32_t out; - put_be16(dest, in); - out = get_be16(dest); + reftable_put_be16(dest, in); + out = reftable_get_be16(dest); check_int(in, ==, out); } From patchwork Tue Jan 28 08:28:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952243 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BA001DF271 for ; Tue, 28 Jan 2025 08:28:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052907; cv=none; b=M4Jh41xKHP8sdpmewz/tXxYjA46waGnunRieIZn6i6HU0WnnV6mqiUQVuve/7t6mY0U3/xX8cECjiNpkaY9H6V7Tcinu6thIVQM9Mb7PkXF6iNKKGbGIZNDar7AUHru6vuPtHTrzQo9MfbjEnV2S1Dax9HiOdBf4eolVFplrth8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052907; c=relaxed/simple; bh=yNiOIXNMH8qUXRFfatF/Hrv0zHHaZv1NHqVuolomlxg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pk3i9LyAuePnn7/St+OeaM5+Nn0SfcyAS7Qw+oZ9X/QWRatF2DZloAJMnLCJ+xI4sTgICZfP4TOhoweLcW0F9gWGBFIpFaXcYH2TzvZr2D71yjdVSOq06sn67kLAWhjcHXkja3sZTlWaATSYosYuuqxRJ92noynZO3NFB/2mCuE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=SjiFl1LH; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=ZaNm3J74; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="SjiFl1LH"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="ZaNm3J74" Received: from phl-compute-01.internal (phl-compute-01.phl.internal [10.202.2.41]) by mailfout.stl.internal (Postfix) with ESMTP id 19A1F11401CC; Tue, 28 Jan 2025 03:28:25 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Tue, 28 Jan 2025 03:28:25 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052904; x=1738139304; bh=WuG4AcUl6HDdJnnwSbtTHemegXqNW+IiTeBaIn9TSHA=; b= SjiFl1LHawuLu1VYabGcim1TtWFQQ376RPep9TIn3bDWn9b8cwetpYoGpIemWzo3 EkPo8ai1gaNCZ5EmdtAG9z32qNkNExkszHEwsaJnlQvNe+Bvwl1PB3aWWQQPfOmo IYC4WEYQoWeDXVQBKE8HJKTD2FjOhDaCrVu+pHzB6A9ixleTxIefFbtHK40hRx1L lTlc2rYkFUPB26+IV5LpS1JrPamJWD+8dA40ukmZs53jAJ4+uTnTvVqDRLP/PRJy a4pwHhbgJzO36G1ramqkXsU7D8Z4CxOr97UHmONFCHQDtpalkRjtoqZtof3u7Vka rxcXpZG5fGvKHmXhRNK7ww== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052904; x= 1738139304; bh=WuG4AcUl6HDdJnnwSbtTHemegXqNW+IiTeBaIn9TSHA=; b=Z aNm3J74rCgs/ERzD/PeqMIt+u/MTTzSx7PDRTQhKC3iKVPiWBVTW2ct8PNoJjDXG pE/rIWMyyf8+XSjMndIs7roqDwxQQ0rtNgJNdIB8b+TY0QmDQHa03P0yAgkd44bF 4N/A2WnqOy4IcDYEEqfWi0PR88cdBAg9zImvJgsbj1UFVYlVw3fdWyRa2tBoS4uw ugmQFTlBWVlrfMJ65oKkzSmb6DwkuipX1Br7WM/NTTWBzVJs8qpDXdQtQ4yrPoJd cdCA1x9VhlfnEkItWB7VTrPosY6hch402Qwxfx9xmBubG5fnsjCRKi3+BgfM+0rq 7fqJ2JaFxLEStxvceJgHA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopegvthhhohhmshhonhesvggufigrrhguthhhoh hmshhonhdrtghomhdprhgtphhtthhopehjlhhtohgslhgvrhesghhmrghilhdrtghomhdp rhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepgh hithhsthgvrhesphhosghogidrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:23 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id aa8381d8 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:22 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:11 +0100 Subject: [PATCH v2 10/20] reftable/reader: stop using `ARRAY_SIZE()` macro Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-10-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 We have a single user of the `ARRAY_SIZE()` macro in the reftable reader. Drop its use to reduce our dependence on the Git codebase. Signed-off-by: Patrick Steinhardt --- reftable/reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reftable/reader.c b/reftable/reader.c index bf07a0a586..c3a3674665 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -849,7 +849,7 @@ int reftable_reader_print_blocks(const char *tablename) printf("header:\n"); printf(" block_size: %d\n", r->block_size); - for (i = 0; i < ARRAY_SIZE(sections); i++) { + for (i = 0; i < sizeof(sections) / sizeof(*sections); i++) { err = table_iter_seek_start(&ti, sections[i].type, 0); if (err < 0) goto done; From patchwork Tue Jan 28 08:28:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952244 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F2F311F37B0 for ; Tue, 28 Jan 2025 08:28:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052908; cv=none; b=k+gdlTRa+4nJX0YvaHdcrT99SJgYn0Olf+s5UiBvNkQj9Snn1W8drz8m8b/Hlulp1HCi0EgpjJTCSKjXJUoMENDGO6SlLj91prS4yyfH0L604ALnceEZKwhbeBo208C2yhveDlZWCPeExlyeO75VEpn7MTKLMDUkNLACiQv3nYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052908; c=relaxed/simple; bh=+1ZfmkbfY7oQbi3mh98Cov4Tt5PalQNH5hpbNUu+aZc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aNENNJUW97df/gCBNTwb9LBGV9thRlKfAF5152N+kJbYDJ2CLoO+cd2ixNAragraNsv7kN/gSa/z7vz5K8bYfdRCZpMN3C53h7hRJnkYHYqBv0vh9u9XnMXwLu585RKJD8vAcXf083d73lRto6hNkaD6qSP+rYMxPgZ3ezFnyZg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=PIA778VN; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Uwm7pf2X; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="PIA778VN"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Uwm7pf2X" Received: from phl-compute-09.internal (phl-compute-09.phl.internal [10.202.2.49]) by mailfout.stl.internal (Postfix) with ESMTP id 1918911401D3; Tue, 28 Jan 2025 03:28:26 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-09.internal (MEProxy); Tue, 28 Jan 2025 03:28:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052905; x=1738139305; bh=wRD3Ek5awySUciyux3HbTKfEqgbwtD0r0n4BcJTAH80=; b= PIA778VNUVseR93bUREsSJyqfXvqljUmokmyT30jKT7tPXQPwCe3e+Ffxjve40Qf UpWJWf05h9b6I8pdq1MKLZ69jibY3jrksMpfEF93tYk5iJBsbkuAYHeV+wlPnbiF 09pQmxgc6DaVzgl3gxWBFSPi70G8JlZu/JAYdJLZiRMRz0PdCd/7AcPJbjkTbB1K uP84xnhOyxPVXR7iUgEhb+/cHJ4dfAdcIkrkg0cKH1gH9jnoUFGsG841GALPjkRy 7EAM6g4QKFe8rb4vEL/iDlzey8ezyabzNf4qyWIo5JyWFtwirH1M0FdXqZoWDGLW XlbTlEgYvGfGzdEuN7wKyA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052905; x= 1738139305; bh=wRD3Ek5awySUciyux3HbTKfEqgbwtD0r0n4BcJTAH80=; b=U wm7pf2XE4SWNqB9PIrwPpVxxBUVGJrOpdknKOI2F0DmNFvLJ5XRtQj6P2FKlzV7G 89Ho/dnso3s7PYDKIm8skI6GoRNHtVhFOgRngj0On/kS1PT+7PYry6en/itnS8sf 2975hKdVR+3rwFSpt5JQ/r3EyXao31uIkCjqbS5csQhp/zd/gcFdVzQ2CTDPIRgI vl4ovuSlomQQMTp1TgBWYmAfHxXejy98MXL67UHNHlGUi44rLtX7tyKxeMVauER2 67lCyHoIy5BwKZLHWao5gTK2uq/pLhBDHrx+ATSL0xeu1AQccF984OlYK3qVFETP ZceQ1X33Bech5q2H0pBDw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpd hrtghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopegv thhhohhmshhonhesvggufigrrhguthhhohhmshhonhdrtghomhdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:24 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id f4726398 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:23 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:12 +0100 Subject: [PATCH v2 11/20] reftable/system: introduce `reftable_rand()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-11-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Introduce a new system-level `reftable_rand()` function that generates a single unsigned integer for us. The implementation of this function is to be provided by the calling codebase, which allows us to more easily hook into pre-seeded random number generators. Adapt the two callsites where we generated random data. Signed-off-by: Patrick Steinhardt --- reftable/stack.c | 4 ++-- reftable/system.c | 5 +++++ reftable/system.h | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/reftable/stack.c b/reftable/stack.c index 5f155b344b..82bdf5169f 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -523,7 +523,7 @@ static int reftable_stack_reload_maybe_reuse(struct reftable_stack *st, close(fd); fd = -1; - delay = delay + (delay * git_rand(CSPRNG_BYTES_INSECURE)) / UINT32_MAX + 1; + delay = delay + (delay * reftable_rand()) / UINT32_MAX + 1; sleep_millisec(delay); } @@ -688,7 +688,7 @@ int reftable_stack_add(struct reftable_stack *st, static int format_name(struct reftable_buf *dest, uint64_t min, uint64_t max) { char buf[100]; - uint32_t rnd = git_rand(CSPRNG_BYTES_INSECURE); + uint32_t rnd = reftable_rand(); snprintf(buf, sizeof(buf), "0x%012" PRIx64 "-0x%012" PRIx64 "-%08x", min, max, rnd); reftable_buf_reset(dest); diff --git a/reftable/system.c b/reftable/system.c index adf8e4d30b..e25ccc0da3 100644 --- a/reftable/system.c +++ b/reftable/system.c @@ -4,6 +4,11 @@ #include "../lockfile.h" #include "../tempfile.h" +uint32_t reftable_rand(void) +{ + return git_rand(CSPRNG_BYTES_INSECURE); +} + int tmpfile_from_pattern(struct reftable_tmpfile *out, const char *pattern) { struct tempfile *tempfile; diff --git a/reftable/system.h b/reftable/system.h index 7d5f803eeb..3bd4a4e322 100644 --- a/reftable/system.h +++ b/reftable/system.h @@ -13,6 +13,12 @@ license that can be found in the LICENSE file or at #include "git-compat-util.h" +/* + * Return a random 32 bit integer. This function is expected to return + * pre-seeded data. + */ +uint32_t reftable_rand(void); + /* * An implementation-specific temporary file. By making this specific to the * implementation it becomes possible to tie temporary files into any kind of From patchwork Tue Jan 28 08:28:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952245 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8ED41F37BA for ; Tue, 28 Jan 2025 08:28:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052909; cv=none; b=QY5UGnB+FBr3kTQoG4MYgcaq0E/ova8JEJRsbzs6u9lCiEcLsfIVaMkugQ8ceCpX0ABqhOcg0s2xGoHeQY9zUbCu13mShJF0wFolNOCvPD0u5YkYhgaOqm9fE7M5oZcgVBcKupfaHzMoWqmdyvTo1GOHOLLjebiYlSOPeI7RhzU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052909; c=relaxed/simple; bh=CVOCq3Ab9U1F43Ds5A24Ljd+idNRvmODkHX0xx2hVc8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P9RtPh9s2Nalju+XeWGM+5D2jW6uv/WOwFtnxd58YrN46JzOVbjG73TaPbF5esfRWOm/qIJ48EWDXO1KRRFQa3ZlrbcaQX4J7j9ydGkAqrt1lSWEWUmutvNUXq/c+iHtqS8cgJtHecBw0PAzc8MDE7M5Hcj3/rzkLe1Z2/GPkW8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=bRYl4+zc; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=ZG2/C05S; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="bRYl4+zc"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="ZG2/C05S" Received: from phl-compute-11.internal (phl-compute-11.phl.internal [10.202.2.51]) by mailfhigh.stl.internal (Postfix) with ESMTP id A9B622540246; Tue, 28 Jan 2025 03:28:26 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-11.internal (MEProxy); Tue, 28 Jan 2025 03:28:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052906; x=1738139306; bh=tJrciiJiZemBwMMzIMvDYFX/gnjv40BjS+jAPdHH6zg=; b= bRYl4+zczaBwzVSbuwwq78j2yDCt914HzEeY196tJIJ65cVl/nV4Z6JqCRTIZF0T Fgere1V3es8EPiCr1Fk+DFTzUO38SPU0Fd+5ehWbT7YFZWq1NtF86SLzMpXUhKI3 woIckvkchfuVH1taMFF6dQ8Dugaz6mGFGe9/GZeHlmHndFooMNCPrB9pFE4qqQus gEp0VvpZHSQCRHUgsO1YNTWpV6KQnqJ385KkJZW/cANtSH4zG8AsG7rtKv1K9tDv UZJE9Je3d3R+Utb/W0xUQg7EYyb7f/pMO2C/FCju78HfAJBUExuTmtMauV+tfhSv 8f+7ffbrDLlYv5DMD8V89w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052906; x= 1738139306; bh=tJrciiJiZemBwMMzIMvDYFX/gnjv40BjS+jAPdHH6zg=; b=Z G2/C05SOX/GVLERrhNfjKdP7GKb7V2WKf4yerJ+D1K6Fw8aHqLrIFwO3UPT3OxVa ts7u1S2VMjFcIEahip1R+5K8CphrQbszEg4CZqExbVwTtGgT4ZS+9jme8lcOKy79 rfrVHI9WhGmUbLH54i3VrCsMMi7TL6+FZgN8Mgxjm6pQPWCfk9aiknED99vVevEy pSb+mCcA8mNEZ0XCZVV4TlcdbQGPNE8tlGZrbSjUBtO3KF1ZXXajzU7qQgWA2I23 a1/t08/Df9f9xMsr7Jf2+uyXIU+M0yhPNg32bALVg8tVQeBmlL4DoWuX0V1G1bmp DItE6NOMu3Pxq7TwWRquQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpd hrtghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehj lhhtohgslhgvrhesghhmrghilhdrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:25 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 7bafac4b (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:24 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:13 +0100 Subject: [PATCH v2 12/20] reftable/stack: stop using `sleep_millisec()` Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-12-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Refactor our use of `sleep_millisec()` by open-coding it with poll(3p), which is the current implementation of this function. Ideally, we'd use a more direct way to sleep, but there is no equivalent to sleep(3p) that would accept milliseconds as input. Signed-off-by: Patrick Steinhardt --- reftable/stack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reftable/stack.c b/reftable/stack.c index 82bdf5169f..8e9836aef3 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -524,7 +524,7 @@ static int reftable_stack_reload_maybe_reuse(struct reftable_stack *st, fd = -1; delay = delay + (delay * reftable_rand()) / UINT32_MAX + 1; - sleep_millisec(delay); + poll(NULL, 0, delay); } out: From patchwork Tue Jan 28 08:28:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952246 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 516061EE7BE for ; Tue, 28 Jan 2025 08:28:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052909; cv=none; b=lxU+sv30w6bIpTSy/4rBrLcTYEgrmYH1pziHF9z5fAFsBmpBCbaN9FsWjHnLTY4VH7koE2hwPSGoVtTPWLtJLA8Xm8CHynKTwKYNkmrNQ4h2uhzylwnqrxheaM8dwxqWiuhDykLvWL0qiU1mXDkMoYDk0wZ5ZaOtaGnrFzPQuJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052909; c=relaxed/simple; bh=JGkLARkeVoePA3IqCRJ5YFc2eBFUwobECUxEBi303kY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Onqm8MPR4fC/ez3457zgPGiUe2pgZEUGKrU034q719vtInLDJDFVshix3Vph81gUb2DMKCj7uRrjaAvzlufkGqjiwZNYx6IdJLNpN56sbXBDBfoiD1YTzuKTzgXhNwr0pTacgmip1qlTVr6kgQ9OsotZl070sBLuhzTS03X/ukg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=nV45zm0V; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=gO868Bfy; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="nV45zm0V"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="gO868Bfy" Received: from phl-compute-03.internal (phl-compute-03.phl.internal [10.202.2.43]) by mailfhigh.stl.internal (Postfix) with ESMTP id 9FB5A254024D; Tue, 28 Jan 2025 03:28:27 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-03.internal (MEProxy); Tue, 28 Jan 2025 03:28:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052907; x=1738139307; bh=DeNYQnmLw74mHIsyKpGYPDqi9jnUXrQF+XnjaP+/bEc=; b= nV45zm0V+1xYi8pl3UlKouxh8LI2EWBi0lApu8KopqtVRbpR2MmWUOHhZTHGm6Qb VO8i7nGMwANPy+Wzb7vw0WKrUEhRqg9915clRv3ZsbdOeOP/ZoB6Z7jVpZi3BBgo bVQAYS4IobC6sODjFvW0uprvJtirMFhEO0s48YnYmw95cMrEDx7EBtKkhlnBItLB 9EzL63aHGpuPjWBLBzY55zTa31jd0IjnrFeKpGHj8uAX4VeGyC016h+349hl0YcK avqKUtM9U5mNDiGQSyLQi9qZJplla/xlv6tHthADDHxMelDorGS+uUAGCTzgjjkZ HhmRsqmblxro7j9lXkW21w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052907; x= 1738139307; bh=DeNYQnmLw74mHIsyKpGYPDqi9jnUXrQF+XnjaP+/bEc=; b=g O868BfyWQMCc/tfnD+v8M5FvdGSy7tkoyxxqnCL+kCZDxTWfp5+RQJ5uwtclXY7c K/csCoPqqSisnn0t7ke5hBqRE2GGuERtSmBDP6LboX1ktxdH65Q8q494p4I+b8oX w4QR+4Unw0i8FfVgwXepFJMjEcjcv+uD8i6VqfhxFemn128vHUPSl19L/dZGeOOj c0t7mYTEe9zRuTLMPiE0UHnkiBrgV/l04VCHEoHucp1qy8duICHLHMzG9PHKXxr+ FQ7AxXRrmmEoIidaLc3JVh9/N6dfMkj4itZs79kN/A4mI4SJhvHtCn0RCwkovUPy eOOgH3JHKr02+85NdYg6g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeehnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehjlhhtohgslhgvrhesghhmrghilhdrtghomh dprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpdhrtghpthhtohepvght hhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhmpdhrtghpthhtohepghhith esvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:26 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 5c914c53 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:25 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:14 +0100 Subject: [PATCH v2 13/20] reftable/basics: stop using `SWAP()` macro Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-13-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Stop using `SWAP()` macro in favor of an open-coded variant of it. Note that this also requires us to open-code the build assert that `SWAP()` itself uses to verify that the size of both variables matches. This is done to reduce our dependency on the Git codebase. Signed-off-by: Patrick Steinhardt --- reftable/basics.h | 9 +++++++++ reftable/merged.c | 2 +- reftable/pq.c | 4 ++-- reftable/record.c | 16 ++++++++-------- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/reftable/basics.h b/reftable/basics.h index c1ddbaec3f..59000798f0 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -266,6 +266,15 @@ static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize, # define strdup(str) REFTABLE_BANNED(strdup) #endif +#define REFTABLE_SWAP(a, b) do { \ + void *_swap_a_ptr = &(a); \ + void *_swap_b_ptr = &(b); \ + unsigned char _swap_buffer[sizeof(a) - 2 * sizeof(a) * (sizeof(a) != sizeof(b))]; \ + memcpy(_swap_buffer, _swap_a_ptr, sizeof(a)); \ + memcpy(_swap_a_ptr, _swap_b_ptr, sizeof(a)); \ + memcpy(_swap_b_ptr, _swap_buffer, sizeof(a)); \ +} while (0) + /* Find the longest shared prefix size of `a` and `b` */ size_t common_prefix_size(struct reftable_buf *a, struct reftable_buf *b); diff --git a/reftable/merged.c b/reftable/merged.c index 563864068c..4ff1553772 100644 --- a/reftable/merged.c +++ b/reftable/merged.c @@ -155,7 +155,7 @@ static int merged_iter_next_entry(struct merged_iter *mi, } mi->advance_index = entry.index; - SWAP(*rec, *entry.rec); + REFTABLE_SWAP(*rec, *entry.rec); return 0; } diff --git a/reftable/pq.c b/reftable/pq.c index ef8035cfd9..82394a972d 100644 --- a/reftable/pq.c +++ b/reftable/pq.c @@ -57,7 +57,7 @@ int merged_iter_pqueue_remove(struct merged_iter_pqueue *pq, struct pq_entry *ou if (min == i) break; - SWAP(pq->heap[i], pq->heap[min]); + REFTABLE_SWAP(pq->heap[i], pq->heap[min]); i = min; } @@ -81,7 +81,7 @@ int merged_iter_pqueue_add(struct merged_iter_pqueue *pq, const struct pq_entry size_t j = (i - 1) / 2; if (pq_less(&pq->heap[j], &pq->heap[i])) break; - SWAP(pq->heap[j], pq->heap[i]); + REFTABLE_SWAP(pq->heap[j], pq->heap[i]); i = j; } diff --git a/reftable/record.c b/reftable/record.c index 286659c098..d86cd65bb4 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -237,11 +237,11 @@ static int reftable_ref_record_copy_from(void *rec, const void *src_rec, size_t refname_cap = 0; int err; - SWAP(refname, ref->refname); - SWAP(refname_cap, ref->refname_cap); + REFTABLE_SWAP(refname, ref->refname); + REFTABLE_SWAP(refname_cap, ref->refname_cap); reftable_ref_record_release(ref); - SWAP(ref->refname, refname); - SWAP(ref->refname_cap, refname_cap); + REFTABLE_SWAP(ref->refname, refname); + REFTABLE_SWAP(ref->refname_cap, refname_cap); if (src->refname) { size_t refname_len = strlen(src->refname); @@ -376,11 +376,11 @@ static int reftable_ref_record_decode(void *rec, struct reftable_buf key, return n; string_view_consume(&in, n); - SWAP(refname, r->refname); - SWAP(refname_cap, r->refname_cap); + REFTABLE_SWAP(refname, r->refname); + REFTABLE_SWAP(refname_cap, r->refname_cap); reftable_ref_record_release(r); - SWAP(r->refname, refname); - SWAP(r->refname_cap, refname_cap); + REFTABLE_SWAP(r->refname, refname); + REFTABLE_SWAP(r->refname_cap, refname_cap); REFTABLE_ALLOC_GROW_OR_NULL(r->refname, key.len + 1, r->refname_cap); if (!r->refname) { From patchwork Tue Jan 28 08:28:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952247 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30F981F473F for ; Tue, 28 Jan 2025 08:28:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052910; cv=none; b=s7OejRf9RiiEAdaD46wMv4ymppzjYVWmB84bm8R8JO3nu2db29frJfnK7INMCuTFra3uKZ2lMgpWTNmmrzeGwn6vwrMmN4sfpnBK0KmQc0J33d6oalWWn0A+I1VAdQAUm0WgpLhQD7u02rDdMs+JYHdms7z9cfmrBLkAg8QV0kA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052910; c=relaxed/simple; bh=VI0guBAnlrQx8ug+rNahw3HaYKaoL90XO6wmT73ZoD8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xpf8Jy0vByysTu3Ndb/iFC8bRfCBtvs/sQq83lO7A6jCat25jXLtnJnCnpQ3Kzon/TJF77LN3VgqXuM+Eq/AxEulcwuD513BCE0kmvpufE9bg70hn69xHhKizP1L5zFw1MdnWdFgmSf2Vu0wqw+93r3+nBxYO9E94gNx07TNrKk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=KBUVwmYX; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=n8fNflDX; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="KBUVwmYX"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="n8fNflDX" Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfout.stl.internal (Postfix) with ESMTP id 3680E11401CC; Tue, 28 Jan 2025 03:28:28 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Tue, 28 Jan 2025 03:28:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052908; x=1738139308; bh=xkd0YUwGaxAHDbOLxLubeRD8GcdkulaMiz/zIRxrvlU=; b= KBUVwmYXRpJ2r8aSbqogb534NYRQMKGir4QIiK6bkNkMRcav8Hkdg8mHaMGBzV2N LfYUGOres8qSFij8ML8F6F7f416yPuktzi2B1NAHgeaPI80StHyBWLJ/0YY5cuzA pfDZNa1ynlFZCgDihh+pGxfZKnA2Nv6pX5KohvZpkeQGXaACL2ooyVlCLwCzBAkk 8dx+RB+o1tgvG/hFitQqKrSofPyLHGVaV8BR2GgbgEJANM9m0C2sZ/OfZxoXAuCS Atjf2SpMp8fY3hqnpLQ94ZiGazsO8VTIhHL90E05HdJvjBmr1TXF79q2ABmDJ3Au KxzUNuVgnnELC6mnxMRhOw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052908; x= 1738139308; bh=xkd0YUwGaxAHDbOLxLubeRD8GcdkulaMiz/zIRxrvlU=; b=n 8fNflDX9ahYKhkUgiSpfaw62xMtyn+66xjIqUYl7jlZJhEcBO8S8YCRg5eKdiMvP 7gV9GjnEWcfGA9HSFtlILOlBqWvieCY5z5wHef4U7Wsx1uQfBcJJS5sPUXM88wZf lfyeCJLqC8olRUYr63+ET7s5Bjjw33+pf8MDrIYWYFzbxf7e+ZOo41mFABLYMHJA h5yuXNz3fvpb52bu61NlMnrt6aV3W8XuG170l66kS4789/b9DmvBrAMpgmRa9hVc fDsCcNyx3lgRvw92qhcsXBqYaBrzK2p/gz032a9nprofuM79OUdn4UxZFNQfVr3J bhZHu5xMQFb5sW3Ecz4Vw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeefnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehjlhhtohgslhgvrhesghhmrghilhdrtghomh dprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohep vghthhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhmpdhrtghpthhtohepgh hithhsthgvrhesphhosghogidrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:26 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 4d6375a2 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:26 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:15 +0100 Subject: [PATCH v2 14/20] reftable/basics: stop using `UNUSED` annotation Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-14-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Stop using the `UNUSED` annotation and replace it with a new `REFTABLE_UNUSED` macro. The latter is a weaker guarantee compared to `UNUSED` as it only suppresses unused parameters without generating a warning in case a parameter marked as unused is in fact used. But it's good enough, and by relaxing the behaviour a bit we avoid having to wire up compiler-specific logic. Signed-off-by: Patrick Steinhardt --- reftable/basics.h | 2 ++ reftable/blocksource.c | 10 +++++++--- reftable/iter.c | 17 ++++++++++++----- reftable/record.c | 51 ++++++++++++++++++++++++++++++++++++-------------- reftable/writer.c | 4 +++- 5 files changed, 61 insertions(+), 23 deletions(-) diff --git a/reftable/basics.h b/reftable/basics.h index 59000798f0..4d0645a4e9 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -16,6 +16,8 @@ license that can be found in the LICENSE file or at #include "system.h" #include "reftable-basics.h" +#define REFTABLE_UNUSED(x) (void)(x) + struct reftable_buf { size_t alloc; size_t len; diff --git a/reftable/blocksource.c b/reftable/blocksource.c index 02972c46f4..bfd64b0e48 100644 --- a/reftable/blocksource.c +++ b/reftable/blocksource.c @@ -13,15 +13,17 @@ license that can be found in the LICENSE file or at #include "reftable-blocksource.h" #include "reftable-error.h" -static void reftable_buf_return_block(void *b UNUSED, struct reftable_block *dest) +static void reftable_buf_return_block(void *b, struct reftable_block *dest) { + REFTABLE_UNUSED(b); if (dest->len) memset(dest->data, 0xff, dest->len); reftable_free(dest->data); } -static void reftable_buf_close(void *b UNUSED) +static void reftable_buf_close(void *b) { + REFTABLE_UNUSED(b); } static ssize_t reftable_buf_read_block(void *v, struct reftable_block *dest, @@ -67,8 +69,10 @@ static uint64_t file_size(void *b) return ((struct file_block_source *)b)->size; } -static void file_return_block(void *b UNUSED, struct reftable_block *dest UNUSED) +static void file_return_block(void *b, struct reftable_block *dest) { + REFTABLE_UNUSED(b); + REFTABLE_UNUSED(dest); } static void file_close(void *v) diff --git a/reftable/iter.c b/reftable/iter.c index b2ffb09c16..452add2705 100644 --- a/reftable/iter.c +++ b/reftable/iter.c @@ -25,18 +25,23 @@ int iterator_next(struct reftable_iterator *it, struct reftable_record *rec) return it->ops->next(it->iter_arg, rec); } -static int empty_iterator_seek(void *arg UNUSED, struct reftable_record *want UNUSED) +static int empty_iterator_seek(void *arg, struct reftable_record *want) { + REFTABLE_UNUSED(arg); + REFTABLE_UNUSED(want); return 0; } -static int empty_iterator_next(void *arg UNUSED, struct reftable_record *rec UNUSED) +static int empty_iterator_next(void *arg, struct reftable_record *rec) { + REFTABLE_UNUSED(arg); + REFTABLE_UNUSED(rec); return 1; } -static void empty_iterator_close(void *arg UNUSED) +static void empty_iterator_close(void *arg) { + REFTABLE_UNUSED(arg); } static struct reftable_iterator_vtable empty_vtable = { @@ -143,9 +148,11 @@ static int indexed_table_ref_iter_next_block(struct indexed_table_ref_iter *it) return 0; } -static int indexed_table_ref_iter_seek(void *p UNUSED, - struct reftable_record *want UNUSED) +static int indexed_table_ref_iter_seek(void *p, + struct reftable_record *want) { + REFTABLE_UNUSED(p); + REFTABLE_UNUSED(want); return REFTABLE_API_ERROR; } diff --git a/reftable/record.c b/reftable/record.c index d86cd65bb4..46093ef987 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -490,11 +490,13 @@ static void reftable_obj_record_release(void *rec) } static int reftable_obj_record_copy_from(void *rec, const void *src_rec, - uint32_t hash_size UNUSED) + uint32_t hash_size) { struct reftable_obj_record *obj = rec; const struct reftable_obj_record *src = src_rec; + REFTABLE_UNUSED(hash_size); + reftable_obj_record_release(obj); REFTABLE_ALLOC_ARRAY(obj->hash_prefix, src->hash_prefix_len); @@ -523,13 +525,16 @@ static uint8_t reftable_obj_record_val_type(const void *rec) } static int reftable_obj_record_encode(const void *rec, struct string_view s, - uint32_t hash_size UNUSED) + uint32_t hash_size) { const struct reftable_obj_record *r = rec; struct string_view start = s; int i = 0; int n = 0; uint64_t last = 0; + + REFTABLE_UNUSED(hash_size); + if (r->offset_len == 0 || r->offset_len >= 8) { n = put_var_int(&s, r->offset_len); if (n < 0) { @@ -558,8 +563,8 @@ static int reftable_obj_record_encode(const void *rec, struct string_view s, static int reftable_obj_record_decode(void *rec, struct reftable_buf key, uint8_t val_type, struct string_view in, - uint32_t hash_size UNUSED, - struct reftable_buf *scratch UNUSED) + uint32_t hash_size, + struct reftable_buf *scratch) { struct string_view start = in; struct reftable_obj_record *r = rec; @@ -567,6 +572,9 @@ static int reftable_obj_record_decode(void *rec, struct reftable_buf key, int n = 0; uint64_t last; + REFTABLE_UNUSED(hash_size); + REFTABLE_UNUSED(scratch); + reftable_obj_record_release(r); REFTABLE_ALLOC_ARRAY(r->hash_prefix, key.len); @@ -613,17 +621,20 @@ static int reftable_obj_record_decode(void *rec, struct reftable_buf key, return start.len - in.len; } -static int not_a_deletion(const void *p UNUSED) +static int not_a_deletion(const void *p) { + REFTABLE_UNUSED(p); return 0; } static int reftable_obj_record_equal_void(const void *a, const void *b, - uint32_t hash_size UNUSED) + uint32_t hash_size) { struct reftable_obj_record *ra = (struct reftable_obj_record *) a; struct reftable_obj_record *rb = (struct reftable_obj_record *) b; + REFTABLE_UNUSED(hash_size); + if (ra->hash_prefix_len != rb->hash_prefix_len || ra->offset_len != rb->offset_len) return 0; @@ -1049,12 +1060,14 @@ static int reftable_index_record_key(const void *r, struct reftable_buf *dest) } static int reftable_index_record_copy_from(void *rec, const void *src_rec, - uint32_t hash_size UNUSED) + uint32_t hash_size) { struct reftable_index_record *dst = rec; const struct reftable_index_record *src = src_rec; int err; + REFTABLE_UNUSED(hash_size); + reftable_buf_reset(&dst->last_key); err = reftable_buf_add(&dst->last_key, src->last_key.buf, src->last_key.len); if (err < 0) @@ -1070,19 +1083,23 @@ static void reftable_index_record_release(void *rec) reftable_buf_release(&idx->last_key); } -static uint8_t reftable_index_record_val_type(const void *rec UNUSED) +static uint8_t reftable_index_record_val_type(const void *rec) { + REFTABLE_UNUSED(rec); return 0; } static int reftable_index_record_encode(const void *rec, struct string_view out, - uint32_t hash_size UNUSED) + uint32_t hash_size) { const struct reftable_index_record *r = (const struct reftable_index_record *)rec; struct string_view start = out; + int n; - int n = put_var_int(&out, r->offset); + REFTABLE_UNUSED(hash_size); + + n = put_var_int(&out, r->offset); if (n < 0) return n; @@ -1092,15 +1109,19 @@ static int reftable_index_record_encode(const void *rec, struct string_view out, } static int reftable_index_record_decode(void *rec, struct reftable_buf key, - uint8_t val_type UNUSED, + uint8_t val_type, struct string_view in, - uint32_t hash_size UNUSED, - struct reftable_buf *scratch UNUSED) + uint32_t hash_size, + struct reftable_buf *scratch) { struct string_view start = in; struct reftable_index_record *r = rec; int err, n = 0; + REFTABLE_UNUSED(val_type); + REFTABLE_UNUSED(hash_size); + REFTABLE_UNUSED(scratch); + reftable_buf_reset(&r->last_key); err = reftable_buf_add(&r->last_key, key.buf, key.len); if (err < 0) @@ -1115,11 +1136,13 @@ static int reftable_index_record_decode(void *rec, struct reftable_buf key, } static int reftable_index_record_equal(const void *a, const void *b, - uint32_t hash_size UNUSED) + uint32_t hash_size) { struct reftable_index_record *ia = (struct reftable_index_record *) a; struct reftable_index_record *ib = (struct reftable_index_record *) b; + REFTABLE_UNUSED(hash_size); + return ia->offset == ib->offset && !reftable_buf_cmp(&ia->last_key, &ib->last_key); } diff --git a/reftable/writer.c b/reftable/writer.c index 5961698311..0040a1b1c4 100644 --- a/reftable/writer.c +++ b/reftable/writer.c @@ -636,10 +636,12 @@ static void write_object_record(void *void_arg, void *key) done:; } -static void object_record_free(void *void_arg UNUSED, void *key) +static void object_record_free(void *void_arg, void *key) { struct obj_index_tree_node *entry = key; + REFTABLE_UNUSED(void_arg); + REFTABLE_FREE_AND_NULL(entry->offsets); reftable_buf_release(&entry->hash); reftable_free(entry); From patchwork Tue Jan 28 08:28:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952248 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FEFC1F5601 for ; Tue, 28 Jan 2025 08:28:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052912; cv=none; b=EFIjOr2oVafS9vET4Fox/o2QxhGvWNWwykLFnkmRhz/5lU23iWNBRcibuIXVks2IE72KWuhDPHZiIzZWecUBU9L8DUm6r7jtDtLKsLwtAcNAKrt5pK6G/+Xx8UxtOJEiC2r6SOtQ4smk6f36bJ7JFVfn6fQ0FlULzY+/1txc3yM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052912; c=relaxed/simple; bh=hMQudkP5PvPM3amYis0O62zHHl/xgIPtUsOVl2e/Fq8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qUxAq1S5WqBthj+grYQsH4DYDATIJ1Izxdsyr9/Eb84fCeau6H5qkRbsASGwtAY3nawwpOqGSvgq9TZIXxBcmDU+5hwo+Y0D7BYh7zXXD2w/N0l03SlBpSrW3r3hqQIrQbEx3/zxrDDoajDxJQdXIbS0b+CeS86rXdJNewthSsA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=pYOhHxoI; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=nCR+fmVQ; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="pYOhHxoI"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="nCR+fmVQ" Received: from phl-compute-01.internal (phl-compute-01.phl.internal [10.202.2.41]) by mailfout.stl.internal (Postfix) with ESMTP id 2C8B311401CF; Tue, 28 Jan 2025 03:28:29 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-01.internal (MEProxy); Tue, 28 Jan 2025 03:28:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052909; x=1738139309; bh=oeX5NsOVng39ZWoO7fVGs4ulJzBxgaUCVro90lPiDfo=; b= pYOhHxoIYaRFSnlU7JjlmT4gFWImsiY41a71GmBq8GSq0DUJLZLehbgy3TANHrHh XLYbYaIKznp4gilwfQ6Qb48QSQWszblyN2LznYZR7fGF071896QkuZ+dEUtYhxvB ozu1tx7Ez6ZjPLtb0kkzTEv4C1D+CyqkPhEJ4YYlEWG52u0lr+ywfs9HoxFC9O9Z QOXLGNHaYApbovKzaUoiV30j1P9FglyOlqR5TTK9erEbd/x9eyLqWBx4ToHqzQ1c VpiSRbHPLmUJWtx7CsS9eqEB/naqMpq7NesBEvrnG0qEcCwFHFoHG8nZowGeyVnU Bee5Uy1XnNbtOr5Fkzk90Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052909; x= 1738139309; bh=oeX5NsOVng39ZWoO7fVGs4ulJzBxgaUCVro90lPiDfo=; b=n CR+fmVQfG6Uvf02phyZI4rK/VNdUtwyYsAmZelraNKa9hy86HjPRFyuFJNpkTXVd XdYSBtbevU3NT6ZEz6cZzkVe/6v9FarptW23wiMnJx1OKxvVQHZgRNSrhtXW9ABL 6W7l2YCiZBBgsY3luzbskB8ICYrnuzg/cghFNHaoiw7nAzSKMqS2oFh1Had+kkBQ oPS2lac096Tekq3RBLiclX0obZhzul8+pfX8jqpssLOhyDjlkPALq/8TEjxwWf4z sRHDIFdNqgPOG9m1IL593SzQ8nHB+xh+NhEDsOz73UBxWIOyIs1PoYM1MnBwaMPT M88Q9pmo9IQMe6X1diDxg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopehj lhhtohgslhgvrhesghhmrghilhdrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:27 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 17529e8f (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:27 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:16 +0100 Subject: [PATCH v2 15/20] compat: consistently resolve headers via project root Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-15-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 The way we include headers in the "compat/" directory is inconsistent: - Sometimes we use includes relative to the current file. - Sometimes we use includes relative to the project root directory, which is being added via a `-I` compiler switch. - On Windows we also use includes relative to "compat/", which is being added via another platform-specific `-I` compiler switch in "compat.mak.uname". This makes it very confusing to figure out which specific file is being included right now and from what layer that file comes. Stop adding "compat/" to the Windows-specific include directories and adapt all includes in "compat/" to be relative to the projet's root directory. Despite being more consistent, it also makes it way easier to spot where an include comes from. This change also prepares for subsequent commits where we split up both "compat/mingw.h" and "compat/msvc.h". Signed-off-by: Patrick Steinhardt --- compat/access.c | 3 ++- compat/basename.c | 4 ++-- compat/fileno.c | 2 +- compat/fopen.c | 2 +- compat/fsmonitor/fsm-health-darwin.c | 2 +- compat/fsmonitor/fsm-health-win32.c | 2 +- compat/fsmonitor/fsm-listen-darwin.c | 4 ++-- compat/fsmonitor/fsm-listen-win32.c | 2 +- compat/inet_ntop.c | 2 +- compat/inet_pton.c | 2 +- compat/memmem.c | 2 +- compat/mingw.c | 24 ++++++++++++------------ compat/mkdir.c | 2 +- compat/mkdtemp.c | 2 +- compat/mmap.c | 2 +- compat/msvc.c | 8 ++++---- compat/nonblock.c | 4 ++-- compat/obstack.c | 2 +- compat/pread.c | 4 ++-- compat/precompose_utf8.c | 2 +- compat/qsort_s.c | 2 +- compat/regcomp_enhanced.c | 2 +- compat/setenv.c | 2 +- compat/snprintf.c | 2 +- compat/strcasestr.c | 2 +- compat/strdup.c | 2 +- compat/strlcpy.c | 2 +- compat/strtoimax.c | 2 +- compat/strtoumax.c | 2 +- compat/unsetenv.c | 2 +- compat/win32/dirent.c | 2 +- compat/win32/flush.c | 2 +- compat/win32/path-utils.c | 4 ++-- compat/win32/pthread.c | 4 ++-- compat/win32/syslog.c | 2 +- compat/win32/trace2_win32_process_info.c | 10 +++++----- compat/win32mmap.c | 2 +- compat/winansi.c | 6 +++--- config.mak.uname | 4 ++-- 39 files changed, 67 insertions(+), 66 deletions(-) diff --git a/compat/access.c b/compat/access.c index 19fda3e877..918f51a08b 100644 --- a/compat/access.c +++ b/compat/access.c @@ -1,5 +1,6 @@ #define COMPAT_CODE_ACCESS -#include "../git-compat-util.h" + +#include "git-compat-util.h" /* Do the same thing access(2) does, but use the effective uid, * and don't make the mistake of telling root that any file is diff --git a/compat/basename.c b/compat/basename.c index c33579ef61..2f59c5475b 100644 --- a/compat/basename.c +++ b/compat/basename.c @@ -1,5 +1,5 @@ -#include "../git-compat-util.h" -#include "../strbuf.h" +#include "git-compat-util.h" +#include "strbuf.h" /* Adapted from libiberty's basename.c. */ char *gitbasename (char *path) diff --git a/compat/fileno.c b/compat/fileno.c index 8e80ef335d..977d63bf62 100644 --- a/compat/fileno.c +++ b/compat/fileno.c @@ -1,5 +1,5 @@ #define COMPAT_CODE_FILENO -#include "../git-compat-util.h" +#include "git-compat-util.h" int git_fileno(FILE *stream) { diff --git a/compat/fopen.c b/compat/fopen.c index 107b3e8182..4af1f14996 100644 --- a/compat/fopen.c +++ b/compat/fopen.c @@ -9,7 +9,7 @@ * fopen after including git-compat-util.h is inadequate in this case. */ #define SUPPRESS_FOPEN_REDEFINITION -#include "../git-compat-util.h" +#include "git-compat-util.h" FILE *git_fopen(const char *path, const char *mode) { diff --git a/compat/fsmonitor/fsm-health-darwin.c b/compat/fsmonitor/fsm-health-darwin.c index c2afcbe6c8..68c9fd7363 100644 --- a/compat/fsmonitor/fsm-health-darwin.c +++ b/compat/fsmonitor/fsm-health-darwin.c @@ -1,7 +1,7 @@ #include "git-compat-util.h" +#include "compat/fsmonitor/fsm-health.h" #include "config.h" #include "fsmonitor-ll.h" -#include "fsm-health.h" #include "fsmonitor--daemon.h" int fsm_health__ctor(struct fsmonitor_daemon_state *state UNUSED) diff --git a/compat/fsmonitor/fsm-health-win32.c b/compat/fsmonitor/fsm-health-win32.c index 2aa8c219ac..16e073383b 100644 --- a/compat/fsmonitor/fsm-health-win32.c +++ b/compat/fsmonitor/fsm-health-win32.c @@ -1,7 +1,7 @@ #include "git-compat-util.h" +#include "compat/fsmonitor/fsm-health.h" #include "config.h" #include "fsmonitor-ll.h" -#include "fsm-health.h" #include "fsmonitor--daemon.h" #include "gettext.h" #include "simple-ipc.h" diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c index 43c3a915a0..b9414da0d1 100644 --- a/compat/fsmonitor/fsm-listen-darwin.c +++ b/compat/fsmonitor/fsm-listen-darwin.c @@ -1,6 +1,6 @@ #ifndef __clang__ #include -#include "fsm-darwin-gcc.h" +#include "compat/fsmonitor/fsm-darwin-gcc.h" #else #include #include @@ -24,8 +24,8 @@ #endif #include "git-compat-util.h" +#include "compat/fsmonitor/fsm-listen.h" #include "fsmonitor-ll.h" -#include "fsm-listen.h" #include "fsmonitor--daemon.h" #include "fsmonitor-path-utils.h" #include "gettext.h" diff --git a/compat/fsmonitor/fsm-listen-win32.c b/compat/fsmonitor/fsm-listen-win32.c index 9a6efc9bea..3fb5710e21 100644 --- a/compat/fsmonitor/fsm-listen-win32.c +++ b/compat/fsmonitor/fsm-listen-win32.c @@ -1,7 +1,7 @@ #include "git-compat-util.h" +#include "compat/fsmonitor/fsm-listen.h" #include "config.h" #include "fsmonitor-ll.h" -#include "fsm-listen.h" #include "fsmonitor--daemon.h" #include "gettext.h" #include "simple-ipc.h" diff --git a/compat/inet_ntop.c b/compat/inet_ntop.c index 68307262be..3bac8377cc 100644 --- a/compat/inet_ntop.c +++ b/compat/inet_ntop.c @@ -15,7 +15,7 @@ * SOFTWARE. */ -#include "../git-compat-util.h" +#include "git-compat-util.h" #ifndef NS_INADDRSZ #define NS_INADDRSZ 4 diff --git a/compat/inet_pton.c b/compat/inet_pton.c index 2b9a0a4e22..60935a1c83 100644 --- a/compat/inet_pton.c +++ b/compat/inet_pton.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "../git-compat-util.h" +#include "git-compat-util.h" #ifndef NS_INT16SZ #define NS_INT16SZ 2 diff --git a/compat/memmem.c b/compat/memmem.c index 56bcb4277f..2df3e7b7b9 100644 --- a/compat/memmem.c +++ b/compat/memmem.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" void *gitmemmem(const void *haystack, size_t haystack_len, const void *needle, size_t needle_len) diff --git a/compat/mingw.c b/compat/mingw.c index 1d5b211b54..5b0593c59d 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1,22 +1,22 @@ #define USE_THE_REPOSITORY_VARIABLE #define DISABLE_SIGN_COMPARE_WARNINGS -#include "../git-compat-util.h" -#include "win32.h" +#include "git-compat-util.h" +#include "compat/win32.h" #include #include #include #include -#include "../strbuf.h" -#include "../run-command.h" -#include "../abspath.h" -#include "../alloc.h" -#include "win32/lazyload.h" -#include "../config.h" -#include "../environment.h" -#include "../trace2.h" -#include "../symlinks.h" -#include "../wrapper.h" +#include "strbuf.h" +#include "run-command.h" +#include "abspath.h" +#include "alloc.h" +#include "compat/win32/lazyload.h" +#include "config.h" +#include "environment.h" +#include "trace2.h" +#include "symlinks.h" +#include "wrapper.h" #include "dir.h" #include "gettext.h" #define SECURITY_WIN32 diff --git a/compat/mkdir.c b/compat/mkdir.c index 02aea3b32e..8bd7c9a927 100644 --- a/compat/mkdir.c +++ b/compat/mkdir.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" #undef mkdir /* for platforms that can't deal with a trailing '/' */ diff --git a/compat/mkdtemp.c b/compat/mkdtemp.c index 1136119592..4349e15eee 100644 --- a/compat/mkdtemp.c +++ b/compat/mkdtemp.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" char *gitmkdtemp(char *template) { diff --git a/compat/mmap.c b/compat/mmap.c index 2fe1c7732e..0a50adc9b9 100644 --- a/compat/mmap.c +++ b/compat/mmap.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { diff --git a/compat/msvc.c b/compat/msvc.c index 71843d7eef..5aacf3af19 100644 --- a/compat/msvc.c +++ b/compat/msvc.c @@ -1,6 +1,6 @@ -#include "../git-compat-util.h" -#include "win32.h" +#include "git-compat-util.h" +#include "compat/win32.h" #include -#include "../strbuf.h" +#include "strbuf.h" -#include "mingw.c" +#include "compat/mingw.c" diff --git a/compat/nonblock.c b/compat/nonblock.c index 5b51195c32..99ea76a7a4 100644 --- a/compat/nonblock.c +++ b/compat/nonblock.c @@ -1,5 +1,5 @@ #include "git-compat-util.h" -#include "nonblock.h" +#include "compat/nonblock.h" #ifdef O_NONBLOCK @@ -14,7 +14,7 @@ int enable_pipe_nonblock(int fd) #elif defined(GIT_WINDOWS_NATIVE) -#include "win32.h" +#include "compat/win32.h" int enable_pipe_nonblock(int fd) { diff --git a/compat/obstack.c b/compat/obstack.c index 27cd5c1ea1..baab07aca4 100644 --- a/compat/obstack.c +++ b/compat/obstack.c @@ -19,7 +19,7 @@ #include "git-compat-util.h" #include -#include "obstack.h" +#include "compat/obstack.h" /* NOTE BEFORE MODIFYING THIS FILE: This version number must be incremented whenever callers compiled using an old obstack.h can no diff --git a/compat/pread.c b/compat/pread.c index 484e6d4c71..82161b5a2a 100644 --- a/compat/pread.c +++ b/compat/pread.c @@ -1,5 +1,5 @@ -#include "../git-compat-util.h" -#include "../wrapper.h" +#include "git-compat-util.h" +#include "wrapper.h" ssize_t git_pread(int fd, void *buf, size_t count, off_t offset) { diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c index f7cc7b3be5..994a2f1303 100644 --- a/compat/precompose_utf8.c +++ b/compat/precompose_utf8.c @@ -7,13 +7,13 @@ #define USE_THE_REPOSITORY_VARIABLE #include "git-compat-util.h" +#include "compat/precompose_utf8.h" #include "config.h" #include "environment.h" #include "gettext.h" #include "path.h" #include "strbuf.h" #include "utf8.h" -#include "precompose_utf8.h" typedef char *iconv_ibp; static const char *repo_encoding = "UTF-8"; diff --git a/compat/qsort_s.c b/compat/qsort_s.c index 0f7ff30f5f..66cd6e096d 100644 --- a/compat/qsort_s.c +++ b/compat/qsort_s.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" /* * A merge sort implementation, simplified from the qsort implementation diff --git a/compat/regcomp_enhanced.c b/compat/regcomp_enhanced.c index 84193ce53b..693b63c2c4 100644 --- a/compat/regcomp_enhanced.c +++ b/compat/regcomp_enhanced.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" #undef regcomp int git_regcomp(regex_t *preg, const char *pattern, int cflags) diff --git a/compat/setenv.c b/compat/setenv.c index 7849f258d2..c49df82534 100644 --- a/compat/setenv.c +++ b/compat/setenv.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" int gitsetenv(const char *name, const char *value, int replace) { diff --git a/compat/snprintf.c b/compat/snprintf.c index 0b11688537..91a63cf3f7 100644 --- a/compat/snprintf.c +++ b/compat/snprintf.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" /* * The size parameter specifies the available space, i.e. includes diff --git a/compat/strcasestr.c b/compat/strcasestr.c index 26896deca6..d66609361b 100644 --- a/compat/strcasestr.c +++ b/compat/strcasestr.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" char *gitstrcasestr(const char *haystack, const char *needle) { diff --git a/compat/strdup.c b/compat/strdup.c index f3fb978eb3..9ef99f88f2 100644 --- a/compat/strdup.c +++ b/compat/strdup.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" char *gitstrdup(const char *s1) { diff --git a/compat/strlcpy.c b/compat/strlcpy.c index 4024c36030..780b39ff82 100644 --- a/compat/strlcpy.c +++ b/compat/strlcpy.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" size_t gitstrlcpy(char *dest, const char *src, size_t size) { diff --git a/compat/strtoimax.c b/compat/strtoimax.c index ac09ed89e7..c9ed79f0d1 100644 --- a/compat/strtoimax.c +++ b/compat/strtoimax.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" intmax_t gitstrtoimax (const char *nptr, char **endptr, int base) { diff --git a/compat/strtoumax.c b/compat/strtoumax.c index 5541353a77..50fe26d746 100644 --- a/compat/strtoumax.c +++ b/compat/strtoumax.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" uintmax_t gitstrtoumax (const char *nptr, char **endptr, int base) { diff --git a/compat/unsetenv.c b/compat/unsetenv.c index b9d34af613..d96e0d7bcc 100644 --- a/compat/unsetenv.c +++ b/compat/unsetenv.c @@ -1,4 +1,4 @@ -#include "../git-compat-util.h" +#include "git-compat-util.h" int gitunsetenv(const char *name) { diff --git a/compat/win32/dirent.c b/compat/win32/dirent.c index 52420ec7d4..362622746d 100644 --- a/compat/win32/dirent.c +++ b/compat/win32/dirent.c @@ -1,4 +1,4 @@ -#include "../../git-compat-util.h" +#include "git-compat-util.h" struct DIR { struct dirent dd_dir; /* includes d_type */ diff --git a/compat/win32/flush.c b/compat/win32/flush.c index 291f90ea94..bcad557eb4 100644 --- a/compat/win32/flush.c +++ b/compat/win32/flush.c @@ -1,6 +1,6 @@ #include "git-compat-util.h" #include -#include "lazyload.h" +#include "compat/win32/lazyload.h" int win32_fsync_no_flush(int fd) { diff --git a/compat/win32/path-utils.c b/compat/win32/path-utils.c index 966ef779b9..20e9a69f56 100644 --- a/compat/win32/path-utils.c +++ b/compat/win32/path-utils.c @@ -1,7 +1,7 @@ #define USE_THE_REPOSITORY_VARIABLE -#include "../../git-compat-util.h" -#include "../../environment.h" +#include "git-compat-util.h" +#include "environment.h" int win32_has_dos_drive_prefix(const char *path) { diff --git a/compat/win32/pthread.c b/compat/win32/pthread.c index 58980a529c..86199d67ba 100644 --- a/compat/win32/pthread.c +++ b/compat/win32/pthread.c @@ -7,8 +7,8 @@ * no need for double-checking. */ -#include "../../git-compat-util.h" -#include "pthread.h" +#include "git-compat-util.h" +#include "compat/win32/pthread.h" #include #include diff --git a/compat/win32/syslog.c b/compat/win32/syslog.c index 4e4794743a..587fb99ba9 100644 --- a/compat/win32/syslog.c +++ b/compat/win32/syslog.c @@ -1,4 +1,4 @@ -#include "../../git-compat-util.h" +#include "git-compat-util.h" static HANDLE ms_eventlog; diff --git a/compat/win32/trace2_win32_process_info.c b/compat/win32/trace2_win32_process_info.c index f147da706a..55e482f100 100644 --- a/compat/win32/trace2_win32_process_info.c +++ b/compat/win32/trace2_win32_process_info.c @@ -1,10 +1,10 @@ #define USE_THE_REPOSITORY_VARIABLE -#include "../../git-compat-util.h" -#include "../../json-writer.h" -#include "../../repository.h" -#include "../../trace2.h" -#include "lazyload.h" +#include "git-compat-util.h" +#include "compat/win32/lazyload.h" +#include "json-writer.h" +#include "repository.h" +#include "trace2.h" #include #include diff --git a/compat/win32mmap.c b/compat/win32mmap.c index e951934316..aff1768acb 100644 --- a/compat/win32mmap.c +++ b/compat/win32mmap.c @@ -1,6 +1,6 @@ #define DISABLE_SIGN_COMPARE_WARNINGS -#include "../git-compat-util.h" +#include "git-compat-util.h" void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { diff --git a/compat/winansi.c b/compat/winansi.c index ac2ffb7869..143685e5ab 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -6,11 +6,11 @@ #define DISABLE_SIGN_COMPARE_WARNINGS -#include "../git-compat-util.h" +#include "git-compat-util.h" #include #include -#include "win32.h" -#include "win32/lazyload.h" +#include "compat/win32.h" +#include "compat/win32/lazyload.h" static int fd_is_interactive[3] = { 0, 0, 0 }; #define FD_CONSOLE 0x1 diff --git a/config.mak.uname b/config.mak.uname index b12d4e168a..cd9535a65c 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -501,7 +501,7 @@ endif compat/win32/pthread.o compat/win32/syslog.o \ compat/win32/trace2_win32_process_info.o \ compat/win32/dirent.o - COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\" + COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\" BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE # invalidcontinue.obj allows Git's source code to close the same file # handle twice, or to access the osfhandle of an already-closed stdout @@ -692,7 +692,7 @@ ifeq ($(uname_S),MINGW) HAVE_PLATFORM_PROCINFO = YesPlease CSPRNG_METHOD = rtlgenrandom BASIC_LDFLAGS += -municode - COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32 + COMPAT_CFLAGS += -DNOGDI -Icompat/win32 COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\" COMPAT_OBJS += compat/mingw.o compat/winansi.o \ compat/win32/trace2_win32_process_info.o \ From patchwork Tue Jan 28 08:28:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952249 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7EDDE1F561B for ; Tue, 28 Jan 2025 08:28:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052913; cv=none; b=hKnI8/uD6GVS8PGgm3Y8pH8B6i3vi6WnpPxob+e74GZmtC39ZvnA37aJUWgvpPjcpGhiX+ZjnoHhixSfFgiZ4k5e5afxL/1y1kW3niIHLwe88Y7pGgbjL7hgwdDrHp8CyYKxpcMBlaVzB6yWnwDYuDsXzBQh0xh5PejaXMnI8+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052913; c=relaxed/simple; bh=70Mp+joP5kQLNuCBWXfvVCD+d3H3NZpoiLuhM9do/iA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AT1fnDUAyWkcHKNrWrunKE84NtuFvczjcgD+yCcSHm8P66fufvYvT30unykti17HrWnNZiVf/sKG8uSWH0yD4P5URgKtpLsFcovZPMZjBxC1SaoJPRqF/dvJMnIYXJ0VHhMRfs34iJgUH6soaFAqh108zl/dp5jRKbsIby8BGKI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=Sl/8XJP2; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=rDrcIafX; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="Sl/8XJP2"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="rDrcIafX" Received: from phl-compute-05.internal (phl-compute-05.phl.internal [10.202.2.45]) by mailfhigh.stl.internal (Postfix) with ESMTP id BA0CA254024D; Tue, 28 Jan 2025 03:28:30 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-05.internal (MEProxy); Tue, 28 Jan 2025 03:28:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052910; x=1738139310; bh=f8s5hyTbcDNFMR3NRN1dgbiVGyS3L2MppUnT97gP8is=; b= Sl/8XJP23G+IMyW3pKN19JH2Xe80C0Zh10v9l5GaBH8QN8czuAq24UJdnNTw2vB3 RPrgOV383UHN6CdWdM37U3OS7BCHjYlQZ7NgjkYSxhnksHDwFMpdtoMtjPv7cFQQ wguSgJUgRzoHHYTtMAu5eQZf5NDEQg48WZf9Q8sR3baojD/0B+Nr8iZg4nJXJctV YRAvnTWTFjc9P/kUo4oH/zKq5ttDzJoTdRDckeRZY8gQ+cAZDfO3YP6m7cx5A3xr 4qHaAm/A4v99RvPE4nt2U4QMSflwfC5ilDNeqok7e11VR3/JTF+ZIsV87sNa9bnl pFhizzoOkt8jqeprRxZJJw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052910; x= 1738139310; bh=f8s5hyTbcDNFMR3NRN1dgbiVGyS3L2MppUnT97gP8is=; b=r DrcIafXCd9aVDb8dEWe5QDQ5yiihK8kEBR+WpIhnVvLmt4wRb14i4qhVn/NfemUb 0MvsxOIXfos1RCLBpUBivNiQp+sswd2o2sSxjqkHp1POKQx7MzrP9gzswvV1N7zr UHGbt/7VARgi9hRrBH5tCWXwPxNPAwTy1WwKrP41hdUL1zThi89VxwHc/bpWi7mw dWwprjVBjSTfIOUX6DWobbcDVdcminT7NNTSg1hYDWvAESVcbaeOHy+i2M9IBd6K i+UQE5PrWeumI9OFmzmg1DBssCs77tyosFTc4bKBgpwU5AVeq6JSqPRpLHE3rl2e Lk6Vfnwt+oWcsJvAcn6sg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeegnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtsehvghgvrhdrkhgvrhhnvghlrdhorh hgpdhrtghpthhtohepjhhlthhosghlvghrsehgmhgrihhlrdgtohhmpdhrtghpthhtohep ghhithhsthgvrhesphhosghogidrtghomhdprhgtphhtthhopegvthhhohhmshhonhesvg gufigrrhguthhhohhmshhonhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:29 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 30de9f10 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:28 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:17 +0100 Subject: [PATCH v2 16/20] compat/mingw: split out POSIX-related bits Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-16-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Split out the POSIX-related bits from "compat/mingw.h". This is in preparation for splitting up "git-compat-utils.h" into a header that provides POSIX-compatibility and a header that provides common wrappers used by the Git project. Signed-off-by: Patrick Steinhardt --- compat/{mingw.c => mingw/compat-util.c} | 0 compat/mingw/compat-util.h | 220 ++++++++++++++++++++++++++++++++ compat/{mingw.h => mingw/posix.h} | 216 +------------------------------ compat/msvc.c | 2 +- compat/msvc.h | 2 +- config.mak.uname | 4 +- contrib/buildsystems/CMakeLists.txt | 2 +- git-compat-util.h | 4 +- meson.build | 6 +- 9 files changed, 234 insertions(+), 222 deletions(-) diff --git a/compat/mingw.c b/compat/mingw/compat-util.c similarity index 100% rename from compat/mingw.c rename to compat/mingw/compat-util.c diff --git a/compat/mingw/compat-util.h b/compat/mingw/compat-util.h new file mode 100644 index 0000000000..b433762526 --- /dev/null +++ b/compat/mingw/compat-util.h @@ -0,0 +1,220 @@ +#ifndef COMPAT_MINGW_COMPAT_UTIL_H +#define COMPAT_MINGW_COMPAT_UTIL_H + +#include "compat/mingw/posix.h" + +struct config_context; +int mingw_core_config(const char *var, const char *value, + const struct config_context *ctx, void *cb); +#define platform_core_config mingw_core_config + +#ifndef NO_OPENSSL +#include +static inline int mingw_SSL_set_fd(SSL *ssl, int fd) +{ + return SSL_set_fd(ssl, _get_osfhandle(fd)); +} +#define SSL_set_fd mingw_SSL_set_fd + +static inline int mingw_SSL_set_rfd(SSL *ssl, int fd) +{ + return SSL_set_rfd(ssl, _get_osfhandle(fd)); +} +#define SSL_set_rfd mingw_SSL_set_rfd + +static inline int mingw_SSL_set_wfd(SSL *ssl, int fd) +{ + return SSL_set_wfd(ssl, _get_osfhandle(fd)); +} +#define SSL_set_wfd mingw_SSL_set_wfd +#endif + +/* + * git specific compatibility + */ + +static inline void convert_slashes(char *path) +{ + for (; *path; path++) + if (*path == '\\') + *path = '/'; +} +#define PATH_SEP ';' +char *mingw_query_user_email(void); +#define query_user_email mingw_query_user_email + +/** + * Verifies that the specified path is owned by the user running the + * current process. + */ +int is_path_owned_by_current_sid(const char *path, struct strbuf *report); +#define is_path_owned_by_current_user is_path_owned_by_current_sid + +/** + * Verifies that the given path is a valid one on Windows. + * + * In particular, path segments are disallowed which + * + * - end in a period or a space (except the special directories `.` and `..`). + * + * - contain any of the reserved characters, e.g. `:`, `;`, `*`, etc + * + * - correspond to reserved names (such as `AUX`, `PRN`, etc) + * + * The `allow_literal_nul` parameter controls whether the path `NUL` should + * be considered valid (this makes sense e.g. before opening files, as it is + * perfectly legitimate to open `NUL` on Windows, just as it is to open + * `/dev/null` on Unix/Linux). + * + * Returns 1 upon success, otherwise 0. + */ +int is_valid_win32_path(const char *path, int allow_literal_nul); +#define is_valid_path(path) is_valid_win32_path(path, 0) + +/** + * Converts UTF-8 encoded string to UTF-16LE. + * + * To support repositories with legacy-encoded file names, invalid UTF-8 bytes + * 0xa0 - 0xff are converted to corresponding printable Unicode chars \u00a0 - + * \u00ff, and invalid UTF-8 bytes 0x80 - 0x9f (which would make non-printable + * Unicode) are converted to hex-code. + * + * Lead-bytes not followed by an appropriate number of trail-bytes, over-long + * encodings and 4-byte encodings > \u10ffff are detected as invalid UTF-8. + * + * Maximum space requirement for the target buffer is two wide chars per UTF-8 + * char (((strlen(utf) * 2) + 1) [* sizeof(wchar_t)]). + * + * The maximum space is needed only if the entire input string consists of + * invalid UTF-8 bytes in range 0x80-0x9f, as per the following table: + * + * | | UTF-8 | UTF-16 | + * Code point | UTF-8 sequence | bytes | words | ratio + * --------------+-------------------+-------+--------+------- + * 000000-00007f | 0-7f | 1 | 1 | 1 + * 000080-0007ff | c2-df + 80-bf | 2 | 1 | 0.5 + * 000800-00ffff | e0-ef + 2 * 80-bf | 3 | 1 | 0.33 + * 010000-10ffff | f0-f4 + 3 * 80-bf | 4 | 2 (a) | 0.5 + * invalid | 80-9f | 1 | 2 (b) | 2 + * invalid | a0-ff | 1 | 1 | 1 + * + * (a) encoded as UTF-16 surrogate pair + * (b) encoded as two hex digits + * + * Note that, while the UTF-8 encoding scheme can be extended to 5-byte, 6-byte + * or even indefinite-byte sequences, the largest valid code point \u10ffff + * encodes as only 4 UTF-8 bytes. + * + * Parameters: + * wcs: wide char target buffer + * utf: string to convert + * wcslen: size of target buffer (in wchar_t's) + * utflen: size of string to convert, or -1 if 0-terminated + * + * Returns: + * length of converted string (_wcslen(wcs)), or -1 on failure + * + * Errors: + * EINVAL: one of the input parameters is invalid (e.g. NULL) + * ERANGE: the output buffer is too small + */ +int xutftowcsn(wchar_t *wcs, const char *utf, size_t wcslen, int utflen); + +/** + * Simplified variant of xutftowcsn, assumes input string is \0-terminated. + */ +static inline int xutftowcs(wchar_t *wcs, const char *utf, size_t wcslen) +{ + return xutftowcsn(wcs, utf, wcslen, -1); +} + +/** + * Simplified file system specific variant of xutftowcsn, assumes output + * buffer size is MAX_PATH wide chars and input string is \0-terminated, + * fails with ENAMETOOLONG if input string is too long. + */ +static inline int xutftowcs_path(wchar_t *wcs, const char *utf) +{ + int result = xutftowcsn(wcs, utf, MAX_PATH, -1); + if (result < 0 && errno == ERANGE) + errno = ENAMETOOLONG; + return result; +} + +/** + * Converts UTF-16LE encoded string to UTF-8. + * + * Maximum space requirement for the target buffer is three UTF-8 chars per + * wide char ((_wcslen(wcs) * 3) + 1). + * + * The maximum space is needed only if the entire input string consists of + * UTF-16 words in range 0x0800-0xd7ff or 0xe000-0xffff (i.e. \u0800-\uffff + * modulo surrogate pairs), as per the following table: + * + * | | UTF-16 | UTF-8 | + * Code point | UTF-16 sequence | words | bytes | ratio + * --------------+-----------------------+--------+-------+------- + * 000000-00007f | 0000-007f | 1 | 1 | 1 + * 000080-0007ff | 0080-07ff | 1 | 2 | 2 + * 000800-00ffff | 0800-d7ff / e000-ffff | 1 | 3 | 3 + * 010000-10ffff | d800-dbff + dc00-dfff | 2 | 4 | 2 + * + * Note that invalid code points > 10ffff cannot be represented in UTF-16. + * + * Parameters: + * utf: target buffer + * wcs: wide string to convert + * utflen: size of target buffer + * + * Returns: + * length of converted string, or -1 on failure + * + * Errors: + * EINVAL: one of the input parameters is invalid (e.g. NULL) + * ERANGE: the output buffer is too small + */ +int xwcstoutf(char *utf, const wchar_t *wcs, size_t utflen); + +/* + * A critical section used in the implementation of the spawn + * functions (mingw_spawnv[p]e()) and waitpid(). Initialised in + * the replacement main() macro below. + */ +extern CRITICAL_SECTION pinfo_cs; + +/* + * Git, like most portable C applications, implements a main() function. On + * Windows, this main() function would receive parameters encoded in the + * current locale, but Git for Windows would prefer UTF-8 encoded parameters. + * + * To make that happen, we still declare main() here, and then declare and + * implement wmain() (which is the Unicode variant of main()) and compile with + * -municode. This wmain() function reencodes the parameters from UTF-16 to + * UTF-8 format, sets up a couple of other things as required on Windows, and + * then hands off to the main() function. + */ +int wmain(int argc, const wchar_t **w_argv); +int main(int argc, const char **argv); + +/* + * For debugging: if a problem occurs, say, in a Git process that is spawned + * from another Git process which in turn is spawned from yet another Git + * process, it can be quite daunting to figure out what is going on. + * + * Call this function to open a new MinTTY (this assumes you are in Git for + * Windows' SDK) with a GDB that attaches to the current process right away. + */ +void open_in_gdb(void); + +/* + * Used by Pthread API implementation for Windows + */ +int err_win_to_posix(DWORD winerr); + +#ifndef NO_UNIX_SOCKETS +int mingw_have_unix_sockets(void); +#undef have_unix_sockets +#define have_unix_sockets mingw_have_unix_sockets +#endif + +#endif /* COMPAT_MINGW_COMPAT_UTIL_H */ diff --git a/compat/mingw.h b/compat/mingw/posix.h similarity index 59% rename from compat/mingw.h rename to compat/mingw/posix.h index ebfb8ba423..8dddfa818d 100644 --- a/compat/mingw.h +++ b/compat/mingw/posix.h @@ -1,3 +1,6 @@ +#ifndef COMPAT_MINGW_POSIX_H +#define COMPAT_MINGW_POSIX_H + #ifdef __MINGW64_VERSION_MAJOR #include #include @@ -11,11 +14,6 @@ typedef _sigset_t sigset_t; #undef _POSIX_THREAD_SAFE_FUNCTIONS #endif -struct config_context; -int mingw_core_config(const char *var, const char *value, - const struct config_context *ctx, void *cb); -#define platform_core_config mingw_core_config - /* * things that are not available in header files */ @@ -180,27 +178,6 @@ int mingw_kill(pid_t pid, int sig); #define locate_in_PATH mingw_locate_in_PATH char *mingw_locate_in_PATH(const char *cmd); -#ifndef NO_OPENSSL -#include -static inline int mingw_SSL_set_fd(SSL *ssl, int fd) -{ - return SSL_set_fd(ssl, _get_osfhandle(fd)); -} -#define SSL_set_fd mingw_SSL_set_fd - -static inline int mingw_SSL_set_rfd(SSL *ssl, int fd) -{ - return SSL_set_rfd(ssl, _get_osfhandle(fd)); -} -#define SSL_set_rfd mingw_SSL_set_rfd - -static inline int mingw_SSL_set_wfd(SSL *ssl, int fd) -{ - return SSL_set_wfd(ssl, _get_osfhandle(fd)); -} -#define SSL_set_wfd mingw_SSL_set_wfd -#endif - /* * implementations of missing functions */ @@ -444,19 +421,6 @@ int winansi_dup2(int oldfd, int newfd); void winansi_init(void); HANDLE winansi_get_osfhandle(int fd); -/* - * git specific compatibility - */ - -static inline void convert_slashes(char *path) -{ - for (; *path; path++) - if (*path == '\\') - *path = '/'; -} -#define PATH_SEP ';' -char *mingw_query_user_email(void); -#define query_user_email mingw_query_user_email #if !defined(__MINGW64_VERSION_MAJOR) && (!defined(_MSC_VER) || _MSC_VER < 1800) #define PRIuMAX "I64u" #define PRId64 "I64d" @@ -464,176 +428,4 @@ char *mingw_query_user_email(void); #include #endif -/** - * Verifies that the specified path is owned by the user running the - * current process. - */ -int is_path_owned_by_current_sid(const char *path, struct strbuf *report); -#define is_path_owned_by_current_user is_path_owned_by_current_sid - -/** - * Verifies that the given path is a valid one on Windows. - * - * In particular, path segments are disallowed which - * - * - end in a period or a space (except the special directories `.` and `..`). - * - * - contain any of the reserved characters, e.g. `:`, `;`, `*`, etc - * - * - correspond to reserved names (such as `AUX`, `PRN`, etc) - * - * The `allow_literal_nul` parameter controls whether the path `NUL` should - * be considered valid (this makes sense e.g. before opening files, as it is - * perfectly legitimate to open `NUL` on Windows, just as it is to open - * `/dev/null` on Unix/Linux). - * - * Returns 1 upon success, otherwise 0. - */ -int is_valid_win32_path(const char *path, int allow_literal_nul); -#define is_valid_path(path) is_valid_win32_path(path, 0) - -/** - * Converts UTF-8 encoded string to UTF-16LE. - * - * To support repositories with legacy-encoded file names, invalid UTF-8 bytes - * 0xa0 - 0xff are converted to corresponding printable Unicode chars \u00a0 - - * \u00ff, and invalid UTF-8 bytes 0x80 - 0x9f (which would make non-printable - * Unicode) are converted to hex-code. - * - * Lead-bytes not followed by an appropriate number of trail-bytes, over-long - * encodings and 4-byte encodings > \u10ffff are detected as invalid UTF-8. - * - * Maximum space requirement for the target buffer is two wide chars per UTF-8 - * char (((strlen(utf) * 2) + 1) [* sizeof(wchar_t)]). - * - * The maximum space is needed only if the entire input string consists of - * invalid UTF-8 bytes in range 0x80-0x9f, as per the following table: - * - * | | UTF-8 | UTF-16 | - * Code point | UTF-8 sequence | bytes | words | ratio - * --------------+-------------------+-------+--------+------- - * 000000-00007f | 0-7f | 1 | 1 | 1 - * 000080-0007ff | c2-df + 80-bf | 2 | 1 | 0.5 - * 000800-00ffff | e0-ef + 2 * 80-bf | 3 | 1 | 0.33 - * 010000-10ffff | f0-f4 + 3 * 80-bf | 4 | 2 (a) | 0.5 - * invalid | 80-9f | 1 | 2 (b) | 2 - * invalid | a0-ff | 1 | 1 | 1 - * - * (a) encoded as UTF-16 surrogate pair - * (b) encoded as two hex digits - * - * Note that, while the UTF-8 encoding scheme can be extended to 5-byte, 6-byte - * or even indefinite-byte sequences, the largest valid code point \u10ffff - * encodes as only 4 UTF-8 bytes. - * - * Parameters: - * wcs: wide char target buffer - * utf: string to convert - * wcslen: size of target buffer (in wchar_t's) - * utflen: size of string to convert, or -1 if 0-terminated - * - * Returns: - * length of converted string (_wcslen(wcs)), or -1 on failure - * - * Errors: - * EINVAL: one of the input parameters is invalid (e.g. NULL) - * ERANGE: the output buffer is too small - */ -int xutftowcsn(wchar_t *wcs, const char *utf, size_t wcslen, int utflen); - -/** - * Simplified variant of xutftowcsn, assumes input string is \0-terminated. - */ -static inline int xutftowcs(wchar_t *wcs, const char *utf, size_t wcslen) -{ - return xutftowcsn(wcs, utf, wcslen, -1); -} - -/** - * Simplified file system specific variant of xutftowcsn, assumes output - * buffer size is MAX_PATH wide chars and input string is \0-terminated, - * fails with ENAMETOOLONG if input string is too long. - */ -static inline int xutftowcs_path(wchar_t *wcs, const char *utf) -{ - int result = xutftowcsn(wcs, utf, MAX_PATH, -1); - if (result < 0 && errno == ERANGE) - errno = ENAMETOOLONG; - return result; -} - -/** - * Converts UTF-16LE encoded string to UTF-8. - * - * Maximum space requirement for the target buffer is three UTF-8 chars per - * wide char ((_wcslen(wcs) * 3) + 1). - * - * The maximum space is needed only if the entire input string consists of - * UTF-16 words in range 0x0800-0xd7ff or 0xe000-0xffff (i.e. \u0800-\uffff - * modulo surrogate pairs), as per the following table: - * - * | | UTF-16 | UTF-8 | - * Code point | UTF-16 sequence | words | bytes | ratio - * --------------+-----------------------+--------+-------+------- - * 000000-00007f | 0000-007f | 1 | 1 | 1 - * 000080-0007ff | 0080-07ff | 1 | 2 | 2 - * 000800-00ffff | 0800-d7ff / e000-ffff | 1 | 3 | 3 - * 010000-10ffff | d800-dbff + dc00-dfff | 2 | 4 | 2 - * - * Note that invalid code points > 10ffff cannot be represented in UTF-16. - * - * Parameters: - * utf: target buffer - * wcs: wide string to convert - * utflen: size of target buffer - * - * Returns: - * length of converted string, or -1 on failure - * - * Errors: - * EINVAL: one of the input parameters is invalid (e.g. NULL) - * ERANGE: the output buffer is too small - */ -int xwcstoutf(char *utf, const wchar_t *wcs, size_t utflen); - -/* - * A critical section used in the implementation of the spawn - * functions (mingw_spawnv[p]e()) and waitpid(). Initialised in - * the replacement main() macro below. - */ -extern CRITICAL_SECTION pinfo_cs; - -/* - * Git, like most portable C applications, implements a main() function. On - * Windows, this main() function would receive parameters encoded in the - * current locale, but Git for Windows would prefer UTF-8 encoded parameters. - * - * To make that happen, we still declare main() here, and then declare and - * implement wmain() (which is the Unicode variant of main()) and compile with - * -municode. This wmain() function reencodes the parameters from UTF-16 to - * UTF-8 format, sets up a couple of other things as required on Windows, and - * then hands off to the main() function. - */ -int wmain(int argc, const wchar_t **w_argv); -int main(int argc, const char **argv); - -/* - * For debugging: if a problem occurs, say, in a Git process that is spawned - * from another Git process which in turn is spawned from yet another Git - * process, it can be quite daunting to figure out what is going on. - * - * Call this function to open a new MinTTY (this assumes you are in Git for - * Windows' SDK) with a GDB that attaches to the current process right away. - */ -void open_in_gdb(void); - -/* - * Used by Pthread API implementation for Windows - */ -int err_win_to_posix(DWORD winerr); - -#ifndef NO_UNIX_SOCKETS -int mingw_have_unix_sockets(void); -#undef have_unix_sockets -#define have_unix_sockets mingw_have_unix_sockets -#endif +#endif /* COMPAT_MINGW_POSIX_H */ diff --git a/compat/msvc.c b/compat/msvc.c index 5aacf3af19..7b6b8ddc71 100644 --- a/compat/msvc.c +++ b/compat/msvc.c @@ -3,4 +3,4 @@ #include #include "strbuf.h" -#include "compat/mingw.c" +#include "compat/mingw/compat-util.c" diff --git a/compat/msvc.h b/compat/msvc.h index 1d7a8c6145..df39978f4f 100644 --- a/compat/msvc.h +++ b/compat/msvc.h @@ -28,6 +28,6 @@ typedef int sigset_t; /* open for reading, writing, or both (not in fcntl.h) */ #define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR) -#include "compat/mingw.h" +#include "compat/mingw/compat-util.h" #endif diff --git a/config.mak.uname b/config.mak.uname index cd9535a65c..38a774de39 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -541,7 +541,7 @@ endif EXTRA_PROGRAMS += headless-git$X -compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS +compat/msvc.o: compat/msvc.c compat/mingw/compat-util.c GIT-CFLAGS endif ifeq ($(uname_S),Interix) NO_INITGROUPS = YesPlease @@ -694,7 +694,7 @@ ifeq ($(uname_S),MINGW) BASIC_LDFLAGS += -municode COMPAT_CFLAGS += -DNOGDI -Icompat/win32 COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\" - COMPAT_OBJS += compat/mingw.o compat/winansi.o \ + COMPAT_OBJS += compat/mingw/compat-util.o compat/winansi.o \ compat/win32/trace2_win32_process_info.o \ compat/win32/flush.o \ compat/win32/path-utils.o \ diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt index 10dc54fdcb..65ce8705f0 100644 --- a/contrib/buildsystems/CMakeLists.txt +++ b/contrib/buildsystems/CMakeLists.txt @@ -258,7 +258,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows") USE_NED_ALLOCATOR OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM) list(APPEND compat_SOURCES - compat/mingw.c + compat/mingw/compat-util.c compat/winansi.c compat/win32/flush.c compat/win32/path-utils.c diff --git a/git-compat-util.h b/git-compat-util.h index e283c46c6f..b96fb98e1e 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -304,10 +304,10 @@ static inline int is_xplatform_dir_sep(int c) #if defined(__MINGW32__) /* pull in Windows compatibility stuff */ #include "compat/win32/path-utils.h" -#include "compat/mingw.h" +#include "compat/mingw/compat-util.h" #elif defined(_MSC_VER) #include "compat/win32/path-utils.h" -#include "compat/msvc.h" +#include "compat/msvc/compat-util.h" #else #include #include diff --git a/meson.build b/meson.build index 2297f5e9dd..32eb0a86d5 100644 --- a/meson.build +++ b/meson.build @@ -1054,7 +1054,7 @@ if host_machine.system() == 'cygwin' ] elif host_machine.system() == 'windows' libgit_sources += [ - 'compat/mingw.c', + 'compat/mingw/compat-util.c', 'compat/winansi.c', 'compat/win32/flush.c', 'compat/win32/path-utils.c', @@ -1157,7 +1157,7 @@ else error('Native regex support requested but not found') endif -# setitimer and friends are provided by compat/mingw.c. +# setitimer and friends are provided by compat/mingw/compat-util.c. if host_machine.system() != 'windows' if not compiler.compiles(''' #include @@ -1237,7 +1237,7 @@ if not compiler.has_function('qsort') endif libgit_sources += 'compat/qsort_s.c' -# unsetenv is provided by compat/mingw.c. +# unsetenv is provided by compat/mingw/compat-util.c. if host_machine.system() != 'windows' and not compiler.has_function('unsetenv') libgit_c_args += '-DNO_UNSETENV' libgit_sources += 'compat/unsetenv.c' From patchwork Tue Jan 28 08:28:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952250 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 033D01DF735 for ; Tue, 28 Jan 2025 08:28:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052914; cv=none; b=eDvYnNHgYP72pJA1Iy3jxyqEzBI7Qk8n8JeodqIt9sC0SNSA4mu6Ia8mXhTpfjUpQpw33Ia+iVAuIyyVXmaYKH0wT9XRnfwat8CzaAsuTA6Ktb8FXi7hggU/AKXUCFYT8F2r0sPhszvNpsBhhGiCmdSssfghbje3B3bBQov1bQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052914; c=relaxed/simple; bh=rIi7S5FoYFvRO78WjmPPHNSL4D3MZckaTl1cMCbt9Ro=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TWHcJyoOFY39zHz9PViwqHA2+yAIHjRHmUiJjf15SlMFqNqmRNHEtYE7g0n9dzd5CNW8BOIXNDdZjMN5z4Ty3N68FaG3bzur8tapiphfnPBMA3VU/SSMFvlWSdFEHYdL7hvTLOZnSiNreCz+o57F+sH0lYPqY3ZO/G0l2gmQil0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=pEEuMuYg; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=jgYCF6p8; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="pEEuMuYg"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="jgYCF6p8" Received: from phl-compute-11.internal (phl-compute-11.phl.internal [10.202.2.51]) by mailfhigh.stl.internal (Postfix) with ESMTP id 50EC3254024E; Tue, 28 Jan 2025 03:28:32 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-11.internal (MEProxy); Tue, 28 Jan 2025 03:28:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052912; x=1738139312; bh=mA+A9+ANteqsdiATpcFASFN5uhj9YbjlWatlVje7gTU=; b= pEEuMuYgciH4a5cVBbh7Mh/lT+cvh/sxjqMoc8PI1kn605JGxrUBY422DI/Zumif R96lBQBpq5qG9J7OlfKGSEhyM50lsnCSDcZg/WdQOmLZxINjd4SlZBq4+jHVxAHj 2BrXAr744xz2T9EgwNSGEGvY3eFCzsKdx6mhmPnv4qQ3lJrBeEiq1sXbw31/X+M2 T0pBiEQOK1nLpsW7BlQwn2Y1ef2XMc8nO5TDBpRvsRpIL2THf/uzeY8MLjELc/IN oDS/MOcMkPjWzYDPLAYAufY326cu/kcDlfObjde80uw03QlhqZZc2juINavWDktl svUI1iJ9Ksoc4XC38EWS2A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052912; x= 1738139312; bh=mA+A9+ANteqsdiATpcFASFN5uhj9YbjlWatlVje7gTU=; b=j gYCF6p8NniKeMJ5lctXbHlZYLZZ7QD4KIFRb/iyMyDOSckU7N/AoM/TNUD6KfxPM WtHRRXC8SuhpLgvNiTZvR06ODhRX5eMIcnq3NrPJz3ualc9hKtzuEwHECvQzYyPb TcAwTQpNUT7RjTlXWRD3hfovOjKLwBZQ3Ywe8mML5R+ncUVypCn57OTsBRhUluMB O+68WN0fk2KZgBnTBiSZbKlBj+jlDufCKd4dK7dalp1VsCmIQ7m+5MEgYEEGL3/U iFSWfKtiEcnBdtKAUuIZgZEw1U3xwwSQ6Ub4AY+smYvSLqKvXkneSC+7kdIOAA/+ CdIQPOwGlw0VIr/z10mCg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeefnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpd hrtghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopegv thhhohhmshhonhesvggufigrrhguthhhohhmshhonhdrtghomhdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:31 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id d9411ac5 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:29 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:18 +0100 Subject: [PATCH v2 17/20] compat/msvc: split out POSIX-related bits Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-17-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 Split out the POSIX-related bits from "compat/msvc.h". This is in preparation for splitting up "git-compat-utils.h" into a header that provides POSIX-compatibility and a header that provides common wrappers used by the Git project. Signed-off-by: Patrick Steinhardt --- compat/{msvc.c => msvc/compat-util.c} | 0 compat/msvc/compat-util.h | 7 +++++++ compat/{msvc.h => msvc/posix.h} | 8 ++++---- config.mak.uname | 4 ++-- meson.build | 4 +++- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/compat/msvc.c b/compat/msvc/compat-util.c similarity index 100% rename from compat/msvc.c rename to compat/msvc/compat-util.c diff --git a/compat/msvc/compat-util.h b/compat/msvc/compat-util.h new file mode 100644 index 0000000000..e409e9910c --- /dev/null +++ b/compat/msvc/compat-util.h @@ -0,0 +1,7 @@ +#ifndef COMPAT_MSVC_COMPAT_UTIL_H +#define COMPAT_MSVC_COMPAT_UTIL_H + +#include "compat/msvc/posix.h" +#include "compat/mingw/compat-util.h" + +#endif /* COMPAT_MSVC_COMPAT_UTIL_H */ diff --git a/compat/msvc.h b/compat/msvc/posix.h similarity index 86% rename from compat/msvc.h rename to compat/msvc/posix.h index df39978f4f..47062293cb 100644 --- a/compat/msvc.h +++ b/compat/msvc/posix.h @@ -1,5 +1,5 @@ -#ifndef __MSVC__HEAD -#define __MSVC__HEAD +#ifndef COMPAT_MSVC_POSIX_H +#define COMPAT_MSVC_POSIX_H #include #include @@ -28,6 +28,6 @@ typedef int sigset_t; /* open for reading, writing, or both (not in fcntl.h) */ #define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR) -#include "compat/mingw/compat-util.h" +#include "compat/mingw/posix.h" -#endif +#endif /* COMPAT_MSVC_POSIX_H */ diff --git a/config.mak.uname b/config.mak.uname index 38a774de39..8407efd262 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -495,7 +495,7 @@ endif AR = compat/vcbuild/scripts/lib.pl CFLAGS = BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE - COMPAT_OBJS = compat/msvc.o compat/winansi.o \ + COMPAT_OBJS = compat/msvc/compat-util.o compat/winansi.o \ compat/win32/flush.o \ compat/win32/path-utils.o \ compat/win32/pthread.o compat/win32/syslog.o \ @@ -541,7 +541,7 @@ endif EXTRA_PROGRAMS += headless-git$X -compat/msvc.o: compat/msvc.c compat/mingw/compat-util.c GIT-CFLAGS +compat/msvc/compat-util.o: compat/msvc/compat-util.c compat/mingw/compat-util.c GIT-CFLAGS endif ifeq ($(uname_S),Interix) NO_INITGROUPS = YesPlease diff --git a/meson.build b/meson.build index 32eb0a86d5..e8abf798f5 100644 --- a/meson.build +++ b/meson.build @@ -1054,7 +1054,6 @@ if host_machine.system() == 'cygwin' ] elif host_machine.system() == 'windows' libgit_sources += [ - 'compat/mingw/compat-util.c', 'compat/winansi.c', 'compat/win32/flush.c', 'compat/win32/path-utils.c', @@ -1081,6 +1080,9 @@ elif host_machine.system() == 'windows' libgit_include_directories += 'compat/win32' if compiler.get_id() == 'msvc' libgit_include_directories += 'compat/vcbuild/include' + libgit_sources += 'compat/msvc/compat-util.c' + else + libgit_sources += 'compat/mingw/compat-util.c' endif endif From patchwork Tue Jan 28 08:28:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952252 Received: from fout-b5-smtp.messagingengine.com (fout-b5-smtp.messagingengine.com [202.12.124.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9F981DF745 for ; Tue, 28 Jan 2025 08:28:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052918; cv=none; b=f2pBsQgywainxV9JbPJnU1AaD86Lm0mB22WzN1h2+f+1HJytLnTKCCJneNuqSiSQHEZxB4OS7Sh7h3pC4W4ktL/u2lSR4PQdSSat8Ufu+8NZWM6/BXv98BgeLT6DuFRYFXR1AkPHFJDP3PjNaqo+fKvw+/HllurMYFfNs6yLBiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052918; c=relaxed/simple; bh=v4ed7AT/nvaPW7h2bW0GuY5DcYwy6UItTVZd2XY3m+w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r0iIqZ23KHdp9WosQXXYYw5Oxq5tAbjGh60nR0FG6l3Sw/5doFC8eqvxOvgIs7Jg2vrM6oO1eMpyFI8mrh+RuUIa1MnJFzED3DqDJXgCDtD9vEfdEicOEBImHRw2rXRBu/b/gE4yJgw7aEPc6EWc5i2k16SuGZVx++V3YFmz1LY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=GZ9XEjJH; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=NO+VSr2p; arc=none smtp.client-ip=202.12.124.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="GZ9XEjJH"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="NO+VSr2p" Received: from phl-compute-11.internal (phl-compute-11.phl.internal [10.202.2.51]) by mailfout.stl.internal (Postfix) with ESMTP id E354B11401CC; Tue, 28 Jan 2025 03:28:33 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-11.internal (MEProxy); Tue, 28 Jan 2025 03:28:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052913; x=1738139313; bh=VLFyDzaGY38cmD4wAsFwR6VgLe0brWF24kNpeB3WoGE=; b= GZ9XEjJHtkkYrvIJzCO5LwhRiM43CbwKcPiAjTkmWmO9KMQHVi1vPSJPqj9+85X9 wGs3qe4/07gZwVYvRyeN+Qntkg0KWDG1V02/VSoxvF2u58HYT2iHCS3juRBYjov4 WbFiM8CEzaEYxB4ppTwrcAKvbDKHyDGcHGJqoqa4PDyw+bunevwcK7UvSt+hxsAm wVCXcC4FJrO9Z7Ws6oMMSh6XM598v5NCSBlRqe/YKG6oPgPGjp/575sXM7zcb4oL mhx+LrRpK+vrQchp7mwxWELauPStkzDk30x37nW8luYQZtXQxcfVa1oM5rzqboX+ SCW4zYOom5diRhDTOiI2hg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052913; x= 1738139313; bh=VLFyDzaGY38cmD4wAsFwR6VgLe0brWF24kNpeB3WoGE=; b=N O+VSr2pOVlNcqZdlW8wwOVGwq3UT8cvr+COF09l37nBoHbZrARu+LVT9xWgqdTmy shrFqt4ovP6rGj6r4U6IkSJGWZlrwbejTzKPf2pDBynlbdh9681JwgW431SmRBeo WIH5Pp28rEVbfNBZWe1FV+y6dRANyr+FI++4P/NBXOJ02nTIQKKRFqGLKDI8wiLs 3F39xcPNXAK8PFOphaOpsLJj0D+g+rDEoZ+k7WWcQkkhqZ1L6NdYwOsIuRzW27RS d9aPzlMC3eL4BodgrizBe2GJK9l6cGXFvm5LuKljru7MiRsIxLF5cqDUJo99Yey6 oXebNTe21Wor1t9/WHvsw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehiedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeehnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopegvthhhohhmshhonhesvggufigrrhguthhhoh hmshhonhdrtghomhdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpdhr tghpthhtohepjhhlthhosghlvghrsehgmhgrihhlrdgtohhmpdhrtghpthhtohepghhith esvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:32 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 715ae4c4 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:30 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:19 +0100 Subject: [PATCH v2 18/20] git-compat-util.h: split out POSIX-emulating bits Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-18-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 The "git-compat-util.h" header is a treasure trove of various bits and pieces used throughout the project. It basically mixes two different things into one: - Providing a POSIX-like interface even on platforms that aren't POSIX-compliant. - Providing low-level functionality that is specific to Git. This intermixing is a bit of a problem for the reftable library as we don't want to recreate the POSIX-like interface there. But neither do we want to pull in the Git-specific functionality, as it is otherwise quite easy to start depending on the Git codebase again. Split out a new header "compat/posix.h" that only contains the bits and pieces relevant for the emulation of POSIX, which we will start using in the next commit. Signed-off-by: Patrick Steinhardt --- compat/posix.h | 541 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ git-compat-util.h | 531 +---------------------------------------------------- 2 files changed, 543 insertions(+), 529 deletions(-) diff --git a/compat/posix.h b/compat/posix.h new file mode 100644 index 0000000000..2b2da97965 --- /dev/null +++ b/compat/posix.h @@ -0,0 +1,541 @@ +#ifndef COMPAT_POSIX_H +#define COMPAT_POSIX_H + +#define _FILE_OFFSET_BITS 64 + +/* + * Derived from Linux "Features Test Macro" header + * Convenience macros to test the versions of gcc (or + * a compatible compiler). + * Use them like this: + * #if GIT_GNUC_PREREQ (2,8) + * ... code requiring gcc 2.8 or later ... + * #endif + * + * This macro of course is not part of POSIX, but we need it for the UNUSED + * macro which is used by some of our POSIX compatibility wrappers. +*/ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define GIT_GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +#else + #define GIT_GNUC_PREREQ(maj, min) 0 +#endif + +/* + * UNUSED marks a function parameter that is always unused. It also + * can be used to annotate a function, a variable, or a type that is + * always unused. + * + * A callback interface may dictate that a function accepts a + * parameter at that position, but the implementation of the function + * may not need to use the parameter. In such a case, mark the parameter + * with UNUSED. + * + * When a parameter may be used or unused, depending on conditional + * compilation, consider using MAYBE_UNUSED instead. + */ +#if GIT_GNUC_PREREQ(4, 5) +#define UNUSED __attribute__((unused)) \ + __attribute__((deprecated ("parameter declared as UNUSED"))) +#elif defined(__GNUC__) +#define UNUSED __attribute__((unused)) \ + __attribute__((deprecated)) +#else +#define UNUSED +#endif + +#ifdef __MINGW64__ +#define _POSIX_C_SOURCE 1 +#elif defined(__sun__) + /* + * On Solaris, when _XOPEN_EXTENDED is set, its header file + * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE + * setting to say we are XPG5 or XPG6. Also on Solaris, + * XPG6 programs must be compiled with a c99 compiler, while + * non XPG6 programs must be compiled with a pre-c99 compiler. + */ +# if __STDC_VERSION__ - 0 >= 199901L +# define _XOPEN_SOURCE 600 +# else +# define _XOPEN_SOURCE 500 +# endif +#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && \ + !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \ + !defined(__TANDEM) && !defined(__QNX__) && !defined(__MirBSD__) && \ + !defined(__CYGWIN__) +#define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */ +#define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ +#endif +#define _ALL_SOURCE 1 +#define _GNU_SOURCE 1 +#define _BSD_SOURCE 1 +#define _DEFAULT_SOURCE 1 +#define _NETBSD_SOURCE 1 +#define _SGI_SOURCE 1 + +#if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */ +# if !defined(_WIN32_WINNT) +# define _WIN32_WINNT 0x0600 +# endif +#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */ +#include +#ifndef NO_UNIX_SOCKETS +#include +#endif +#include +#define GIT_WINDOWS_NATIVE +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_STRINGS_H +#include /* for strcasecmp() */ +#endif +#include +#include +#include +#ifdef NEEDS_SYS_PARAM_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(NO_POLL_H) +#include +#elif !defined(NO_SYS_POLL_H) +#include +#else +/* Pull the compat stuff */ +#include +#endif +#ifdef HAVE_BSD_SYSCTL +#include +#endif + +#if defined(__MINGW32__) +#include "compat/mingw/posix.h" +#elif defined(_MSC_VER) +#include "compat/msvc/posix.h" +#else +#include +#include +#include +#include +#include +#include +#include +#ifndef NO_SYS_SELECT_H +#include +#endif +#include +#include +#include +#include +#include +#include +#ifndef NO_INTTYPES_H +#include +#else +#include +#endif +#ifdef HAVE_ARC4RANDOM_LIBBSD +#include +#endif +#ifdef HAVE_GETRANDOM +#include +#endif +#ifdef NO_INTPTR_T +/* + * On I16LP32, ILP32 and LP64 "long" is the safe bet, however + * on LLP86, IL33LLP64 and P64 it needs to be "long long", + * while on IP16 and IP16L32 it is "int" (resp. "short") + * Size needs to match (or exceed) 'sizeof(void *)'. + * We can't take "long long" here as not everybody has it. + */ +typedef long intptr_t; +typedef unsigned long uintptr_t; +#endif +#undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */ +#include +#define _ALL_SOURCE 1 +#endif + +#ifdef MKDIR_WO_TRAILING_SLASH +#define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b)) +int compat_mkdir_wo_trailing_slash(const char*, mode_t); +#endif + +#ifdef time +#undef time +#endif +static inline time_t git_time(time_t *tloc) +{ + struct timeval tv; + + /* + * Avoid time(NULL), which can disagree with gettimeofday(2) + * and filesystem timestamps. + */ + gettimeofday(&tv, NULL); + + if (tloc) + *tloc = tv.tv_sec; + return tv.tv_sec; +} +#define time git_time + +#ifdef NO_STRUCT_ITIMERVAL +struct itimerval { + struct timeval it_interval; + struct timeval it_value; +}; +#endif + +#ifdef NO_SETITIMER +static inline int git_setitimer(int which UNUSED, + const struct itimerval *value UNUSED, + struct itimerval *newvalue UNUSED) { + return 0; /* pretend success */ +} +#undef setitimer +#define setitimer(which,value,ovalue) git_setitimer(which,value,ovalue) +#endif + +#ifndef NO_LIBGEN_H +#include +#else +#define basename gitbasename +char *gitbasename(char *); +#define dirname gitdirname +char *gitdirname(char *); +#endif + +#ifndef NO_ICONV +#include +#endif + +/* On most systems would have given us this, but + * not on some systems (e.g. z/OS). + */ +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif + +#ifndef NI_MAXSERV +#define NI_MAXSERV 32 +#endif + +/* On most systems would have given us this, but + * not on some systems (e.g. GNU/Hurd). + */ +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +#ifndef NAME_MAX +#define NAME_MAX 255 +#endif + +typedef uintmax_t timestamp_t; +#define PRItime PRIuMAX +#define parse_timestamp strtoumax +#define TIME_MAX UINTMAX_MAX +#define TIME_MIN 0 + +int lstat_cache_aware_rmdir(const char *path); +#if !defined(__MINGW32__) && !defined(_MSC_VER) +#define rmdir lstat_cache_aware_rmdir +#endif + +#if defined(NO_MMAP) || defined(USE_WIN32_MMAP) + +#ifndef PROT_READ +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_PRIVATE 1 +#endif + +#define mmap git_mmap +#define munmap git_munmap +void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); +int git_munmap(void *start, size_t length); + +#else /* NO_MMAP || USE_WIN32_MMAP */ + +#include + +#endif /* NO_MMAP || USE_WIN32_MMAP */ + +#ifndef MAP_FAILED +#define MAP_FAILED ((void *)-1) +#endif + +#ifdef NEEDS_MODE_TRANSLATION +#undef S_IFMT +#undef S_IFREG +#undef S_IFDIR +#undef S_IFLNK +#undef S_IFBLK +#undef S_IFCHR +#undef S_IFIFO +#undef S_IFSOCK +#define S_IFMT 0170000 +#define S_IFREG 0100000 +#define S_IFDIR 0040000 +#define S_IFLNK 0120000 +#define S_IFBLK 0060000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_IFSOCK 0140000 +#ifdef stat +#undef stat +#endif +#define stat(path, buf) git_stat(path, buf) +int git_stat(const char *, struct stat *); +#ifdef fstat +#undef fstat +#endif +#define fstat(fd, buf) git_fstat(fd, buf) +int git_fstat(int, struct stat *); +#ifdef lstat +#undef lstat +#endif +#define lstat(path, buf) git_lstat(path, buf) +int git_lstat(const char *, struct stat *); +#endif + +#ifdef NO_PREAD +#define pread git_pread +ssize_t git_pread(int fd, void *buf, size_t count, off_t offset); +#endif + +#ifdef NO_SETENV +#define setenv gitsetenv +int gitsetenv(const char *, const char *, int); +#endif + +#ifdef NO_MKDTEMP +#define mkdtemp gitmkdtemp +char *gitmkdtemp(char *); +#endif + +#ifdef NO_UNSETENV +#define unsetenv gitunsetenv +int gitunsetenv(const char *); +#endif + +#ifdef NO_STRCASESTR +#define strcasestr gitstrcasestr +char *gitstrcasestr(const char *haystack, const char *needle); +#endif + +#ifdef NO_STRLCPY +#define strlcpy gitstrlcpy +size_t gitstrlcpy(char *, const char *, size_t); +#endif + +#ifdef NO_STRTOUMAX +#define strtoumax gitstrtoumax +uintmax_t gitstrtoumax(const char *, char **, int); +#define strtoimax gitstrtoimax +intmax_t gitstrtoimax(const char *, char **, int); +#endif + +#ifdef NO_HSTRERROR +#define hstrerror githstrerror +const char *githstrerror(int herror); +#endif + +#ifdef NO_MEMMEM +#define memmem gitmemmem +void *gitmemmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); +#endif + +#ifdef OVERRIDE_STRDUP +#ifdef strdup +#undef strdup +#endif +#define strdup gitstrdup +char *gitstrdup(const char *s); +#endif + +#ifdef NO_GETPAGESIZE +#define getpagesize() sysconf(_SC_PAGESIZE) +#endif + +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + +#ifdef FREAD_READS_DIRECTORIES +# if !defined(SUPPRESS_FOPEN_REDEFINITION) +# ifdef fopen +# undef fopen +# endif +# define fopen(a,b) git_fopen(a,b) +# endif +FILE *git_fopen(const char*, const char*); +#endif + +#ifdef SNPRINTF_RETURNS_BOGUS +#ifdef snprintf +#undef snprintf +#endif +#define snprintf git_snprintf +int git_snprintf(char *str, size_t maxsize, + const char *format, ...); +#ifdef vsnprintf +#undef vsnprintf +#endif +#define vsnprintf git_vsnprintf +int git_vsnprintf(char *str, size_t maxsize, + const char *format, va_list ap); +#endif + +#ifdef OPEN_RETURNS_EINTR +#undef open +#define open git_open_with_retry +int git_open_with_retry(const char *path, int flag, ...); +#endif + +#ifdef __GLIBC_PREREQ +#if __GLIBC_PREREQ(2, 1) +#define HAVE_STRCHRNUL +#endif +#endif + +#ifndef HAVE_STRCHRNUL +#define strchrnul gitstrchrnul +static inline char *gitstrchrnul(const char *s, int c) +{ + while (*s && *s != c) + s++; + return (char *)s; +} +#endif + +#ifdef NO_INET_PTON +int inet_pton(int af, const char *src, void *dst); +#endif + +#ifdef NO_INET_NTOP +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + +#ifdef NO_PTHREADS +#define atexit git_atexit +int git_atexit(void (*handler)(void)); +#endif + +#ifndef HOST_NAME_MAX +#define HOST_NAME_MAX 256 +#endif + +#include "sane-ctype.h" + +void git_stable_qsort(void *base, size_t nmemb, size_t size, + int(*compar)(const void *, const void *)); +#ifdef INTERNAL_QSORT +#define qsort git_stable_qsort +#endif + +#define QSORT(base, n, compar) sane_qsort((base), (n), sizeof(*(base)), compar) +static inline void sane_qsort(void *base, size_t nmemb, size_t size, + int(*compar)(const void *, const void *)) +{ + if (nmemb > 1) + qsort(base, nmemb, size, compar); +} + +#define STABLE_QSORT(base, n, compar) \ + git_stable_qsort((base), (n), sizeof(*(base)), compar) + +#ifndef HAVE_ISO_QSORT_S +int git_qsort_s(void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), void *ctx); +#define qsort_s git_qsort_s +#endif + +#define QSORT_S(base, n, compar, ctx) do { \ + if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \ + BUG("qsort_s() failed"); \ +} while (0) + +#ifdef NO_NSEC +#undef USE_NSEC +#define ST_CTIME_NSEC(st) 0 +#define ST_MTIME_NSEC(st) 0 +#else +#ifdef USE_ST_TIMESPEC +#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctimespec.tv_nsec)) +#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtimespec.tv_nsec)) +#else +#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctim.tv_nsec)) +#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtim.tv_nsec)) +#endif +#endif + +#ifndef va_copy +/* + * Since an obvious implementation of va_list would be to make it a + * pointer into the stack frame, a simple assignment will work on + * many systems. But let's try to be more portable. + */ +#ifdef __va_copy +#define va_copy(dst, src) __va_copy(dst, src) +#else +#define va_copy(dst, src) ((dst) = (src)) +#endif +#endif + +#ifndef _POSIX_THREAD_SAFE_FUNCTIONS +static inline void git_flockfile(FILE *fh UNUSED) +{ + ; /* nothing */ +} +static inline void git_funlockfile(FILE *fh UNUSED) +{ + ; /* nothing */ +} +#undef flockfile +#undef funlockfile +#undef getc_unlocked +#define flockfile(fh) git_flockfile(fh) +#define funlockfile(fh) git_funlockfile(fh) +#define getc_unlocked(fh) getc(fh) +#endif + +#ifdef FILENO_IS_A_MACRO +int git_fileno(FILE *stream); +# ifndef COMPAT_CODE_FILENO +# undef fileno +# define fileno(p) git_fileno(p) +# endif +#endif + +#ifdef NEED_ACCESS_ROOT_HANDLER +int git_access(const char *path, int mode); +# ifndef COMPAT_CODE_ACCESS +# ifdef access +# undef access +# endif +# define access(path, mode) git_access(path, mode) +# endif +#endif + +#endif /* COMPAT_POSIX_H */ diff --git a/git-compat-util.h b/git-compat-util.h index b96fb98e1e..30ad0725fb 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -23,26 +23,9 @@ #include #endif -struct strbuf; - - -#define _FILE_OFFSET_BITS 64 +#include "compat/posix.h" - -/* Derived from Linux "Features Test Macro" header - * Convenience macros to test the versions of gcc (or - * a compatible compiler). - * Use them like this: - * #if GIT_GNUC_PREREQ (2,8) - * ... code requiring gcc 2.8 or later ... - * #endif -*/ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define GIT_GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -#else - #define GIT_GNUC_PREREQ(maj, min) 0 -#endif +struct strbuf; #if defined(__GNUC__) || defined(__clang__) # define PRAGMA(pragma) _Pragma(#pragma) @@ -176,71 +159,6 @@ DISABLE_WARNING(-Wsign-compare) /* Approximation of the length of the decimal representation of this type. */ #define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1) -#ifdef __MINGW64__ -#define _POSIX_C_SOURCE 1 -#elif defined(__sun__) - /* - * On Solaris, when _XOPEN_EXTENDED is set, its header file - * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE - * setting to say we are XPG5 or XPG6. Also on Solaris, - * XPG6 programs must be compiled with a c99 compiler, while - * non XPG6 programs must be compiled with a pre-c99 compiler. - */ -# if __STDC_VERSION__ - 0 >= 199901L -# define _XOPEN_SOURCE 600 -# else -# define _XOPEN_SOURCE 500 -# endif -#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && \ - !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \ - !defined(__TANDEM) && !defined(__QNX__) && !defined(__MirBSD__) && \ - !defined(__CYGWIN__) -#define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */ -#define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ -#endif -#define _ALL_SOURCE 1 -#define _GNU_SOURCE 1 -#define _BSD_SOURCE 1 -#define _DEFAULT_SOURCE 1 -#define _NETBSD_SOURCE 1 -#define _SGI_SOURCE 1 - -/* - * UNUSED marks a function parameter that is always unused. It also - * can be used to annotate a function, a variable, or a type that is - * always unused. - * - * A callback interface may dictate that a function accepts a - * parameter at that position, but the implementation of the function - * may not need to use the parameter. In such a case, mark the parameter - * with UNUSED. - * - * When a parameter may be used or unused, depending on conditional - * compilation, consider using MAYBE_UNUSED instead. - */ -#if GIT_GNUC_PREREQ(4, 5) -#define UNUSED __attribute__((unused)) \ - __attribute__((deprecated ("parameter declared as UNUSED"))) -#elif defined(__GNUC__) -#define UNUSED __attribute__((unused)) \ - __attribute__((deprecated)) -#else -#define UNUSED -#endif - -#if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */ -# if !defined(_WIN32_WINNT) -# define _WIN32_WINNT 0x0600 -# endif -#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */ -#include -#ifndef NO_UNIX_SOCKETS -#include -#endif -#include -#define GIT_WINDOWS_NATIVE -#endif - #if defined(NO_UNIX_SOCKETS) || !defined(GIT_WINDOWS_NATIVE) static inline int _have_unix_sockets(void) { @@ -253,45 +171,6 @@ static inline int _have_unix_sockets(void) #define have_unix_sockets _have_unix_sockets #endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_STRINGS_H -#include /* for strcasecmp() */ -#endif -#include -#include -#include -#ifdef NEEDS_SYS_PARAM_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if !defined(NO_POLL_H) -#include -#elif !defined(NO_SYS_POLL_H) -#include -#else -/* Pull the compat stuff */ -#include -#endif -#ifdef HAVE_BSD_SYSCTL -#include -#endif - /* Used by compat/win32/path-utils.h, and more */ static inline int is_xplatform_dir_sep(int c) { @@ -308,48 +187,6 @@ static inline int is_xplatform_dir_sep(int c) #elif defined(_MSC_VER) #include "compat/win32/path-utils.h" #include "compat/msvc/compat-util.h" -#else -#include -#include -#include -#include -#include -#include -#include -#ifndef NO_SYS_SELECT_H -#include -#endif -#include -#include -#include -#include -#include -#include -#ifndef NO_INTTYPES_H -#include -#else -#include -#endif -#ifdef HAVE_ARC4RANDOM_LIBBSD -#include -#endif -#ifdef HAVE_GETRANDOM -#include -#endif -#ifdef NO_INTPTR_T -/* - * On I16LP32, ILP32 and LP64 "long" is the safe bet, however - * on LLP86, IL33LLP64 and P64 it needs to be "long long", - * while on IP16 and IP16L32 it is "int" (resp. "short") - * Size needs to match (or exceed) 'sizeof(void *)'. - * We can't take "long long" here as not everybody has it. - */ -typedef long intptr_t; -typedef unsigned long uintptr_t; -#endif -#undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */ -#include -#define _ALL_SOURCE 1 #endif /* used on Mac OS X */ @@ -370,60 +207,6 @@ static inline const char *precompose_string_if_needed(const char *in) #define probe_utf8_pathname_composition() #endif -#ifdef MKDIR_WO_TRAILING_SLASH -#define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b)) -int compat_mkdir_wo_trailing_slash(const char*, mode_t); -#endif - -#ifdef time -#undef time -#endif -static inline time_t git_time(time_t *tloc) -{ - struct timeval tv; - - /* - * Avoid time(NULL), which can disagree with gettimeofday(2) - * and filesystem timestamps. - */ - gettimeofday(&tv, NULL); - - if (tloc) - *tloc = tv.tv_sec; - return tv.tv_sec; -} -#define time git_time - -#ifdef NO_STRUCT_ITIMERVAL -struct itimerval { - struct timeval it_interval; - struct timeval it_value; -}; -#endif - -#ifdef NO_SETITIMER -static inline int git_setitimer(int which UNUSED, - const struct itimerval *value UNUSED, - struct itimerval *newvalue UNUSED) { - return 0; /* pretend success */ -} -#undef setitimer -#define setitimer(which,value,ovalue) git_setitimer(which,value,ovalue) -#endif - -#ifndef NO_LIBGEN_H -#include -#else -#define basename gitbasename -char *gitbasename(char *); -#define dirname gitdirname -char *gitdirname(char *); -#endif - -#ifndef NO_ICONV -#include -#endif - #ifndef NO_OPENSSL #ifdef __APPLE__ #undef __AVAILABILITY_MACROS_USES_AVAILABILITY @@ -441,34 +224,6 @@ char *gitdirname(char *); # include #endif -/* On most systems would have given us this, but - * not on some systems (e.g. z/OS). - */ -#ifndef NI_MAXHOST -#define NI_MAXHOST 1025 -#endif - -#ifndef NI_MAXSERV -#define NI_MAXSERV 32 -#endif - -/* On most systems would have given us this, but - * not on some systems (e.g. GNU/Hurd). - */ -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -#ifndef NAME_MAX -#define NAME_MAX 255 -#endif - -typedef uintmax_t timestamp_t; -#define PRItime PRIuMAX -#define parse_timestamp strtoumax -#define TIME_MAX UINTMAX_MAX -#define TIME_MIN 0 - #ifndef PATH_SEP #define PATH_SEP ':' #endif @@ -492,11 +247,6 @@ static inline int noop_core_config(const char *var UNUSED, #define platform_core_config noop_core_config #endif -int lstat_cache_aware_rmdir(const char *path); -#if !defined(__MINGW32__) && !defined(_MSC_VER) -#define rmdir lstat_cache_aware_rmdir -#endif - #ifndef has_dos_drive_prefix static inline int git_has_dos_drive_prefix(const char *path UNUSED) { @@ -822,25 +572,6 @@ static inline bool strip_suffix(const char *str, const char *suffix, memcpy(_swap_b_ptr, _swap_buffer, sizeof(a)); \ } while (0) -#if defined(NO_MMAP) || defined(USE_WIN32_MMAP) - -#ifndef PROT_READ -#define PROT_READ 1 -#define PROT_WRITE 2 -#define MAP_PRIVATE 1 -#endif - -#define mmap git_mmap -#define munmap git_munmap -void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); -int git_munmap(void *start, size_t length); - -#else /* NO_MMAP || USE_WIN32_MMAP */ - -#include - -#endif /* NO_MMAP || USE_WIN32_MMAP */ - #ifdef NO_MMAP /* This value must be multiple of (pagesize * 2) */ @@ -856,177 +587,15 @@ int git_munmap(void *start, size_t length); #endif /* NO_MMAP */ -#ifndef MAP_FAILED -#define MAP_FAILED ((void *)-1) -#endif - #ifdef NO_ST_BLOCKS_IN_STRUCT_STAT #define on_disk_bytes(st) ((st).st_size) #else #define on_disk_bytes(st) ((st).st_blocks * 512) #endif -#ifdef NEEDS_MODE_TRANSLATION -#undef S_IFMT -#undef S_IFREG -#undef S_IFDIR -#undef S_IFLNK -#undef S_IFBLK -#undef S_IFCHR -#undef S_IFIFO -#undef S_IFSOCK -#define S_IFMT 0170000 -#define S_IFREG 0100000 -#define S_IFDIR 0040000 -#define S_IFLNK 0120000 -#define S_IFBLK 0060000 -#define S_IFCHR 0020000 -#define S_IFIFO 0010000 -#define S_IFSOCK 0140000 -#ifdef stat -#undef stat -#endif -#define stat(path, buf) git_stat(path, buf) -int git_stat(const char *, struct stat *); -#ifdef fstat -#undef fstat -#endif -#define fstat(fd, buf) git_fstat(fd, buf) -int git_fstat(int, struct stat *); -#ifdef lstat -#undef lstat -#endif -#define lstat(path, buf) git_lstat(path, buf) -int git_lstat(const char *, struct stat *); -#endif - #define DEFAULT_PACKED_GIT_LIMIT \ ((1024L * 1024L) * (size_t)(sizeof(void*) >= 8 ? (32 * 1024L * 1024L) : 256)) -#ifdef NO_PREAD -#define pread git_pread -ssize_t git_pread(int fd, void *buf, size_t count, off_t offset); -#endif - -#ifdef NO_SETENV -#define setenv gitsetenv -int gitsetenv(const char *, const char *, int); -#endif - -#ifdef NO_MKDTEMP -#define mkdtemp gitmkdtemp -char *gitmkdtemp(char *); -#endif - -#ifdef NO_UNSETENV -#define unsetenv gitunsetenv -int gitunsetenv(const char *); -#endif - -#ifdef NO_STRCASESTR -#define strcasestr gitstrcasestr -char *gitstrcasestr(const char *haystack, const char *needle); -#endif - -#ifdef NO_STRLCPY -#define strlcpy gitstrlcpy -size_t gitstrlcpy(char *, const char *, size_t); -#endif - -#ifdef NO_STRTOUMAX -#define strtoumax gitstrtoumax -uintmax_t gitstrtoumax(const char *, char **, int); -#define strtoimax gitstrtoimax -intmax_t gitstrtoimax(const char *, char **, int); -#endif - -#ifdef NO_HSTRERROR -#define hstrerror githstrerror -const char *githstrerror(int herror); -#endif - -#ifdef NO_MEMMEM -#define memmem gitmemmem -void *gitmemmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen); -#endif - -#ifdef OVERRIDE_STRDUP -#ifdef strdup -#undef strdup -#endif -#define strdup gitstrdup -char *gitstrdup(const char *s); -#endif - -#ifdef NO_GETPAGESIZE -#define getpagesize() sysconf(_SC_PAGESIZE) -#endif - -#ifndef O_CLOEXEC -#define O_CLOEXEC 0 -#endif - -#ifdef FREAD_READS_DIRECTORIES -# if !defined(SUPPRESS_FOPEN_REDEFINITION) -# ifdef fopen -# undef fopen -# endif -# define fopen(a,b) git_fopen(a,b) -# endif -FILE *git_fopen(const char*, const char*); -#endif - -#ifdef SNPRINTF_RETURNS_BOGUS -#ifdef snprintf -#undef snprintf -#endif -#define snprintf git_snprintf -int git_snprintf(char *str, size_t maxsize, - const char *format, ...); -#ifdef vsnprintf -#undef vsnprintf -#endif -#define vsnprintf git_vsnprintf -int git_vsnprintf(char *str, size_t maxsize, - const char *format, va_list ap); -#endif - -#ifdef OPEN_RETURNS_EINTR -#undef open -#define open git_open_with_retry -int git_open_with_retry(const char *path, int flag, ...); -#endif - -#ifdef __GLIBC_PREREQ -#if __GLIBC_PREREQ(2, 1) -#define HAVE_STRCHRNUL -#endif -#endif - -#ifndef HAVE_STRCHRNUL -#define strchrnul gitstrchrnul -static inline char *gitstrchrnul(const char *s, int c) -{ - while (*s && *s != c) - s++; - return (char *)s; -} -#endif - -#ifdef NO_INET_PTON -int inet_pton(int af, const char *src, void *dst); -#endif - -#ifdef NO_INET_NTOP -const char *inet_ntop(int af, const void *src, char *dst, size_t size); -#endif - -#ifdef NO_PTHREADS -#define atexit git_atexit -int git_atexit(void (*handler)(void)); -#endif - static inline size_t st_add(size_t a, size_t b) { if (unsigned_add_overflows(a, b)) @@ -1293,12 +862,6 @@ static inline size_t xsize_t(off_t len) return (size_t) len; } -#ifndef HOST_NAME_MAX -#define HOST_NAME_MAX 256 -#endif - -#include "sane-ctype.h" - /* * Like skip_prefix, but compare case-insensitively. Note that the comparison * is done via tolower(), so it is strictly ASCII (no multi-byte characters or @@ -1364,34 +927,6 @@ static inline int strtol_i(char const *s, int base, int *result) return 0; } -void git_stable_qsort(void *base, size_t nmemb, size_t size, - int(*compar)(const void *, const void *)); -#ifdef INTERNAL_QSORT -#define qsort git_stable_qsort -#endif - -#define QSORT(base, n, compar) sane_qsort((base), (n), sizeof(*(base)), compar) -static inline void sane_qsort(void *base, size_t nmemb, size_t size, - int(*compar)(const void *, const void *)) -{ - if (nmemb > 1) - qsort(base, nmemb, size, compar); -} - -#define STABLE_QSORT(base, n, compar) \ - git_stable_qsort((base), (n), sizeof(*(base)), compar) - -#ifndef HAVE_ISO_QSORT_S -int git_qsort_s(void *base, size_t nmemb, size_t size, - int (*compar)(const void *, const void *, void *), void *ctx); -#define qsort_s git_qsort_s -#endif - -#define QSORT_S(base, n, compar, ctx) do { \ - if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \ - BUG("qsort_s() failed"); \ -} while (0) - #ifndef REG_STARTEND #error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd" #endif @@ -1416,39 +951,12 @@ int git_regcomp(regex_t *preg, const char *pattern, int cflags); # define FORCE_DIR_SET_GID 0 #endif -#ifdef NO_NSEC -#undef USE_NSEC -#define ST_CTIME_NSEC(st) 0 -#define ST_MTIME_NSEC(st) 0 -#else -#ifdef USE_ST_TIMESPEC -#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctimespec.tv_nsec)) -#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtimespec.tv_nsec)) -#else -#define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctim.tv_nsec)) -#define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtim.tv_nsec)) -#endif -#endif - #ifdef UNRELIABLE_FSTAT #define fstat_is_reliable() 0 #else #define fstat_is_reliable() 1 #endif -#ifndef va_copy -/* - * Since an obvious implementation of va_list would be to make it a - * pointer into the stack frame, a simple assignment will work on - * many systems. But let's try to be more portable. - */ -#ifdef __va_copy -#define va_copy(dst, src) __va_copy(dst, src) -#else -#define va_copy(dst, src) ((dst) = (src)) -#endif -#endif - /* usage.c: only to be used for testing BUG() implementation (see test-tool) */ extern int BUG_exit_code; @@ -1478,41 +986,6 @@ void bug_fl(const char *file, int line, const char *fmt, ...); # define SHELL_PATH "/bin/sh" #endif -#ifndef _POSIX_THREAD_SAFE_FUNCTIONS -static inline void git_flockfile(FILE *fh UNUSED) -{ - ; /* nothing */ -} -static inline void git_funlockfile(FILE *fh UNUSED) -{ - ; /* nothing */ -} -#undef flockfile -#undef funlockfile -#undef getc_unlocked -#define flockfile(fh) git_flockfile(fh) -#define funlockfile(fh) git_funlockfile(fh) -#define getc_unlocked(fh) getc(fh) -#endif - -#ifdef FILENO_IS_A_MACRO -int git_fileno(FILE *stream); -# ifndef COMPAT_CODE_FILENO -# undef fileno -# define fileno(p) git_fileno(p) -# endif -#endif - -#ifdef NEED_ACCESS_ROOT_HANDLER -int git_access(const char *path, int mode); -# ifndef COMPAT_CODE_ACCESS -# ifdef access -# undef access -# endif -# define access(path, mode) git_access(path, mode) -# endif -#endif - /* * Our code often opens a path to an optional file, to work on its * contents when we can successfully open it. We can ignore a failure From patchwork Tue Jan 28 08:28:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952251 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 402ED1F63ED for ; Tue, 28 Jan 2025 08:28:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052917; cv=none; b=eu6rMe9A3ysL9MIO/zEq3lQQF0DlgOaNSWmQat39WVN21JjWOhRi+hXVXAvi0TR3tfb7TzHtlgssTS6ArrA244Q0+sALJvBtFox0APPY5aPYFI+YmQkg8JETMj6BjhdO1LCuYS6IILppgcJgN2NsxEuC8YqxpiAQB+HnBEOKdVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052917; c=relaxed/simple; bh=1cfGhv2CtVDI+uEnfhoidh6GGJu7m6+3q1YI4IY2DdI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=asuSfrVqlu3MP0GOHUIGSi+TUSI3EnPcWmBEzRjGrQoxLKx9+ZqFs0dAizGmtRVijzQwzTAdQtYV7wW/Hjziv0lTAqtGX7QZ7b+WmTsvNRmwf5n9bJ1OsipRDN2BPrYCaja6i/DAmpnXycfgxL9WuPS4tvTRVgQ0BsiJbvcvvNY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=dqOvDXqt; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=e8LoXXnm; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="dqOvDXqt"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="e8LoXXnm" Received: from phl-compute-12.internal (phl-compute-12.phl.internal [10.202.2.52]) by mailfhigh.stl.internal (Postfix) with ESMTP id 89E5A254024A; Tue, 28 Jan 2025 03:28:35 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-12.internal (MEProxy); Tue, 28 Jan 2025 03:28:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052915; x=1738139315; bh=2YvloPgJ0adqNdO3FdP2VF6v6pumLPMKOE7ELd1HVTE=; b= dqOvDXqty5u27wYYFbzNAz50nZEugqIw+csveZeBnTsGgiyW65PBWfTZKwLGj39s h7WpwK11tg9h6r6tSpGO2eWSuw28dvu9KS8uyLrvJ/a/b9/WVpKyVSI/+KpJaM3i Vh1ArkKptTQth3Oh9Fw27Xq3IkSoHy/Tan6W7hd1BhRzE1Vf60sShVufKzvRDn6N S1IwsqvbC2M2I9FIA1J3SHWFYmNhj4yK9H2WocXEPBMsJFIcxYFvmJEYtI+a/2nz xbY0XonenbzK008N4HdQfIZDkcd2/iHJPKA8gINVDOfQlJQIweAD9qVn8xM9hoAQ ilC4AhdhUKffBL1BNgOaoA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052915; x= 1738139315; bh=2YvloPgJ0adqNdO3FdP2VF6v6pumLPMKOE7ELd1HVTE=; b=e 8LoXXnm09tD/sxUO2lJ6n3JE2Gdtznfwyu8re3FMCLMMdpfLkpGkCNj+FbZtjgCu hFhOKXa9QJFroiW+0sPhcqhQ4DYSH8BSUGGIVfAp84EMRrrD4skIq0ZhJuq9d3A4 UE3dPTV6ZMrTGAd9QlLfWseqaBlrfUIEBAHvt9uy/SPT5Hbo5bDZpvXP6NKeCYq6 7EmDRDUWGkosOZbuW0n7DDWjXzVSGGVbkbwzh/aBRkCgFzvNu51wgrVfgmOgSxou wEcosa+h3eWzfwNWSYP/AJpWoDjl2tsz+929vxDAvTwjy6U9xHIvfYAVqXRAbIO7 +sD/StzjPY2w99ilyRtBA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpedunecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpd hrtghpthhtohepvghthhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhmpdhr tghpthhtohepghhithesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehjlh htohgslhgvrhesghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:34 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id b1bf8b7f (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:31 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:20 +0100 Subject: [PATCH v2 19/20] reftable: decouple from Git codebase by pulling in "compat/posix.h" Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-19-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 The reftable library includes "git-compat-util.h" in order to get a POSIX-like programming environment that papers over various differences between platforms. The header also brings with it a couple of helpers specific to the Git codebase though, and over time we have started to use these helpers in the reftable library, as well. This makes it very hard to use the reftable library as a standalone library without the rest of the Git codebase, so other libraries like e.g. libgit2 cannot easily use it. But now that we have removed all calls to Git-specific functionality and have split out "compat/posix.h" as a separate header we can address this. Stop including "git-compat-util.h" and instead include "compat/posix.h" to finalize the decoupling of the reftable library from the rest of the Git codebase. The only bits which remain specific to Git are "system.h" and "system.c", which projects will have to provide. Signed-off-by: Patrick Steinhardt --- reftable/system.c | 2 ++ reftable/system.h | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/reftable/system.c b/reftable/system.c index e25ccc0da3..1ee268b125 100644 --- a/reftable/system.c +++ b/reftable/system.c @@ -1,3 +1,5 @@ +#include "../git-compat-util.h" + #include "system.h" #include "basics.h" #include "reftable-error.h" diff --git a/reftable/system.h b/reftable/system.h index 3bd4a4e322..e4a8944a70 100644 --- a/reftable/system.h +++ b/reftable/system.h @@ -11,7 +11,8 @@ license that can be found in the LICENSE file or at /* This header glues the reftable library to the rest of Git */ -#include "git-compat-util.h" +#include "compat/posix.h" +#include /* * Return a random 32 bit integer. This function is expected to return From patchwork Tue Jan 28 08:28:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13952253 Received: from fhigh-b5-smtp.messagingengine.com (fhigh-b5-smtp.messagingengine.com [202.12.124.156]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F30E91DF73E for ; Tue, 28 Jan 2025 08:28:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052918; cv=none; b=cGs5K+4msJr+lYcGpGF7Ap90n/aPiSj8smaRV49O6dJa3fLtOCfU97HM8vQaEQhrgvTl8Tkj/wkwPkTrqGYA9QErWuv+2asgIoELkz6iRpiR7/fVFZSoLnDOLnnd29e7HQf6VlH22TJ53ZAPqH/QK+jQZ3ToYnxCuICCp0LhjZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738052918; c=relaxed/simple; bh=+8IM53TbqpUgRfB/inFpjOz9489TvwK+2iXKydpy3II=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rKOJDI5CXHZ2mf5NUbdZkaRxbivD412deju1X/qQ41Sua+ek5P+XsQnWPwCRPV59ri4WJ5pZ+IO66GeTG1zaXZQzGGtzlKDcY4JW0dc0WxNpYaOLbMsHMITkimprIKsJ4YP6jZTZPm1FdEPe5oP0IrnfMGqkoG3hi78u5LldzG0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=I7OtqLjQ; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=i3/6SZeQ; arc=none smtp.client-ip=202.12.124.156 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="I7OtqLjQ"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="i3/6SZeQ" Received: from phl-compute-02.internal (phl-compute-02.phl.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id DF167254024E; Tue, 28 Jan 2025 03:28:35 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Tue, 28 Jan 2025 03:28:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1738052915; x=1738139315; bh=fZf1W4LUEYyZlqON29LdWuZDASC2Q90kB/sAd3jZi9U=; b= I7OtqLjQa2Lb/wmfa1VZ002aQ+Kdb24Nkb1ljp/Lye8c4L8UAdHuQD3dbHKjrdJo Uv/bJ88785aYfpAcXh0NVDGb99xGaM1Z+C7jz+6FG60C9AQfW0wAPns1gYUmVnG0 yQNXlFwsJIBKSSeW+RU2qMbKL0ZIIJYj09qWv49D88hS1FXwa731vv2ZXox2/9PG etWHxrgcIfXgyxw7EiGDyacdourYMf2BLVZctMmFdD3jR2n301PSjhw4gk1dAydE pT5E07jIToHYXILPsrqeRviVeiO3maaozkYeCAFhuNt1vKS2FEbhFYXOHqHS5/9d 0IcYDcx6XxXA/4aJwVqTIw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1738052915; x= 1738139315; bh=fZf1W4LUEYyZlqON29LdWuZDASC2Q90kB/sAd3jZi9U=; b=i 3/6SZeQXQcp8v5hoMO7dMM3otckbRsZacIeKYGNw9u2wCas2rKME4/cceXnSQgy1 sWcp6SNA0yiytWRa/SfYYmxc5ZxR7kRgDk4ar6w/TZOrccE24781acAc4LLm5e1e 2AdJZy4cZMnWPewCMBzXIewMANCXn+qLsIMCm+1fIv0RCCyzStzmp1QZr3bZyrzp SOb+PvfJ/IcBUYZM/pn06z3tlkZvVXEkjgcLLq2jR6PQtPr9E51LMuXUJK9/u/A2 9sBWuuEfP4NR3kxm9XSs6yeI7Yi0UsrJqlZOd4PzwzDwPcr+yCd7XNCrWW+sfEZI o+VwZRPabevNJZSx+k26w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudejgedgudehieefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertder tdejnecuhfhrohhmpefrrghtrhhitghkucfuthgvihhnhhgrrhguthcuoehpshesphhksh drihhmqeenucggtffrrghtthgvrhhnpeffueeiudejvdekheeuvdekfeffiedvueelteek udehjeetkeegvddugfdtgfeileenucevlhhushhtvghrufhiiigvpeegnecurfgrrhgrmh epmhgrihhlfhhrohhmpehpshesphhkshdrihhmpdhnsggprhgtphhtthhopeegpdhmohgu vgepshhmthhpohhuthdprhgtphhtthhopehjlhhtohgslhgvrhesghhmrghilhdrtghomh dprhgtphhtthhopehgihhtshhtvghrsehpohgsohigrdgtohhmpdhrtghpthhtohepvght hhhomhhsohhnsegvugifrghrughthhhomhhsohhnrdgtohhmpdhrtghpthhtohepghhith esvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 28 Jan 2025 03:28:34 -0500 (EST) Received: by vm-mail (OpenSMTPD) with ESMTPSA id 1f7259f1 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 28 Jan 2025 08:28:32 +0000 (UTC) From: Patrick Steinhardt Date: Tue, 28 Jan 2025 09:28:21 +0100 Subject: [PATCH v2 20/20] Makefile: skip reftable library for Coccinelle Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250128-pks-reftable-drop-git-compat-util-v2-20-c85c20336317@pks.im> References: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> In-Reply-To: <20250128-pks-reftable-drop-git-compat-util-v2-0-c85c20336317@pks.im> To: git@vger.kernel.org Cc: Edward Thomson , Justin Tobler , Junio C Hamano X-Mailer: b4 0.14.2 The reftable library does not use any of the common helpers that the Git project has. Consequently, most of the rules that we have in Coccinelle do not apply to the library at all and may even generate false positives when a pattern can be converted to use a Git helper function. Exclude reftable library sources from being checked by Coccinelle to avoid such false positives. Signed-off-by: Patrick Steinhardt --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d3011e30f7..dc2ac32e4a 100644 --- a/Makefile +++ b/Makefile @@ -946,7 +946,7 @@ FOUND_SOURCE_FILES := $(filter-out $(GENERATED_H),$(shell $(SOURCES_CMD))) FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES)) FOUND_H_SOURCES = $(filter %.h,$(FOUND_SOURCE_FILES)) -COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES)) +COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES) reftable/%,$(FOUND_C_SOURCES)) LIB_H = $(FOUND_H_SOURCES)