From: michael Date: Wed, 23 Nov 2005 19:16:24 +0000 (+0000) Subject: fix kernel commandline "parsing" -> do not always cut off the last X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/linexec-j720/commitdiff_plain/d4a1fe7da7b65b2be74457f9de20b8696cf636d7 fix kernel commandline "parsing" -> do not always cut off the last byte, it's not always a newline! --- diff --git a/boot.cpp b/boot.cpp index 5e5da9b..5b0a0b7 100644 --- a/boot.cpp +++ b/boot.cpp @@ -35,9 +35,8 @@ void setup_linux_params(long bootimg_dest, UINT32 initrd,UINT32 initrdl, long dr // now the cmdline tag tag->hdr.tag = ATAG_CMDLINE; - // must be at least +3!! 1 for the null and 2 for the ??? - tag->hdr.size = (strlen(cmdline) + 3 + sizeof(struct tag_header)) >> 2; - //tag->hdr.size = (strlen(cmdline) + 10 + sizeof(struct tag_header)) >> 2; + // tag header, zero-terminated string and round size to 32-bit words + tag->hdr.size = (sizeof (struct tag_header) + strlen (cmdline) + 1 + 3) >> 2; strcpy(tag->u.cmdline.cmdline,cmdline); tag = tag_next(tag); @@ -312,7 +311,12 @@ void load_boot(char *ParamFile) initrd[strlen(initrd)-1]=0; fgets(cmd,200,stream); - cmd[strlen(cmd)-1]=0; + if (cmd[strlen(cmd)-1] == 0x0a) + { + cmd[strlen(cmd)-1]=0; + if (cmd[strlen(cmd)-2] == 0x0d) + cmd[strlen(cmd)-2]=0; + } fclose(stream); diff --git a/out/linexec.exe b/out/linexec.exe index 0ce0334..529d0c6 100755 Binary files a/out/linexec.exe and b/out/linexec.exe differ