]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[image] Provide image_set_len() utility function
authorMichael Brown <mcb30@ipxe.org>
Thu, 6 May 2021 12:09:30 +0000 (13:09 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sat, 8 May 2021 14:34:19 +0000 (15:34 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/image.c
src/include/ipxe/image.h

index 9fe77c54c2cef9f2bf919c0e9c7cd76e94c08710..ce8cf868b09afb62192faf75e2ac3d9a1e5fe778 100644 (file)
@@ -176,14 +176,13 @@ int image_set_cmdline ( struct image *image, const char *cmdline ) {
 }
 
 /**
- * Set image data
+ * Set image length
  *
  * @v image            Image
- * @v data             Image data
  * @v len              Length of image data
  * @ret rc             Return status code
  */
-int image_set_data ( struct image *image, userptr_t data, size_t len ) {
+int image_set_len ( struct image *image, size_t len ) {
        userptr_t new;
 
        /* (Re)allocate image data */
@@ -191,10 +190,28 @@ int image_set_data ( struct image *image, userptr_t data, size_t len ) {
        if ( ! new )
                return -ENOMEM;
        image->data = new;
+       image->len = len;
+
+       return 0;
+}
+
+/**
+ * Set image data
+ *
+ * @v image            Image
+ * @v data             Image data
+ * @v len              Length of image data
+ * @ret rc             Return status code
+ */
+int image_set_data ( struct image *image, userptr_t data, size_t len ) {
+       int rc;
+
+       /* Set image length */
+       if ( ( rc = image_set_len ( image, len ) ) != 0 )
+               return rc;
 
        /* Copy in new image data */
        memcpy_user ( image->data, 0, data, 0, len );
-       image->len = len;
 
        return 0;
 }
index 4fd2700817b3a4edb314558bd9d362c5e837e3e1..046edf9a5bd11de584489c152bb5b2c1cc83cafe 100644 (file)
@@ -175,6 +175,7 @@ extern struct image * alloc_image ( struct uri *uri );
 extern int image_set_uri ( struct image *image, struct uri *uri );
 extern int image_set_name ( struct image *image, const char *name );
 extern int image_set_cmdline ( struct image *image, const char *cmdline );
+extern int image_set_len ( struct image *image, size_t len );
 extern int image_set_data ( struct image *image, userptr_t data, size_t len );
 extern int register_image ( struct image *image );
 extern void unregister_image ( struct image *image );