mirror of https://github.com/ipxe/ipxe.git
[image] Add image_asn1() to extract ASN.1 objects from image
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/56/head
parent
296670a648
commit
ef50608029
|
@ -505,3 +505,38 @@ int image_pixbuf ( struct image *image, struct pixel_buffer **pixbuf ) {
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract ASN.1 object from image
|
||||
*
|
||||
* @v image Image
|
||||
* @v offset Offset within image
|
||||
* @v cursor ASN.1 cursor to fill in
|
||||
* @ret next Offset to next image, or negative error
|
||||
*
|
||||
* The caller is responsible for eventually calling free() on the
|
||||
* allocated ASN.1 cursor.
|
||||
*/
|
||||
int image_asn1 ( struct image *image, size_t offset,
|
||||
struct asn1_cursor **cursor ) {
|
||||
int next;
|
||||
int rc;
|
||||
|
||||
/* Sanity check */
|
||||
assert ( offset <= image->len );
|
||||
|
||||
/* Check that this image can be used to extract an ASN.1 object */
|
||||
if ( ! ( image->type && image->type->asn1 ) )
|
||||
return -ENOTSUP;
|
||||
|
||||
/* Try creating ASN.1 cursor */
|
||||
next = image->type->asn1 ( image, offset, cursor );
|
||||
if ( next < 0 ) {
|
||||
rc = next;
|
||||
DBGC ( image, "IMAGE %s could not extract ASN.1 object: %s\n",
|
||||
image->name, strerror ( rc ) );
|
||||
return rc;
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
|
||||
struct uri;
|
||||
struct pixel_buffer;
|
||||
struct asn1_cursor;
|
||||
struct image_type;
|
||||
|
||||
/** An executable image */
|
||||
|
@ -99,6 +100,19 @@ struct image_type {
|
|||
* @ret rc Return status code
|
||||
*/
|
||||
int ( * pixbuf ) ( struct image *image, struct pixel_buffer **pixbuf );
|
||||
/**
|
||||
* Extract ASN.1 object from image
|
||||
*
|
||||
* @v image Image
|
||||
* @v offset Offset within image
|
||||
* @v cursor ASN.1 cursor to fill in
|
||||
* @ret next Offset to next image, or negative error
|
||||
*
|
||||
* The caller is responsible for eventually calling free() on
|
||||
* the allocated ASN.1 cursor.
|
||||
*/
|
||||
int ( * asn1 ) ( struct image *image, size_t offset,
|
||||
struct asn1_cursor **cursor );
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -170,6 +184,8 @@ extern int image_select ( struct image *image );
|
|||
extern struct image * image_find_selected ( void );
|
||||
extern int image_set_trust ( int require_trusted, int permanent );
|
||||
extern int image_pixbuf ( struct image *image, struct pixel_buffer **pixbuf );
|
||||
extern int image_asn1 ( struct image *image, size_t offset,
|
||||
struct asn1_cursor **cursor );
|
||||
|
||||
/**
|
||||
* Increment reference count on an image
|
||||
|
|
Loading…
Reference in New Issue