MonoImage
*
mono_image_open_from_data_with_name (char
*
data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus
*
status, gboolean refonly, const char
*
name)
{
MonoCLIImageInfo
*
iinfo;
MonoImage
*
image;
char
*
datac;
if
(!data || !data_len) {
if
(status)
*
status
=
MONO_IMAGE_IMAGE_INVALID;
return
NULL;
}
datac
=
data;
if
(need_copy) {
datac
=
g_try_malloc (data_len);
if
(!datac) {
if
(status)
*
status
=
MONO_IMAGE_ERROR_ERRNO;
return
NULL;
}
memcpy (datac, data, data_len);
}
image
=
g_new0 (MonoImage,
1
);
image
-
>raw_data
=
datac;
image
-
>raw_data_len
=
data_len;
image
-
>raw_data_allocated
=
need_copy;
image
-
>name
=
(name
=
=
NULL) ? g_strdup_printf (
"data-%p"
, datac) : g_strdup(name);
iinfo
=
g_new0 (MonoCLIImageInfo,
1
);
image
-
>image_info
=
iinfo;
image
-
>ref_only
=
refonly;
image
-
>ref_count
=
1
;
image
=
do_mono_image_load (image, status, TRUE, TRUE);
if
(image
=
=
NULL)
return
NULL;
return
register_image (image);
}