diff options
author | midipix <writeonce@midipix.org> | 2018-08-03 23:16:42 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2018-08-03 21:13:31 -0400 |
commit | 2f4c03923b250a3bbf96188ceb91979841a95e91 (patch) | |
tree | 0b0a3fe3c47081345b72e9d7caa25b834c1cfbe9 /src/util | |
parent | 1c93c26f73c2e8746defed21d22d83d08ac16eaf (diff) | |
download | mdso-2f4c03923b250a3bbf96188ceb91979841a95e91.tar.bz2 mdso-2f4c03923b250a3bbf96188ceb91979841a95e91.tar.xz |
library interfaces: archive generation: simplify, re-implement with mmap.
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/mdso_create_implib_archive.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/util/mdso_create_implib_archive.c b/src/util/mdso_create_implib_archive.c index e5e5d01..11373b4 100644 --- a/src/util/mdso_create_implib_archive.c +++ b/src/util/mdso_create_implib_archive.c @@ -15,8 +15,7 @@ static void mdso_free_uctx_vector( struct mdso_unit_ctx ** uctxv, const char ** symv, - int * stype, - FILE * fout) + int * stype) { struct mdso_unit_ctx ** puctx; @@ -30,16 +29,14 @@ static void mdso_free_uctx_vector( mdso_free_unit_ctx(*puctx); free(uctxv); - fclose(fout); } int mdso_create_implib_archive(const struct mdso_driver_ctx * dctx) { - int ret; - FILE * fout; size_t nsym; struct mdso_unit_ctx ** uctxv; struct mdso_unit_ctx ** puctx; + struct mdso_object obj; const char * const * dsym; const char ** unit; const char ** psym; @@ -55,12 +52,9 @@ int mdso_create_implib_archive(const struct mdso_driver_ctx * dctx) if (!(uctxv = calloc(++unit - dctx->units,sizeof(*uctxv)))) return MDSO_SYSTEM_ERROR(dctx); - if (!(fout = mdso_create_archive(dctx,dctx->cctx->implib))) - return MDSO_NESTED_ERROR(dctx); - for (puctx=uctxv,unit=dctx->units; *unit; unit++) { if (mdso_get_unit_ctx(dctx,*unit,puctx++)) { - mdso_free_uctx_vector(uctxv,0,0,fout); + mdso_free_uctx_vector(uctxv,0,0); return MDSO_NESTED_ERROR(dctx); } } @@ -70,12 +64,12 @@ int mdso_create_implib_archive(const struct mdso_driver_ctx * dctx) nsym++; if (!(symv = calloc(nsym+1,sizeof(const char *)))) { - mdso_free_uctx_vector(uctxv,0,0,fout); + mdso_free_uctx_vector(uctxv,0,0); return MDSO_SYSTEM_ERROR(dctx); } if (!(stype = calloc(nsym+1,sizeof(int)))) { - mdso_free_uctx_vector(uctxv,symv,0,fout); + mdso_free_uctx_vector(uctxv,symv,0); return MDSO_SYSTEM_ERROR(dctx); } @@ -86,8 +80,13 @@ int mdso_create_implib_archive(const struct mdso_driver_ctx * dctx) } } - ret = mdso_argen_common(dctx,symv,stype,fout,0); - mdso_free_uctx_vector(uctxv,symv,stype,fout); + memset(&obj,0,sizeof(obj)); + obj.name = dctx->cctx->implib; + + if (mdso_argen_common(dctx,symv,stype,&obj) < 0) { + mdso_free_uctx_vector(uctxv,symv,stype); + return MDSO_NESTED_ERROR(dctx); + } - return ret ? MDSO_NESTED_ERROR(dctx) : 0; + return 0; } |