summaryrefslogtreecommitdiffstats
path: root/nixos/lib
diff options
context:
space:
mode:
authorBob van der Linden <bobvanderlinden@gmail.com>2014-10-26 22:47:15 +0100
committerVladimír Čunát <vcunat@gmail.com>2015-03-24 22:01:51 +0100
commit16a936be90ee442a00b397a8f62060d5e4c062c9 (patch)
tree687b5481745ce22cfcdf3a267476b7193fe68488 /nixos/lib
parent8d092270d28d82aa5623bcde55a2ee85129ac1f1 (diff)
nixos: iso-image: filename escaping in xorriso
Diffstat (limited to 'nixos/lib')
-rw-r--r--nixos/lib/make-iso9660-image.sh30
1 files changed, 19 insertions, 11 deletions
diff --git a/nixos/lib/make-iso9660-image.sh b/nixos/lib/make-iso9660-image.sh
index c8522513aa23..c9a373794692 100644
--- a/nixos/lib/make-iso9660-image.sh
+++ b/nixos/lib/make-iso9660-image.sh
@@ -13,6 +13,20 @@ stripSlash() {
if test "${res:0:1}" = /; then res=${res:1}; fi
}
+# Escape potential equal signs (=) with backslash (\=)
+escapeEquals() {
+ echo "$1" | sed -e 's/\\/\\\\/g' -e 's/=/\\=/g'
+}
+
+# Queues an file/directory to be placed on the ISO.
+# An entry consists of a local source path (2) and
+# a destination path on the ISO (1).
+addPath() {
+ target="$1"
+ source="$2"
+ echo "$(escapeEquals "$target")=$(escapeEquals "$source")" >> pathlist
+}
+
stripSlash "$bootImage"; bootImage="$res"
@@ -53,14 +67,14 @@ touch pathlist
# Add the individual files.
for ((i = 0; i < ${#targets_[@]}; i++)); do
stripSlash "${targets_[$i]}"
- echo "$res=${sources_[$i]}" >> pathlist
+ addPath "$res" "${sources_[$i]}"
done
# Add the closures of the top-level store objects.
storePaths=$(perl $pathsFromGraph closure-*)
for i in $storePaths; do
- echo "${i:1}=$i" >> pathlist
+ addPath "${i:1}" "$i"
done
@@ -68,7 +82,7 @@ done
# nix-store --load-db.
if [ -n "$object" ]; then
printRegistration=1 perl $pathsFromGraph closure-* > nix-path-registration
- echo "nix-path-registration=nix-path-registration" >> pathlist
+ addPath "nix-path-registration" "nix-path-registration"
fi
@@ -79,16 +93,10 @@ for ((n = 0; n < ${#objects[*]}; n++)); do
if test "$symlink" != "none"; then
mkdir -p $(dirname ./$symlink)
ln -s $object ./$symlink
- echo "$symlink=./$symlink" >> pathlist
+ addPath "$symlink" "./$symlink"
fi
done
-# Escape filenames that contain '='.
-# TODO: Handle this properly. This fails for filenames
-# that contain multiple '=' symbols.
-cat pathlist | sed -e 's/=\(.*\)=\(.*\)=/\\=\1=\2\\=/' | tee pathlist.safer
-
-
mkdir -p $out/iso
xorriso="xorriso
@@ -103,7 +111,7 @@ xorriso="xorriso
${usbBootFlags}
${efiBootFlags}
-r
- -path-list pathlist.safer
+ -path-list pathlist
--sort-weight 0 /
--sort-weight 1 /isolinux" # Make sure isolinux is near the beginning of the ISO