From nobody Sat Oct 17 17:08:38 2026 X-Original-To: dev-commits-src-all@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 4j6SvB6z4Bz6wS75 for ; Sat, 17 Oct 2026 17:08:38 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4j6SvB4ZMZz4VHX for ; Sat, 17 Oct 2026 17:08:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792256918; 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=XAtJQL+z6xN/SSQvY/ni/Y/xVUkVlcAUwcxQDBhFpSg=; b=kBanpDvB/KwuOIKWTYIaVnbGRoM//wRP/E5+x748MaBJu0K2REsTFRe9QMDLz+PSDbwd3Y GhF9JOcz03ZuQAVYxe+C10BI/H0nPMM0EzqGu+DrAStDH3/fZyWzL8D667ZGnDCitJLbo8 EwESt9y3ChlxVRcVj+BSnXyi1VgKwoRTipNEV6LUMQx94QTLOLcvy8ghvvTlDQtpTzMq5F u5GVRK5ozoNtQdqmJKXEgE5hYujBf2+bq5Wdz3DLpoTe+3TWcnpedV5BFDFNV6OBPrnHX8 5NPw+B1ZgLAolKXTG69dAxujMKiC7HLNOrN2uJFktkrvG95bL8CTWT9k+yzqWw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792256918; b=jEn2mR+syzf0ty3tSXmhCnrsUvyjBuVNNYignKfKPQRYeGMN3M/dcpl6rz7BeWm2vvg6EM nFojNnMnTrxHO7dfmhnKV4Z4yp1dwcqmj3bwaQv3JfrRV2psZVErZ9G459oscMKbhROyIk SL+v8Ve6+52oIjDnch/Ss+jJNPAYsBWQ3E+7HhoMK04OXZ+FlCpFWIC/tM9kAk6/Oc3PdL NXIK7AYhxtwVMmYYJj2hxCZ7eiBJ4RI8JfSGhcDLIytlglsmpJ3ubdrAlMllAQe3lZN8g7 FDnDP3K4QnEXWBgUQ2gPcPBxt1pMRnVo9X54iQXC3Ydb+IPKC7FMpX3X/iZMGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792256918; 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=XAtJQL+z6xN/SSQvY/ni/Y/xVUkVlcAUwcxQDBhFpSg=; b=l8kPEUzY1wHq/FEbH4ocOwlXGqXaNNY9ZlZgjDcH+UWtvCg+uTt4N3gcTyKxktd1iZLfpv N9wgtGzQL3PYF7GXjqU6GhmSvWWKi7iZo24qLp3M/yP8fBUAu8oD4KVSkjw7u8Oh6U9V6b ETzjhGf33NpcPf7h662qd7o2HVr+9frQqReqxg15WZ0ZRB1R1Ta+4jvTvbGMWQVW/6HzGw /DP2qW8BxwU5xCYm7caYe0X2aiLVHJjNWO7BimPvDCV20InpL9dXoWoidgTa0jXU/UbgT/ 64qBDoE2nIOi7hH6kGOJH0/d9jcmPqwHcZ802U7dqRTMgEUr5jmMYoLcNVMiQA== 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 4j6SvB3TDgz1B2g for ; Sat, 17 Oct 2026 17:08:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 196d9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 17 Oct 2026 17:08:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: ChrisKom04 From: Colin Percival Subject: git: 207d505b3222 - stable/15 - mkimg: Add image_buffer_region List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository 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/stable/15 X-Git-Reftype: branch X-Git-Commit: 207d505b3222e751b167c66c2049f785f8d26ac8 Auto-Submitted: auto-generated Date: Sat, 17 Oct 2026 17:08:38 +0000 Message-Id: <6ad3ab96.196d9.2b3c1ee8@gitrepo.freebsd.org> The branch stable/15 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=207d505b3222e751b167c66c2049f785f8d26ac8 commit 207d505b3222e751b167c66c2049f785f8d26ac8 Author: ChrisKom04 AuthorDate: 2025-07-13 15:46:46 +0000 Commit: Colin Percival CommitDate: 2026-10-17 17:02:26 +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 (cherry picked from commit 84a3e29c72030dab16b4dc82d601d0af5da6a18c) --- 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);