From nobody Sat Oct 03 15:42:41 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hxqfT2yXvz6vcPL for ; Sat, 03 Oct 2026 15:42:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hxqfT1Sztz4Skf for ; Sat, 03 Oct 2026 15:42:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791042161; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BQN7Z8HC8FyLpdpjuogBGby3GyeXv2S0GS8Pr4zvBjU=; b=V9A0E94iKzjE+X9a39r1wU8gHoVmkeLvVbe//qix3EWNnGowxc32t0W1i7rim2jr/dkjBD 3Zr/YDqxrVCGn0XNRA5nNJ+qYlp+ucs0Za29PexSTJGBTudSueKbddXLNvUMsxCnrZF1RI eQ5q+G9CLDDFWtF3egPAfih4d/H+VGIh0LYWpXUX+I6Jm1y7FshM7HecMi4mWMQ+PjiGC9 Rur2Yh17PaAgNIxWC1R6uygUTkxGQ3+XxhW5UUuBh5Oi+xdxH/FRAV5QEhjmhPS7Z8kSpf Tt4Vbn5LIc1fFaGfEp3XjrcCSO6cFJ5+FyCBMwSVTrTHruCs/sZCs9VBopoXlg== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791042161; b=x9Ak8rc6YFNEe6kvvbkOHrwOjiVMdMBPzf+wOgISwKPwpnm0D+oET35eSByqqAWvF7o6j7 7P4mPuL0aHw5JH6/vQC1OUeoKqmfgMOl8rUpj8EjMiPLP5H7xUzE6KZ4xBHzX+ELA8jboz 6WRe7x8PKUCT9RKwJ0/OGHlUZsNuKvWZFZsF/3C44IXt7NUanKt4ldZhmz13eL0OINxjGs ZgKfFSfz21mgVsa2d6QlvBg/clKkjDVLkKDsy7NSNgB5YWnxtcPKDjBD+VXku+Qd5wtTaC GXtlTtFzr/XXq6ZghyK/WVmc/bJjUYO+xIZYroMA/62cfjNkDBDcUTDB5GXEHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791042161; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BQN7Z8HC8FyLpdpjuogBGby3GyeXv2S0GS8Pr4zvBjU=; b=F+syZs4DC/mHpjxBQwkU4Fbsu0eXOzI9UlHWzCTv5cyBQXWz1zKnc6yjT6RblunDF0buVm OZltDfZfIrE0PoKhl4k5UO/AAu6DJEw4ck+pQcqaFKvw/LM5JD33pSWyLmrn8Gi8Mod8+O VpCvQ9Kho+owBxpE6vlpQV2jgh3x/e0cWlpb13jnSVXKnWvFu7iVlzTKRpfGewG1ZN0jKI EHM5ecVPdLpqPAZ2no0EQBPhSPr2mAzJKxy8Obo/ZcwHb1+ePJQXpHMCroU94m2P7EQtQq X5YLSJGcx36gpxnCavzoDp92GwoKvdOZObI6UMf5BvOFUhs5Hv7W0yKLBQR6MA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hxqfT0DRnz18Fj for ; Sat, 03 Oct 2026 15:42:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41d41 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 03 Oct 2026 15:42:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: ChrisKom04 From: Colin Percival Subject: git: 84a3e29c7203 - main - mkimg: Add image_buffer_region List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 84a3e29c72030dab16b4dc82d601d0af5da6a18c Auto-Submitted: auto-generated Date: Sat, 03 Oct 2026 15:42:41 +0000 Message-Id: <6ac12271.41d41.7bb06567@gitrepo.freebsd.org> The branch main has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=84a3e29c72030dab16b4dc82d601d0af5da6a18c commit 84a3e29c72030dab16b4dc82d601d0af5da6a18c Author: ChrisKom04 AuthorDate: 2025-07-13 15:46:46 +0000 Commit: Colin Percival CommitDate: 2026-10-03 15:41:28 +0000 mkimg: Add image_buffer_region This is like image_copyout_region, but copies into a buffer rather than writing out to a file; it will be used by future support for compressed images (and potentially other circumstances where image data must be manipulated before being written out to disk). Reviewed by: jrm No objection from: Christos Komis (author) MFC after: 2 weeks Sponsored by: Google LLC (GSoC 2025) Differential Revision: https://reviews.freebsd.org/D60149 --- usr.bin/mkimg/image.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ usr.bin/mkimg/image.h | 1 + 2 files changed, 69 insertions(+) diff --git a/usr.bin/mkimg/image.c b/usr.bin/mkimg/image.c index 84d66af97a60..1c8b1c6c1826 100644 --- a/usr.bin/mkimg/image.c +++ b/usr.bin/mkimg/image.c @@ -600,6 +600,32 @@ image_copyout_file(int fd, size_t size, int ifd, off_t iofs) return (0); } +static int +image_buffer_file(char *buffer, size_t size, int ifd, off_t iofs) +{ + void *mp; + char *buf, *p; + size_t iosz, sz; + off_t iof; + + iosz = secsz * image_swap_pgsz; + p = buffer; + + while (size > 0) { + sz = (size > iosz) ? iosz : size; + buf = mp = image_file_map(ifd, iofs, sz, &iof); + if (buf == NULL) + return (errno); + buf += iof; + memcpy(p, buf, sz); + image_file_unmap(mp, sz, iof); + size -= sz; + iofs += sz; + p += sz; + } + return (0); +} + int image_copyout_region(int fd, lba_t blk, lba_t size) { @@ -639,6 +665,48 @@ image_copyout_region(int fd, lba_t blk, lba_t size) return (error); } +int +image_buffer_region(char *buf, lba_t blk, lba_t size) +{ + char *p; + struct chunk *ch; + size_t ofs, sz; + int error; + + size *= secsz; + + p = buf; + error = 0; + while (!error && size > 0) { + ch = image_chunk_find(blk); + if (ch == NULL) { + error = EINVAL; + break; + } + ofs = (blk - ch->ch_block) * secsz; + sz = ch->ch_size - ofs; + sz = ((lba_t)sz < size) ? sz : (size_t)size; + switch (ch->ch_type) { + case CH_TYPE_ZEROES: + memset(p, 0, sz); + break; + case CH_TYPE_FILE: + error = image_buffer_file(p, sz, ch->ch_u.file.fd, + ch->ch_u.file.ofs + ofs); + break; + case CH_TYPE_MEMORY: + memcpy(p, ch->ch_u.mem.ptr, sz); + break; + default: + assert(0); + } + size -= sz; + blk += sz / secsz; + p += sz; + } + return (error); +} + int image_data(lba_t blk, lba_t size) { diff --git a/usr.bin/mkimg/image.h b/usr.bin/mkimg/image.h index 956fe3f27556..13bbc5109673 100644 --- a/usr.bin/mkimg/image.h +++ b/usr.bin/mkimg/image.h @@ -37,6 +37,7 @@ int image_copyin(lba_t blk, int fd, uint64_t *sizep); int image_copyout(int fd); int image_copyout_done(int fd); int image_copyout_region(int fd, lba_t blk, lba_t size); +int image_buffer_region(char *buffer, lba_t blk, lba_t size); int image_copyout_zeroes(int fd, size_t count); int image_data(lba_t blk, lba_t size); lba_t image_get_size(void);