[image] Split image_strip_suffix() out from image_extract()

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/1171/head
Michael Brown 2024-08-29 13:08:27 +01:00
parent 748cab7745
commit 49404bfea9
3 changed files with 22 additions and 5 deletions

View File

@ -43,7 +43,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/ */
int image_extract ( struct image *image, const char *name, int image_extract ( struct image *image, const char *name,
struct image **extracted ) { struct image **extracted ) {
char *dot;
int rc; int rc;
/* Check that this image can be used to extract an archive image */ /* 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 */ /* Strip any archive or compression suffix from implicit name */
if ( ( ! name ) && ( (*extracted)->name ) && if ( ! name )
( ( dot = strrchr ( (*extracted)->name, '.' ) ) != NULL ) ) { image_strip_suffix ( *extracted );
*dot = '\0';
}
/* Try extracting archive image */ /* Try extracting archive image */
if ( ( rc = image->type->extract ( image, *extracted ) ) != 0 ) { if ( ( rc = image->type->extract ( image, *extracted ) ) != 0 ) {

View File

@ -172,6 +172,25 @@ int image_set_name ( struct image *image, const char *name ) {
return 0; 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 * Set image command line
* *

View File

@ -188,6 +188,7 @@ static inline struct image * first_image ( void ) {
extern struct image * alloc_image ( struct uri *uri ); extern struct image * alloc_image ( struct uri *uri );
extern int image_set_uri ( struct image *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_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_cmdline ( struct image *image, const char *cmdline );
extern int image_set_len ( struct image *image, size_t len ); 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 image_set_data ( struct image *image, userptr_t data, size_t len );