From 2e30eb25a9f78fcb462c03c4766a8a8669c1f291 Mon Sep 17 00:00:00 2001 From: midipix Date: Wed, 21 Feb 2024 05:23:06 +0000 Subject: core api: simplified the _exec_ interfaces. --- src/driver/slbt_amain.c | 12 ++++++------ src/logic/slbt_exec_ar.c | 40 +++++++++++++++++----------------------- src/logic/slbt_exec_compile.c | 30 ++++++++++++------------------ src/logic/slbt_exec_execute.c | 25 +++++++++---------------- src/logic/slbt_exec_install.c | 31 ++++++++++++------------------- src/logic/slbt_exec_link.c | 40 +++++++++++++++++----------------------- src/logic/slbt_exec_uninstall.c | 25 +++++++++---------------- 7 files changed, 82 insertions(+), 121 deletions(-) (limited to 'src') diff --git a/src/driver/slbt_amain.c b/src/driver/slbt_amain.c index 86d5dd5..9b9103d 100644 --- a/src/driver/slbt_amain.c +++ b/src/driver/slbt_amain.c @@ -69,22 +69,22 @@ static void slbt_perform_driver_actions(struct slbt_driver_ctx * dctx) slbt_output_config(dctx); if (dctx->cctx->mode == SLBT_MODE_COMPILE) - slbt_exec_compile(dctx,0); + slbt_exec_compile(dctx); if (dctx->cctx->mode == SLBT_MODE_EXECUTE) - slbt_exec_execute(dctx,0); + slbt_exec_execute(dctx); if (dctx->cctx->mode == SLBT_MODE_INSTALL) - slbt_exec_install(dctx,0); + slbt_exec_install(dctx); if (dctx->cctx->mode == SLBT_MODE_LINK) - slbt_exec_link(dctx,0); + slbt_exec_link(dctx); if (dctx->cctx->mode == SLBT_MODE_UNINSTALL) - slbt_exec_uninstall(dctx,0); + slbt_exec_uninstall(dctx); if (dctx->cctx->mode == SLBT_MODE_AR) - slbt_exec_ar(dctx,0); + slbt_exec_ar(dctx); } static int slbt_exit(struct slbt_driver_ctx * dctx, int ret) diff --git a/src/logic/slbt_exec_ar.c b/src/logic/slbt_exec_ar.c index 6baba25..d36fdc8 100644 --- a/src/logic/slbt_exec_ar.c +++ b/src/logic/slbt_exec_ar.c @@ -64,12 +64,12 @@ static int slbt_ar_usage( } static int slbt_exec_ar_fail( - struct slbt_exec_ctx * actx, + struct slbt_exec_ctx * ectx, struct argv_meta * meta, int ret) { slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } @@ -121,15 +121,14 @@ static int slbt_exec_ar_perform_archive_actions( return 0; } -int slbt_exec_ar( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_ar(const struct slbt_driver_ctx * dctx) { int ret; int fdout; int fderr; char ** argv; char ** iargv; + struct slbt_exec_ctx * ectx; struct slbt_driver_ctx_impl * ictx; const struct slbt_common_ctx * cctx; struct slbt_archive_ctx ** arctxv; @@ -137,18 +136,13 @@ int slbt_exec_ar( const char ** unitv; const char ** unitp; size_t nunits; - struct slbt_exec_ctx * actx; struct argv_meta * meta; struct argv_entry * entry; const struct argv_option * optv[SLBT_OPTV_ELEMENTS]; /* context */ - if (ectx) - actx = 0; - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) - return ret; - else - actx = ectx; + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) + return SLBT_NESTED_ERROR(dctx); /* initial state, ar mode skin */ slbt_ectx_reset_arguments(ectx); @@ -168,7 +162,7 @@ int slbt_exec_ar( return slbt_ar_usage( fdout, dctx->program, - 0,optv,0,actx, + 0,optv,0,ectx, dctx->cctx->drvflags & SLBT_DRIVER_ANNOTATE_NEVER); /* argv meta */ @@ -179,7 +173,7 @@ int slbt_exec_ar( : ARGV_VERBOSITY_NONE, fdout))) return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_AR_FAIL)); /* dest, alternate argument vector options */ @@ -289,7 +283,7 @@ int slbt_exec_ar( /* defer --version printing to slbt_main() as needed */ if (cctx->drvflags & SLBT_DRIVER_VERSION) { slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_OK; } @@ -307,7 +301,7 @@ int slbt_exec_ar( dctx->program); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR( dctx, SLBT_ERR_AR_NO_ACTION_SPECIFIED)); @@ -321,7 +315,7 @@ int slbt_exec_ar( dctx->program); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR( dctx, SLBT_ERR_AR_OUTPUT_NOT_SPECIFIED)); @@ -337,7 +331,7 @@ int slbt_exec_ar( dctx->program); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR( dctx, SLBT_ERR_AR_OUTPUT_NOT_APPLICABLE)); @@ -352,7 +346,7 @@ int slbt_exec_ar( dctx->program); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR( dctx, SLBT_ERR_AR_NO_INPUT_SPECIFIED)); @@ -361,7 +355,7 @@ int slbt_exec_ar( /* archive vector allocation */ if (!(arctxv = calloc(nunits+1,sizeof(struct slbt_archive_ctx *)))) return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_SYSTEM_ERROR(dctx,0)); /* unit vector allocation */ @@ -369,7 +363,7 @@ int slbt_exec_ar( free (arctxv); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_SYSTEM_ERROR(dctx,0)); } @@ -388,7 +382,7 @@ int slbt_exec_ar( free(arctxv); return slbt_exec_ar_fail( - actx,meta, + ectx,meta, SLBT_NESTED_ERROR(dctx)); } } @@ -404,7 +398,7 @@ int slbt_exec_ar( free(arctxv); slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } diff --git a/src/logic/slbt_exec_compile.c b/src/logic/slbt_exec_compile.c index 8c5e870..193bb5a 100644 --- a/src/logic/slbt_exec_compile.c +++ b/src/logic/slbt_exec_compile.c @@ -163,14 +163,12 @@ static int slbt_exec_compile_finalize_argument_vector( return 0; } -int slbt_exec_compile( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_compile(const struct slbt_driver_ctx * dctx) { int ret; char * fpic; char * ccwrap; - struct slbt_exec_ctx * actx = 0; + struct slbt_exec_ctx * ectx; const struct slbt_common_ctx * cctx = dctx->cctx; /* dry run */ @@ -178,12 +176,8 @@ int slbt_exec_compile( return 0; /* context */ - if (ectx) - slbt_reset_placeholders(ectx); - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) - return ret; - else - actx = ectx; + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) + return SLBT_NESTED_ERROR(dctx); /* remove old .lo wrapper */ if (slbt_exec_compile_remove_file(dctx,ectx,ectx->ltobjname)) @@ -193,7 +187,7 @@ int slbt_exec_compile( if (cctx->drvflags & SLBT_DRIVER_SHARED) if (slbt_mkdir(dctx,ectx->ldirname)) { ret = SLBT_SYSTEM_ERROR(dctx,ectx->ldirname); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } @@ -231,17 +225,17 @@ int slbt_exec_compile( if (!(cctx->drvflags & SLBT_DRIVER_SILENT)) { if (slbt_output_compile(ectx)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } } if ((slbt_spawn(ectx,true) < 0) && (ectx->pid < 0)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_SYSTEM_ERROR(dctx,0); } else if (ectx->exitcode) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_COMPILE_ERROR); } @@ -266,23 +260,23 @@ int slbt_exec_compile( if (!(cctx->drvflags & SLBT_DRIVER_SILENT)) { if (slbt_output_compile(ectx)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } } if ((slbt_spawn(ectx,true) < 0) && (ectx->pid < 0)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_SYSTEM_ERROR(dctx,0); } else if (ectx->exitcode) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_COMPILE_ERROR); } } ret = slbt_create_object_wrapper(dctx,ectx); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret ? SLBT_NESTED_ERROR(dctx) : 0; } diff --git a/src/logic/slbt_exec_execute.c b/src/logic/slbt_exec_execute.c index ec627b1..1bba779 100644 --- a/src/logic/slbt_exec_execute.c +++ b/src/logic/slbt_exec_execute.c @@ -16,11 +16,8 @@ #include "slibtool_snprintf_impl.h" #include "slibtool_errinfo_impl.h" -int slbt_exec_execute( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_execute(const struct slbt_driver_ctx * dctx) { - int ret; int fdcwd; char * program; char * script; @@ -29,21 +26,17 @@ int slbt_exec_execute( char exeref [PATH_MAX]; char wrapper[PATH_MAX]; struct stat st; - struct slbt_exec_ctx * actx = 0; + struct slbt_exec_ctx * ectx; /* dry run */ if (dctx->cctx->drvflags & SLBT_DRIVER_DRY_RUN) return 0; /* context */ - if (ectx) - slbt_disable_placeholders(ectx); - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) - return ret; - else { - actx = ectx; - slbt_disable_placeholders(ectx); - } + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) + return SLBT_NESTED_ERROR(dctx); + + slbt_disable_placeholders(ectx); /* script, program */ program = ectx->cargv[0]; @@ -64,7 +57,7 @@ int slbt_exec_execute( if (slbt_snprintf(wrapper,sizeof(wrapper), "%s.exe.wrapper", exeref) < 0) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_BUFFER_ERROR(dctx); } @@ -91,12 +84,12 @@ int slbt_exec_execute( /* step output */ if (!(dctx->cctx->drvflags & SLBT_DRIVER_SILENT)) if (slbt_output_execute(ectx)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } execvp(ectx->cargv[0],ectx->argv); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_SYSTEM_ERROR(dctx,0); } diff --git a/src/logic/slbt_exec_install.c b/src/logic/slbt_exec_install.c index 3677f12..20cf679 100644 --- a/src/logic/slbt_exec_install.c +++ b/src/logic/slbt_exec_install.c @@ -54,12 +54,12 @@ static int slbt_install_usage( } static int slbt_exec_install_fail( - struct slbt_exec_ctx * actx, + struct slbt_exec_ctx * ectx, struct argv_meta * meta, int ret) { slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } @@ -706,11 +706,8 @@ static int slbt_exec_install_entry( return 0; } -int slbt_exec_install( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_install(const struct slbt_driver_ctx * dctx) { - int ret; int fdout; char ** argv; char ** iargv; @@ -720,7 +717,7 @@ int slbt_exec_install( char * optsh; char * script; char * shtool; - struct slbt_exec_ctx * actx; + struct slbt_exec_ctx * ectx; struct argv_meta * meta; struct argv_entry * entry; struct argv_entry * copy; @@ -734,12 +731,8 @@ int slbt_exec_install( return 0; /* context */ - if (ectx) - actx = 0; - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) - return ret; - else - actx = ectx; + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) + return SLBT_NESTED_ERROR(dctx); /* initial state, install mode skin */ slbt_ectx_reset_arguments(ectx); @@ -789,7 +782,7 @@ int slbt_exec_install( : ARGV_VERBOSITY_NONE, fdout))) return slbt_exec_install_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_INSTALL_FAIL)); /* dest, alternate argument vector options */ @@ -880,7 +873,7 @@ int slbt_exec_install( /* dstdir */ if (slbt_exec_install_init_dstdir(dctx,dest,last,dstdir)) return slbt_exec_install_fail( - actx,meta, + ectx,meta, SLBT_NESTED_ERROR(dctx)); /* install entries one at a time */ @@ -892,7 +885,7 @@ int slbt_exec_install( dest,dstdir, src,dst)) return slbt_exec_install_fail( - actx,meta, + ectx,meta, SLBT_NESTED_ERROR(dctx)); } else { /* using original argument vector */ @@ -906,12 +899,12 @@ int slbt_exec_install( if ((slbt_spawn(ectx,true) < 0) && (ectx->pid < 0)) { return slbt_exec_install_fail( - actx,meta, + ectx,meta, SLBT_SPAWN_ERROR(dctx)); } else if (ectx->exitcode) { return slbt_exec_install_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR( dctx, SLBT_ERR_INSTALL_ERROR)); @@ -919,7 +912,7 @@ int slbt_exec_install( } slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return 0; } diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index e721bc6..4545110 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -129,14 +129,12 @@ static int slbt_exec_link_create_library_symlink( SLBT_SYMLINK_DEFAULT); } -int slbt_exec_link( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_link(const struct slbt_driver_ctx * dctx) { int ret; const char * output; char * dot; - struct slbt_exec_ctx * actx; + struct slbt_exec_ctx * ectx; bool fpic; bool fstaticonly; char soname[PATH_MAX]; @@ -151,12 +149,8 @@ int slbt_exec_link( return 0; /* context */ - if (ectx) - actx = 0; - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) return SLBT_NESTED_ERROR(dctx); - else - actx = ectx; /* libfoo.so.x.y.z */ if (slbt_snprintf(soxyz,sizeof(soxyz), @@ -170,7 +164,7 @@ int slbt_exec_link( dctx->cctx->verinfo.minor, dctx->cctx->verinfo.revision, dctx->cctx->settings.osdfussix) < 0) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_BUFFER_ERROR(dctx); } @@ -203,14 +197,14 @@ int slbt_exec_link( /* .libs directory */ if (slbt_mkdir(dctx,ectx->ldirname)) { ret = SLBT_SYSTEM_ERROR(dctx,ectx->ldirname); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } /* non-pic libfoo.a */ if (dot && !strcmp(dot,".a")) if (slbt_exec_link_create_archive(dctx,ectx,output,false)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } @@ -246,7 +240,7 @@ int slbt_exec_link( dctx,ectx, ectx->arfilename, fpic)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } @@ -305,11 +299,11 @@ int slbt_exec_link( ectx->dsobasename, ectx->dsofilename, ectx->relfilename)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return 0; } } @@ -371,7 +365,7 @@ int slbt_exec_link( ectx->dsobasename, ectx->dsofilename, ectx->relfilename)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } @@ -380,7 +374,7 @@ int slbt_exec_link( if (slbt_exec_link_create_library_symlink( dctx,ectx, true)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } @@ -388,7 +382,7 @@ int slbt_exec_link( if (slbt_exec_link_create_library_symlink( dctx,ectx, false)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } } else if (ectx->relfilename) { @@ -396,7 +390,7 @@ int slbt_exec_link( if (slbt_exec_link_create_library_symlink( dctx,ectx, false)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } } @@ -442,14 +436,14 @@ int slbt_exec_link( if (slbt_exec_link_create_executable( dctx,ectx, ectx->exefilename)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } } /* no wrapper? */ if (!dot || strcmp(dot,".la")) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return 0; } @@ -457,7 +451,7 @@ int slbt_exec_link( if (slbt_create_library_wrapper( dctx,ectx, arname,soname,soxyz,solnk)) { - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return SLBT_NESTED_ERROR(dctx); } @@ -479,7 +473,7 @@ int slbt_exec_link( SLBT_NESTED_ERROR(dctx); /* all done */ - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } diff --git a/src/logic/slbt_exec_uninstall.c b/src/logic/slbt_exec_uninstall.c index 7c990bc..2052f9f 100644 --- a/src/logic/slbt_exec_uninstall.c +++ b/src/logic/slbt_exec_uninstall.c @@ -50,12 +50,12 @@ static int slbt_uninstall_usage( } static int slbt_exec_uninstall_fail( - struct slbt_exec_ctx * actx, + struct slbt_exec_ctx * ectx, struct argv_meta * meta, int ret) { slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return ret; } @@ -264,16 +264,13 @@ static int slbt_exec_uninstall_entry( return 0; } -int slbt_exec_uninstall( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx) +int slbt_exec_uninstall(const struct slbt_driver_ctx * dctx) { - int ret; int fdout; char ** argv; char ** iargv; uint32_t flags; - struct slbt_exec_ctx * actx; + struct slbt_exec_ctx * ectx; struct argv_meta * meta; struct argv_entry * entry; const struct argv_option * optv[SLBT_OPTV_ELEMENTS]; @@ -283,12 +280,8 @@ int slbt_exec_uninstall( return 0; /* context */ - if (ectx) - actx = 0; - else if ((ret = slbt_ectx_get_exec_ctx(dctx,&ectx))) - return ret; - else - actx = ectx; + if (slbt_ectx_get_exec_ctx(dctx,&ectx) < 0) + return SLBT_NESTED_ERROR(dctx); /* initial state, uninstall mode skin */ slbt_ectx_reset_arguments(ectx); @@ -314,7 +307,7 @@ int slbt_exec_uninstall( : ARGV_VERBOSITY_NONE, fdout))) return slbt_exec_uninstall_fail( - actx,meta, + ectx,meta, SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_UNINSTALL_FAIL)); /* dest, alternate argument vector options */ @@ -374,11 +367,11 @@ int slbt_exec_uninstall( if (!entry->fopt) if (slbt_exec_uninstall_entry(dctx,ectx,entry,argv,flags)) return slbt_exec_uninstall_fail( - actx,meta, + ectx,meta, SLBT_NESTED_ERROR(dctx)); slbt_argv_free(meta); - slbt_ectx_free_exec_ctx(actx); + slbt_ectx_free_exec_ctx(ectx); return 0; } -- cgit v1.2.3