about summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2012-03-13 21:32:09 +0000
committerShea Levy <shea@shealevy.com>2012-03-13 21:32:09 +0000
commit21d7f598c8c4cf04a57f06b032cc4f38009faf41 (patch)
tree7a2101cfb6bde4a73b99fcad6ed3bcadba11af01 /pkgs/tools
parent63b934c36f32f2fd06b4cf9cab06b63b46e3549d (diff)
efibootmgr: Create patch to allow arbitrary loader filenames
This is required for the NixOS efiBootStub module, since the default 40
characters is not enough for efi\nixos\{hash}-linux-3.3-rc7-bzImage.efi

svn path=/nixpkgs/trunk/; revision=33049
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/system/efibootmgr/arbitrary-filenames.patch24
-rw-r--r--pkgs/tools/system/efibootmgr/default.nix3
2 files changed, 26 insertions, 1 deletions
diff --git a/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch b/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch
new file mode 100644
index 0000000000000..ae542ac879527
--- /dev/null
+++ b/pkgs/tools/system/efibootmgr/arbitrary-filenames.patch
@@ -0,0 +1,24 @@
+diff -Naur efibootmgr-0.5.4-orig/src/lib/efi.c efibootmgr-0.5.4/src/lib/efi.c
+--- efibootmgr-0.5.4-orig/src/lib/efi.c	2008-01-03 15:34:01.000000000 +0100
++++ efibootmgr-0.5.4/src/lib/efi.c	2012-03-13 22:25:51.000000000 +0100
+@@ -495,7 +495,8 @@
+     int rc, edd_version=0;
+     uint8_t mbr_type=0, signature_type=0;
+     uint64_t start=0, size=0;
+-    efi_char16_t os_loader_path[40];
++    efi_char16_t *os_loader_path;
++    size_t os_loader_path_size;
+ 
+     memset(signature, 0, sizeof(signature));
+ 
+@@ -535,7 +536,9 @@
+ 				     signature,
+ 				     mbr_type, signature_type);
+ 
+-    efichar_from_char(os_loader_path, opts.loader, sizeof(os_loader_path));
++    os_loader_path_size = sizeof(efi_char16_t) * (1 + strlen(opts.loader) / sizeof(char));
++    os_loader_path = malloc(os_loader_path_size);
++    efichar_from_char(os_loader_path, opts.loader, os_loader_path_size);
+     p += make_file_path_device_path (p, os_loader_path);
+     p += make_end_device_path       (p);
+ 
diff --git a/pkgs/tools/system/efibootmgr/default.nix b/pkgs/tools/system/efibootmgr/default.nix
index bf4c429808b22..618454d87a461 100644
--- a/pkgs/tools/system/efibootmgr/default.nix
+++ b/pkgs/tools/system/efibootmgr/default.nix
@@ -7,13 +7,14 @@ stdenv.mkDerivation {
 
   buildInputs = [ pciutils zlib perl ];
 
+  patches = [ ./arbitrary-filenames.patch ];
   
   src = fetchurl {
     url = "http://linux.dell.com/efibootmgr/permalink/efibootmgr-${version}.tar.gz";
     sha256 = "0wcfgf8x4p4xfh38m9x3njwsxibm9bhnmvpjj94lj9sk9xxa8qmm";
   };
 
-  patchPhase = ''
+  postPatch = ''
     substituteInPlace "./tools/install.pl" \
       --replace "/usr/bin/perl" "${perl}/bin/perl"
   '';