multiboot: Support commas in module parameters
Support commas in the parameter list of multiboot modules as well as for the kernel command line, by using double commas (via get_opt_value()). Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									6141dbfe0a
								
							
						
					
					
						commit
						49e40b6627
					
				| @ -97,11 +97,11 @@ typedef struct { | ||||
| 
 | ||||
| static uint32_t mb_add_cmdline(MultibootState *s, const char *cmdline) | ||||
| { | ||||
|     int len = strlen(cmdline) + 1; | ||||
|     target_phys_addr_t p = s->offset_cmdlines; | ||||
|     char *b = (char *)s->mb_buf + p; | ||||
| 
 | ||||
|     pstrcpy((char *)s->mb_buf + p, len, cmdline); | ||||
|     s->offset_cmdlines += len; | ||||
|     get_opt_value(b, strlen(cmdline) + 1, cmdline); | ||||
|     s->offset_cmdlines += strlen(b) + 1; | ||||
|     return s->mb_buf_phys + p; | ||||
| } | ||||
| 
 | ||||
| @ -238,7 +238,7 @@ int load_multiboot(void *fw_cfg, | ||||
|         const char *r = initrd_filename; | ||||
|         mbs.mb_buf_size += strlen(r) + 1; | ||||
|         mbs.mb_mods_avail = 1; | ||||
|         while ((r = strchr(r, ','))) { | ||||
|         while (*(r = get_opt_value(NULL, 0, r))) { | ||||
|            mbs.mb_mods_avail++; | ||||
|            r++; | ||||
|         } | ||||
| @ -252,7 +252,7 @@ int load_multiboot(void *fw_cfg, | ||||
|     mbs.offset_cmdlines = mbs.offset_mbinfo + mbs.mb_mods_avail * MB_MOD_SIZE; | ||||
| 
 | ||||
|     if (initrd_filename) { | ||||
|         char *next_initrd; | ||||
|         char *next_initrd, not_last; | ||||
| 
 | ||||
|         mbs.offset_mods = mbs.mb_buf_size; | ||||
| 
 | ||||
| @ -261,9 +261,9 @@ int load_multiboot(void *fw_cfg, | ||||
|             int mb_mod_length; | ||||
|             uint32_t offs = mbs.mb_buf_size; | ||||
| 
 | ||||
|             next_initrd = strchr(initrd_filename, ','); | ||||
|             if (next_initrd) | ||||
|                 *next_initrd = '\0'; | ||||
|             next_initrd = (char *)get_opt_value(NULL, 0, initrd_filename); | ||||
|             not_last = *next_initrd; | ||||
|             *next_initrd = '\0'; | ||||
|             /* if a space comes after the module filename, treat everything
 | ||||
|                after that as parameters */ | ||||
|             target_phys_addr_t c = mb_add_cmdline(&mbs, initrd_filename); | ||||
| @ -287,7 +287,7 @@ int load_multiboot(void *fw_cfg, | ||||
|                      (char *)mbs.mb_buf + offs, | ||||
|                      (char *)mbs.mb_buf + offs + mb_mod_length, c); | ||||
|             initrd_filename = next_initrd+1; | ||||
|         } while (next_initrd); | ||||
|         } while (not_last); | ||||
|     } | ||||
| 
 | ||||
|     /* Commandline support */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Adam Lackorzynski
						Adam Lackorzynski