# HG changeset patch # User Pascal Bellard # Date 1394189410 0 # Node ID d814ca840c3c45024399a6bfed1f09c97ff0e488 # Parent f6c50dca5c38d6bc3b00ce531d23d3bc29a7ccbd syslinux/iso2exe: fix cmdline diff -r f6c50dca5c38 -r d814ca840c3c syslinux/stuff/iso2exe/boot.c --- a/syslinux/stuff/iso2exe/boot.c Thu Mar 06 23:00:20 2014 +0100 +++ b/syslinux/stuff/iso2exe/boot.c Fri Mar 07 10:50:10 2014 +0000 @@ -24,7 +24,7 @@ static void bootiso(char **iso) { - char *init = "rdinit=/init.exe", *mode="menu"; + char *init = " rdinit=/init.exe", *mode="menu", *fmt=""; char c, rootfs[16], cmdline[256]; int restart; unsigned long magic; @@ -40,18 +40,24 @@ } if (isoopen(mode)) isoopen("bzImage"); - if (loadkernel() < 0x20630) + magic = loadkernel(); + if (magic < 0x20630) init = ""; // Does not support multiple initramfs - isoopen(rootfs); - loadinitrd(); - lseek(isofd, 24, SEEK_SET); - read(isofd, &magic, 4); - isofilesize = magic & 0xFFFF; - isofileofs = 0x7EE0 - isofilesize; - loadinitrd(); + if (magic > 0) { + fmt = "rw root=/dev/null%s iso=%s magic=%lu mode=%s"; + isoopen(rootfs); + loadinitrd(); + if (*init) { + lseek(isofd, 24L, SEEK_SET); + read(isofd, &magic, 4); + isofilesize = magic & 0xFFFFL; + isofileofs = 0x7EE0L - isofilesize; + if (isofilesize) loadinitrd(); + else init=""; + } + } + sprintf(cmdline, fmt, init, *iso, magic, mode); close(isofd); - sprintf(cmdline,"rw root=/dev/null %s iso=%s magic=%lu mode=%s", - init, *iso, magic, mode); bootlinux(cmdline); } @@ -135,7 +141,7 @@ } if (cmdfile) { int fd; - fd = chkstatus(open(cmdfile, O_RDONLY), chkstatus); + fd = chkstatus(open(cmdfile, O_RDONLY), cmdfile); if (fd != -1) { read(fd, args, sizeof(args)); close(fd); diff -r f6c50dca5c38 -r d814ca840c3c syslinux/stuff/iso2exe/bootlinux.c --- a/syslinux/stuff/iso2exe/bootlinux.c Thu Mar 06 23:00:20 2014 +0100 +++ b/syslinux/stuff/iso2exe/bootlinux.c Fri Mar 07 10:50:10 2014 +0000 @@ -24,7 +24,7 @@ #define PAGE_BITS 12 #define PAGE_SIZE 4096 -#define BUFFERSZ 2048 // lower than mix setup +#define BUFFERSZ 2048 // lower than min setup static char buffer[BUFFERSZ]; static unsigned long initrd_addr = 0, initrd_size; @@ -289,17 +289,6 @@ #asm push #SETUP_SEGMENT pop es - push es - pop ss - mov sp, #CMDLINE_OFFSET - mov eax, _initrd_addr - or eax, eax - jz no_initrd - mov di, #0x218 - stosd - mov eax, _initrd_size - stosd -no_initrd: #endasm if (cmdline) { if (setup_version <= 0x201) { @@ -328,6 +317,20 @@ jne copy #endasm } + if (setup_version >= 0x200) { +#asm + mov eax, _initrd_addr + mov di, #0x218 + stosd + mov eax, _initrd_size + stosd +#endasm + } +#asm + push es + pop ss + mov sp, #CMDLINE_OFFSET +#endasm #ifdef ZIMAGE_SUPPORT if (zimage) { #asm diff -r f6c50dca5c38 -r d814ca840c3c syslinux/stuff/iso2exe/init --- a/syslinux/stuff/iso2exe/init Thu Mar 06 23:00:20 2014 +0100 +++ b/syslinux/stuff/iso2exe/init Fri Mar 07 10:50:10 2014 +0000 @@ -350,7 +350,7 @@ cdexe() { - [ $(get 0 /media/cdrom/$1 2> /dev/null || echo 0) -ne 23117 ] && + [ $(get 0 /media/cdrom/$1 2> /dev/null || echo 0) -eq 23117 ] && echo -en "\"$2\" \"$3\"" }