From 49404bfea99f68f4c364ea30a9ad3ea6ffb7e5f6 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 29 Aug 2024 13:08:27 +0100 Subject: [image] Split image_strip_suffix() out from image_extract() Signed-off-by: Michael Brown --- src/core/archive.c | 7 ++----- src/core/image.c | 19 +++++++++++++++++++ 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 @@ -172,6 +172,25 @@ int image_set_name ( struct image *image, const char *name ) { return 0; } +/** + * 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 * 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 ); -- cgit