aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkiss31
1 files changed, 20 insertions, 11 deletions
diff --git a/kiss b/kiss
index 24098e0..53ce64d 100755
--- a/kiss
+++ b/kiss
@@ -148,12 +148,24 @@ dosu() {
fi
}
-regex_escape() {
+ssed() {
+ # Simple wrapper around 'sed' to handle in-place
+ # replacements in a portable way.
+
# Escape all required characters in both the search and
# replace portions of two strings for use in a 'sed' call
# as "plain-text".
sea=$(echo "$1" | sed 's/[]\/$*.^[]/\\&/g')
rep=$(echo "$2" | sed 's/[\/&]/\\&/g')
+
+ # Save the replacement result to a temporary file and then
+ # overwrite the original file with it.
+ #
+ # The '$4' equates to a 'sudo'/'su' equivalent when parts
+ # of the function's body must run as 'root'. Globbing is
+ # disabled and the input hardcoded so this is fine.
+ $4 sed "s/$sea/$rep" "$3" > "$3.bak"
+ $4 mv -f "$3.bak" "$3"
}
pkg_lint() {
@@ -825,12 +837,10 @@ pkg_conflicts() {
mv -f "$tar_dir/$p_name/$con" \
"$tar_dir/$p_name/$cho_dir/$p_name$con_name"
- regex_escape "$con" "/$cho_dir/$p_name$con_name"
-
# Rewrite the package's manifest to update its location
# to its new spot (and name) in the choices directory.
- sed -i "s/$sea/$rep/" \
- "$tar_dir/$p_name/$pkg_db/$p_name/manifest"
+ ssed "$con" "/$cho_dir/$p_name$con_name" \
+ "$tar_dir/$p_name/$pkg_db/$p_name/manifest"
done
else
if "$grep" -Fxf "$cac_dir/$pid-m" -- "$@"; then
@@ -871,20 +881,19 @@ pkg_swap() {
log "Swapping '$2' from '$pkg_owns' to '$1'"
- regex_escape "$2" "$PWD/$pkg_owns>${alt#*>}"
# Convert the current owner to an alternative and rewrite
# its manifest file to reflect this.
- dosu cp -f "'$2'" "'$pkg_owns>${alt#*>}'"
- dosu sed -i "'s/$sea/$rep/'" "'../installed/$pkg_owns/manifest'"
+ dosu cp -f "'$2'" "'$pkg_owns>${alt#*>}'"
+ ssed "'$2'" "'$PWD/$pkg_owns>${alt#*>}'" \
+ "'../installed/$pkg_owns/manifest'" dosu
fi
- regex_escape "$PWD/$alt" "$2"
# Convert the desired alternative to a real file and rewrite
# the manifest file to reflect this. The reverse of above.
- dosu mv -f "'$alt'" "'$2'"
- dosu sed -i "'s/$sea/$rep/'" "'../installed/$1/manifest'"
+ dosu mv -f "'$alt'" "'$2'"
+ ssed "'$PWD/$alt'" "'$2'" "'../installed/$1/manifest'" dosu
}
pkg_remove() {