fix kernel commandline "parsing" -> do not always cut off the last
[linexec-j720] / boot.cpp
index 1204c7973214a7d2f6a756f8792133f2c071f99e..5b0a0b7573d3ffd0f5ab746df8e81605ac6390e7 100644 (file)
--- 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);
 
@@ -54,7 +53,7 @@ void setup_linux_params(long bootimg_dest, UINT32 initrd,UINT32 initrdl, long dr
        if (initrdl) {
                tag->hdr.tag = INITRD_TAG;
                tag->hdr.size = tag_size(tag_initrd);
-               tag->u.initrd.start = initrd;
+               tag->u.initrd.start = INITRD;
                tag->u.initrd.size = initrdl;
                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);
 
Impressum, Datenschutz