From 2fc05ba7eadd4750a75fcef030a8b61854cca47a Mon Sep 17 00:00:00 2001 From: Yingjie Wang Date: Sat, 17 Jan 2026 16:18:42 -0500 Subject: [PATCH] update: safe leaf_update_package_datebase --- leaf | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/leaf b/leaf index f3cd537..1094ac9 100755 --- a/leaf +++ b/leaf @@ -548,18 +548,25 @@ leaf_conffile_is_unmodified() { } leaf_update_package_database() { - local _item="$(echo "$2" | awk 'BEGIN{FS="/";OFS="\\/"}{print $1,$2}')" - case $1 in + local action=$1 atom=$2 db="${INSTALLED_PACKAGES}" + local tmp="${db}.tmp.$$" + + case "$action" in add) - sed -i "/${_item}/d" "${INSTALLED_PACKAGES}" - echo "$2" >> ${INSTALLED_PACKAGES} + { [ -f "$db" ] && grep -Fvx -- "$atom" "$db" || :; printf '%s\n' "$atom"; } >"$tmp" && + mv -f -- "$tmp" "$db" ;; delete) - sed -i "/${_item}/d" "${INSTALLED_PACKAGES}" + grep -Fvx -- "$atom" "$db" >"$tmp" && + mv -f -- "$tmp" "$db" + ;; + *) + leaf_error "unknown operation leaf_update_package_database ${action}." ;; esac } + leaf_update_environment() { ldconfig [ ! -r /etc/profile ] || source /etc/profile