From: "Leonid Krivoshein" <klark.devel@gmail.com> To: make-initrd@lists.altlinux.org Subject: [make-initrd] [PATCH v6 10/22] bootchain-core: expanded addressing capabilities Date: Sun, 24 Oct 2021 17:21:27 -0000 Message-ID: <20211024172127.fsYT6Po9o4nifGFrUHfaXUiVFmy4AK5w3TOXgMZQTGA@z> (raw) Adds support for reverse addressing relative to the current step, as well as calculating the path to the special device node obtained in the previous step. Signed-off-by: Leonid Krivoshein <klark.devel@gmail.com> --- features/bootchain-core/README.md | 6 +++ .../data/bin/bootchain-sh-functions | 37 ++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/features/bootchain-core/README.md b/features/bootchain-core/README.md index 8d341e0..ba66259 100644 --- a/features/bootchain-core/README.md +++ b/features/bootchain-core/README.md @@ -49,6 +49,12 @@ us to optimize fill in `initramfs` only which we are need. - Modularity: loading methods are initially separated from the common code and daemon. +- Via resolve_target() supports not only forward, but also reverse addressing, + relative to the current step. For example, a record like `step-3/dir1/dev` + will process the result of `dir1/dev`, made in the third step from the current + one. Together with the overload of the chain of steps, direct addressing is safe + only when storing the numbers of the completed steps in files, whereas reverse + relative addressing it is safe in any case and can often be more convenient. - Allows you to work with shorter and more familiar paths to special files devices thanks to the use of `DEVNAME` along with `dev`. diff --git a/features/bootchain-core/data/bin/bootchain-sh-functions b/features/bootchain-core/data/bin/bootchain-sh-functions index e73fd35..0eebbaf 100644 --- a/features/bootchain-core/data/bin/bootchain-sh-functions +++ b/features/bootchain-core/data/bin/bootchain-sh-functions @@ -27,19 +27,46 @@ get_parameter() resolve_target() { local target="$1" + local where="${target%%/*}" + local n="${#where}" - case "${target%%/*}" in + target="${target:$n}" + + case "$where" in '') ;; pipe[0-9]|pipe[0-9][0-9]|pipe[0-9][0-9][0-9]) - target="$mntdir/dst/step${target:4}" + [ -d "$mntdir/dst/step${where:4}" ] || + return 0 + target="$(readlink-e "$mntdir/dst/step${where:4}")${target}" + ;; + step-[1-9]|step-[1-9][0-9]|step-[1-9][0-9][0-9]) + case "$destdir" in + "$mntdir"/dst/step[0-9]*) + n="${destdir##*/}" + n="$(( ${n:4} - ${where:5} ))" + ;; + *) + return 0 + ;; + esac + [ "$n" -ge 0 ] && [ -d "$mntdir/dst/step$n" ] || + return 0 + target="$(readlink-e "$mntdir/dst/step$n")${target}" ;; *) if [ -z "${prevdir-}" ]; then - message "no previous stop to use" - return + message "no previous step results to use with $name" + return 0 + fi + if [ -z "$target" ] && + [ "$where" = DEVNAME ] && + [ -s "$prevdir"/DEVNAME ] + then + read -r target <"$prevdir"/DEVNAME ||: + else + target="$prevdir/${where#/}${target}" fi - target="$prevdir/${target#/}" ;; esac -- 2.24.1
reply other threads:[~2021-10-24 17:21 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211024172127.fsYT6Po9o4nifGFrUHfaXUiVFmy4AK5w3TOXgMZQTGA@z \ --to=klark.devel@gmail.com \ --cc=make-initrd@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Make-initrd development discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \ make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com public-inbox-index make-initrd Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.make-initrd AGPL code for this site: git clone https://public-inbox.org/public-inbox.git