# HG changeset patch # User Matti Hamalainen # Date 1493220255 -10800 # Node ID 403c67bcb76a3c308e45be37296c6b8f342037b4 # Parent 91f27e9fdb605d757831260f96d48f0f9b805143 Use bpg_insert_md() and bpg_add_md_contents() in jpeg_get_metadata() also. diff -r 91f27e9fdb60 -r 403c67bcb76a bpgenc.c --- a/bpgenc.c Wed Apr 26 18:22:11 2017 +0300 +++ b/bpgenc.c Wed Apr 26 18:24:15 2017 +0300 @@ -1337,15 +1337,14 @@ static const char app1_xmp[] = "http://ns.adobe.com/xap/1.0/"; static const char app2_iccp[] = "ICC_PROFILE"; jpeg_saved_marker_ptr marker; - BPGMetaData *md, **plast_md, *first_md; + BPGMetaData *md_list; int has_exif, has_xmp, l, iccp_chunk_count, i; jpeg_saved_marker_ptr iccp_chunks[256]; iccp_chunk_count = 0; has_exif = 0; has_xmp = 0; - first_md = NULL; - plast_md = &first_md; + md_list = NULL; for (marker = first_marker; marker != NULL; marker = marker->next) { #if 0 printf("marker=APP%d len=%d\n", @@ -1354,25 +1353,15 @@ if (!has_exif && marker->marker == JPEG_APP0 + 1 && marker->data_length > sizeof(app1_exif) && !memcmp(marker->data, app1_exif, sizeof(app1_exif))) { - md = bpg_md_alloc(BPG_EXTENSION_TAG_EXIF); l = sizeof(app1_exif); - md->buf_len = marker->data_length - l; - md->buf = malloc(md->buf_len); - memcpy(md->buf, marker->data + l, md->buf_len); - *plast_md = md; - plast_md = &md->next; + bpg_add_md_contents(&md_list, BPG_EXTENSION_TAG_EXIF, marker->data_length - l, marker->data + l); has_exif = 1; } else if (!has_xmp && marker->marker == JPEG_APP0 + 1 && marker->data_length > sizeof(app1_xmp) && !memcmp(marker->data, app1_xmp, sizeof(app1_xmp)) && !has_xmp) { - md = bpg_md_alloc(BPG_EXTENSION_TAG_XMP); l = sizeof(app1_xmp); - md->buf_len = marker->data_length - l; - md->buf = malloc(md->buf_len); - memcpy(md->buf, marker->data + l, md->buf_len); - *plast_md = md; - plast_md = &md->next; + bpg_add_md_contents(&md_list, BPG_EXTENSION_TAG_XMP, marker->data_length - l, marker->data + l); has_xmp = 1; } else if (marker->marker == JPEG_APP0 + 2 && marker->data_length > (sizeof(app2_iccp) + 2) && @@ -1409,21 +1398,19 @@ len += iccp_chunks[i]->data_length - hlen; } if (i == iccp_chunk_count) { - md = bpg_md_alloc(BPG_EXTENSION_TAG_ICCP); + BPGMetaData *md = bpg_md_alloc(BPG_EXTENSION_TAG_ICCP); md->buf_len = len; md->buf = malloc(md->buf_len); - idx = 0; - for(i = 0; i < iccp_chunk_count; i++) { + bpg_insert_md(&md_list, md); + for(i = 0, idx = 0; i < iccp_chunk_count; i++) { l = iccp_chunks[i]->data_length - hlen; memcpy(md->buf + idx, iccp_chunks[i]->data + hlen, l); idx += l; } assert(idx == len); - *plast_md = md; - plast_md = &md->next; } } - return first_md; + return md_list; } Image *read_jpeg(BPGMetaData **pmd, FILE *f,