File grub-long-commandline of Package grub

Gentoo bug #183443, #216307
Upstream: http://savannah.gnu.org/bugs/?13606

Support commandlines with >255 characters. Common in manual netboot and
root-on-iSCSI setups. Usable for kernels >2.6.21_rc1


Acked-by: Bernhard Walle <bwalle@suse.de>

---
 stage2/boot.c   |   11 ++++++++++-
 stage2/shared.h |    4 +++-
 2 files changed, 13 insertions(+), 2 deletions(-)

--- a/stage2/boot.c
+++ b/stage2/boot.c
@@ -241,7 +241,7 @@ load_image (char *kernel, char *arg, ker
 	    }
 
 	  if (lh->version >= 0x0202)
-	    lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
+	    lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET;
 	  else
 	    {
 	      lh->cl_magic = LINUX_CL_MAGIC;
@@ -407,6 +407,15 @@ load_image (char *kernel, char *arg, ker
 	    while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
 	      *(dest++) = *(src++);
 	
+	    {
+	    char *src = skip_to (0, arg);
+	    char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET;
+
+	    while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src)
+	      *(dest++) = *(src++);
+	    *dest = 0;
+	    }
+
 	    /* Old Linux kernels have problems determining the amount of
 	       the available memory.  To work around this problem, we add
 	       the "mem" option to the kernel command line.  This has its
--- a/stage2/shared.h
+++ b/stage2/shared.h
@@ -161,7 +161,9 @@ extern char *grub_scratch_mem;
 
 #define LINUX_CL_OFFSET			0x9000
 #define LINUX_CL_END_OFFSET		0x90FF
-#define LINUX_SETUP_MOVE_SIZE		0x9100
+#define LINUX_CL_0202_PRM_OFFSET	0x9500
+#define LINUX_CL_0202_PRM_END_OFFSET	0x9FFF
+#define LINUX_SETUP_MOVE_SIZE		0xA000
 #define LINUX_CL_MAGIC			0xA33F
 
 /*
openSUSE Build Service is sponsored by