aboutsummaryrefslogtreecommitdiff
path: root/src/usr
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2021-01-20 18:08:04 +0000
committerMichael Brown <mcb30@ipxe.org>2021-01-22 18:44:58 +0000
commitb99477b3fa6d4063314a313f62b7ae784bcbe710 (patch)
tree91c8cdc57cac2de558278c81628d9ea7ed02b6ba /src/usr
parent99ac69b8a9a48207913e98ac6b357c029b0eef81 (diff)
downloadipxe-b99477b3fa6d4063314a313f62b7ae784bcbe710.zip
ipxe-b99477b3fa6d4063314a313f62b7ae784bcbe710.tar.gz
ipxe-b99477b3fa6d4063314a313f62b7ae784bcbe710.tar.bz2
[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.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c
index a01d6e2..bf4c745 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;
+}