Add ability to generate newc additions on runtime.
This commit is contained in:
		
							parent
							
								
									0ec45a682c
								
							
						
					
					
						commit
						92750e4c60
					
				
					 10 changed files with 366 additions and 201 deletions
				
			
		|  | @ -32,6 +32,7 @@ | |||
| #include <grub/elf.h> | ||||
| #include <grub/i18n.h> | ||||
| #include <grub/env.h> | ||||
| #include <grub/linux.h> | ||||
| 
 | ||||
| GRUB_MOD_LICENSE ("GPLv3+"); | ||||
| 
 | ||||
|  | @ -567,10 +568,7 @@ static grub_err_t | |||
| grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), | ||||
| 		 int argc, char *argv[]) | ||||
| { | ||||
|   grub_file_t *files = 0; | ||||
|   int i; | ||||
|   int nfiles = 0; | ||||
|   grub_uint8_t *ptr; | ||||
|   struct grub_linux_initrd_context initrd_ctx; | ||||
| 
 | ||||
|   if (argc == 0) | ||||
|     { | ||||
|  | @ -584,22 +582,11 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), | |||
|       goto fail; | ||||
|     } | ||||
| 
 | ||||
|   files = grub_zalloc (argc * sizeof (files[0])); | ||||
|   if (!files) | ||||
|   if (grub_initrd_init (argc, argv, &initrd_ctx)) | ||||
|     goto fail; | ||||
| 
 | ||||
|   initrd_size = 0; | ||||
|   initrd_size = grub_get_initrd_size (&initrd_ctx); | ||||
|   grub_dprintf ("linux", "Loading initrd\n"); | ||||
|   for (i = 0; i < argc; i++) | ||||
|     { | ||||
|       grub_file_filter_disable_compression (); | ||||
|       files[i] = grub_file_open (argv[i]); | ||||
|       if (! files[i]) | ||||
| 	goto fail; | ||||
|       nfiles++; | ||||
|       initrd_size += ALIGN_UP (grub_file_size (files[i]), 4); | ||||
|       grub_dprintf ("linux", "File %d: %s\n", i, argv[i]); | ||||
|     } | ||||
| 
 | ||||
|   initrd_pages = (page_align (initrd_size) >> 12); | ||||
|   initrd_mem = grub_efi_allocate_pages (0, initrd_pages); | ||||
|  | @ -612,25 +599,10 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), | |||
|   grub_dprintf ("linux", "[addr=0x%lx, size=0x%lx]\n", | ||||
| 		(grub_uint64_t) initrd_mem, initrd_size); | ||||
| 
 | ||||
|   ptr = initrd_mem; | ||||
|   for (i = 0; i < nfiles; i++) | ||||
|     { | ||||
|       grub_ssize_t cursize = grub_file_size (files[i]); | ||||
|       if (grub_file_read (files[i], ptr, cursize) != cursize) | ||||
| 	{ | ||||
| 	  if (!grub_errno) | ||||
| 	    grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), | ||||
| 			argv[i]); | ||||
| 	  goto fail; | ||||
| 	} | ||||
|       ptr += cursize; | ||||
|       grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4)); | ||||
|       ptr += ALIGN_UP_OVERHEAD (cursize, 4); | ||||
|     } | ||||
|   if (grub_initrd_load (&initrd_ctx, argv, initrd_mem)) | ||||
|     goto fail; | ||||
|  fail: | ||||
|   for (i = 0; i < nfiles; i++) | ||||
|     grub_file_close (files[i]); | ||||
|   grub_free (files); | ||||
|   grub_initrd_close (&initrd_ctx); | ||||
|   return grub_errno; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue