summary refs log tree commit diff
path: root/nixos/lib/make-iso9660-image.sh
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/make-iso9660-image.sh
parent8d092270d28d82aa5623bcde55a2ee85129ac1f1 (diff)
downloadnixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar.gz
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar.bz2
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar.lz
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar.xz
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.tar.zst
nixpkgs-16a936be90ee442a00b397a8f62060d5e4c062c9.zip
nixos: iso-image: filename escaping in xorriso
Diffstat (limited to 'nixos/lib/make-iso9660-image.sh')
-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 c8522513aa2..c9a37379469 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