*/
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 */
}
/* 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 ) {
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
*
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 );