diff options
author | Michael Brown <mcb30@ipxe.org> | 2024-08-29 13:08:27 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2024-08-29 13:09:41 +0100 |
commit | 49404bfea99f68f4c364ea30a9ad3ea6ffb7e5f6 (patch) | |
tree | 6599090fbec8e3025987dae195a04a60e3a93613 | |
parent | 748cab7745186ec6c770fb4d47b0e8c9f213e6df (diff) | |
download | ipxe-49404bfea99f68f4c364ea30a9ad3ea6ffb7e5f6.tar.gz |
[image] Split image_strip_suffix() out from image_extract()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/core/archive.c | 7 | ||||
-rw-r--r-- | src/core/image.c | 19 | ||||
-rw-r--r-- | src/include/ipxe/image.h | 1 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/core/archive.c b/src/core/archive.c index bb62c7e47..3d3f00cc6 100644 --- a/src/core/archive.c +++ b/src/core/archive.c @@ -43,7 +43,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); */ int image_extract ( struct image *image, const char *name, struct image **extracted ) { - char *dot; int rc; /* Check that this image can be used to extract an archive image */ @@ -66,10 +65,8 @@ int image_extract ( struct image *image, const char *name, } /* Strip any archive or compression suffix from implicit name */ - if ( ( ! name ) && ( (*extracted)->name ) && - ( ( dot = strrchr ( (*extracted)->name, '.' ) ) != NULL ) ) { - *dot = '\0'; - } + if ( ! name ) + image_strip_suffix ( *extracted ); /* Try extracting archive image */ if ( ( rc = image->type->extract ( image, *extracted ) ) != 0 ) { diff --git a/src/core/image.c b/src/core/image.c index bf0e4f756..c69c05c93 100644 --- a/src/core/image.c +++ b/src/core/image.c @@ -173,6 +173,25 @@ int image_set_name ( struct image *image, const char *name ) { } /** + * Strip dot suffix from image name, if present + * + * @v image Image + * @ret sep Position of old dot separator, or NULL + */ +char * image_strip_suffix ( struct image *image ) { + char *dot; + + /* Locate and strip suffix, if present */ + if ( image->name && + ( ( dot = strrchr ( image->name, '.' ) ) != NULL ) ) { + *dot = '\0'; + return dot; + } + + return NULL; +} + +/** * Set image command line * * @v image Image diff --git a/src/include/ipxe/image.h b/src/include/ipxe/image.h index bfbf23687..ca383dc7b 100644 --- a/src/include/ipxe/image.h +++ b/src/include/ipxe/image.h @@ -188,6 +188,7 @@ static inline struct image * first_image ( void ) { 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 char * image_strip_suffix ( struct image *image ); 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 ); |