summaryrefslogtreecommitdiff
path: root/src/logic
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2024-02-21 05:23:06 +0000
committermidipix <writeonce@midipix.org>2024-02-21 05:23:06 +0000
commit2e30eb25a9f78fcb462c03c4766a8a8669c1f291 (patch)
treeca0f1a7752ac01b3b1c2cfdb2fe1a3820376ea04 /src/logic
parent53c651164d18578c1b50f5b09e923ae1fd5e10c5 (diff)
downloadslibtool-2e30eb25a9f78fcb462c03c4766a8a8669c1f291.tar.bz2
slibtool-2e30eb25a9f78fcb462c03c4766a8a8669c1f291.tar.xz
core api: simplified the _exec_ interfaces.
Diffstat (limited to 'src/logic')
-rw-r--r--src/logic/slbt_exec_ar.c40
-rw-r--r--src/logic/slbt_exec_compile.c30
-rw-r--r--src/logic/slbt_exec_execute.c25
-rw-r--r--src/logic/slbt_exec_install.c31
-rw-r--r--src/logic/slbt_exec_link.c40
-rw-r--r--src/logic/slbt_exec_uninstall.c25
6 files changed, 76 insertions, 115 deletions
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);
/* <ar> 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;
}