diff options
author | Michael Brown <mcb30@ipxe.org> | 2021-01-20 18:08:04 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2021-01-22 18:44:58 +0000 |
commit | b99477b3fa6d4063314a313f62b7ae784bcbe710 (patch) | |
tree | 91c8cdc57cac2de558278c81628d9ea7ed02b6ba /src/usr | |
parent | 99ac69b8a9a48207913e98ac6b357c029b0eef81 (diff) | |
download | ipxe-b99477b3fa6d4063314a313f62b7ae784bcbe710.tar.gz |
[image] Add the "imgmem" command
Provide the "imgmem" command to create an image from an existing block
of memory, for debugging purposes only.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/imgmgmt.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c index a01d6e291..bf4c745ea 100644 --- a/src/usr/imgmgmt.c +++ b/src/usr/imgmgmt.c @@ -169,3 +169,47 @@ void imgstat ( struct image *image ) { printf ( " \"%s\"", image->cmdline ); printf ( "\n" ); } + +/** + * Create image from block of memory + * + * @v data Image data + * @v len Length + * @v name Name + * @v image Image to fill in + * @ret rc Return status code + */ +int imgmem ( userptr_t data, size_t len, const char *name, + struct image **image ) { + int rc; + + /* Allocate image */ + *image = alloc_image ( NULL ); + if ( ! *image ) { + rc = -ENOMEM; + goto err_alloc_image; + } + + /* Set name */ + if ( ( rc = image_set_name ( *image, name ) ) != 0 ) + goto err_set_name; + + /* Set data */ + if ( ( rc = image_set_data ( *image, data, len ) ) != 0 ) { + printf ( "Could not set image data: %s\n", strerror ( rc ) ); + goto err_set_data; + } + + /* Register image */ + if ( ( rc = register_image ( *image ) ) != 0 ) { + printf ( "Could not register image: %s\n", strerror ( rc ) ); + goto err_register_image; + } + + err_register_image: + err_set_data: + err_set_name: + image_put ( *image ); + err_alloc_image: + return rc; +} |