diff --git a/include/slibtool/slibtool_arbits.h b/include/slibtool/slibtool_arbits.h index 37e3a9a..8168f04 100644 --- a/include/slibtool/slibtool_arbits.h +++ b/include/slibtool/slibtool_arbits.h @@ -136,6 +136,7 @@ struct ar_meta_armap_ref_64 { struct ar_meta_armap_common_32 { struct ar_meta_member_info * ar_member; + struct ar_meta_armap_ref_32 * ar_symrefs; struct ar_raw_armap_bsd_32 * ar_armap_bsd; struct ar_raw_armap_sysv_32 * ar_armap_sysv; struct ar_raw_armap_xcoff_32 * ar_armap_xcoff; @@ -151,6 +152,7 @@ struct ar_meta_armap_common_32 { struct ar_meta_armap_common_64 { struct ar_meta_member_info * ar_member; + struct ar_meta_armap_ref_64 * ar_symrefs; struct ar_raw_armap_bsd_64 * ar_armap_bsd; struct ar_raw_armap_sysv_64 * ar_armap_sysv; void * ar_armap_xcoff; diff --git a/src/arbits/slbt_archive_meta.c b/src/arbits/slbt_archive_meta.c index d57b5bf..9f6595c 100644 --- a/src/arbits/slbt_archive_meta.c +++ b/src/arbits/slbt_archive_meta.c @@ -36,6 +36,12 @@ static const char ar_signature[] = AR_SIGNATURE; static int slbt_free_archive_meta_impl(struct slbt_archive_meta_impl * meta, int ret) { if (meta) { + if (meta->armaps.armap_symrefs_32) + free(meta->armaps.armap_symrefs_32); + + if (meta->armaps.armap_symrefs_64) + free(meta->armaps.armap_symrefs_64); + if (meta->hdrinfov) free(meta->hdrinfov); diff --git a/src/internal/slibtool_ar_impl.h b/src/internal/slibtool_ar_impl.h index b96b77b..48cdec8 100644 --- a/src/internal/slibtool_ar_impl.h +++ b/src/internal/slibtool_ar_impl.h @@ -8,6 +8,8 @@ extern const struct argv_option slbt_ar_options[]; struct ar_armaps_impl { + struct ar_meta_armap_ref_32 * armap_symrefs_32; + struct ar_meta_armap_ref_64 * armap_symrefs_64; struct ar_raw_armap_bsd_32 armap_bsd_32; struct ar_raw_armap_bsd_64 armap_bsd_64; struct ar_raw_armap_sysv_32 armap_sysv_32;