aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2024-08-29 13:08:27 +0100
committerMichael Brown <mcb30@ipxe.org>2024-08-29 13:09:41 +0100
commit49404bfea99f68f4c364ea30a9ad3ea6ffb7e5f6 (patch)
tree6599090fbec8e3025987dae195a04a60e3a93613
parent748cab7745186ec6c770fb4d47b0e8c9f213e6df (diff)
downloadipxe-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.c7
-rw-r--r--src/core/image.c19
-rw-r--r--src/include/ipxe/image.h1
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 );