diff options
Diffstat (limited to 'src/logic/slbt_exec_uninstall.c')
-rw-r--r-- | src/logic/slbt_exec_uninstall.c | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/src/logic/slbt_exec_uninstall.c b/src/logic/slbt_exec_uninstall.c index 5c59d3f..98bd85b 100644 --- a/src/logic/slbt_exec_uninstall.c +++ b/src/logic/slbt_exec_uninstall.c @@ -1,6 +1,6 @@ /*******************************************************************/ -/* slibtool: a skinny libtool implementation, written in C */ -/* Copyright (C) 2016--2021 SysDeer Technologies, LLC */ +/* slibtool: a strong libtool implementation, written in C */ +/* Copyright (C) 2016--2024 SysDeer Technologies, LLC */ /* Released under the Standard MIT License; see COPYING.SLIBTOOL. */ /*******************************************************************/ @@ -11,12 +11,11 @@ #include <errno.h> #include <sys/stat.h> -#define ARGV_DRIVER - #include <slibtool/slibtool.h> #include "slibtool_driver_impl.h" #include "slibtool_uninstall_impl.h" #include "slibtool_readlink_impl.h" +#include "slibtool_snprintf_impl.h" #include "slibtool_errinfo_impl.h" #include "argv/argv.h" @@ -37,26 +36,26 @@ static int slbt_uninstall_usage( switch (noclr) { case 0: - argv_usage(fdout,header,optv,arg); + slbt_argv_usage(fdout,header,optv,arg); break; default: - argv_usage_plain(fdout,header,optv,arg); + slbt_argv_usage_plain(fdout,header,optv,arg); break; } - argv_free(meta); + slbt_argv_free(meta); return SLBT_USAGE; } static int slbt_exec_uninstall_fail( - struct slbt_exec_ctx * actx, + struct slbt_exec_ctx * ectx, struct argv_meta * meta, int ret) { - argv_free(meta); - slbt_free_exec_ctx(actx); + slbt_argv_free(meta); + slbt_ectx_free_exec_ctx(ectx); return ret; } @@ -85,7 +84,7 @@ static int slbt_exec_uninstall_fs_entry( *parg = path; if (!(dctx->cctx->drvflags & SLBT_DRIVER_SILENT)) - if (slbt_output_uninstall(dctx,ectx)) + if (slbt_output_uninstall(ectx)) return SLBT_NESTED_ERROR(dctx); /* directory? */ @@ -172,8 +171,9 @@ static int slbt_exec_uninstall_entry( char path [PATH_MAX]; char lpath[PATH_MAX]; - if ((size_t)snprintf(path,PATH_MAX,"%s", - entry->arg) >= PATH_MAX-8) + if (slbt_snprintf(path, + PATH_MAX - 8, + "%s",entry->arg) < 0) return SLBT_BUFFER_ERROR(dctx); *parg = (char *)entry->arg; @@ -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,21 +280,17 @@ int slbt_exec_uninstall( return 0; /* context */ - if (ectx) - actx = 0; - else if ((ret = slbt_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_reset_arguments(ectx); + slbt_ectx_reset_arguments(ectx); slbt_disable_placeholders(ectx); iargv = ectx->cargv; fdout = slbt_driver_fdout(dctx); /* missing arguments? */ - argv_optv_init(slbt_uninstall_options,optv); + slbt_optv_init(slbt_uninstall_options,optv); if (!iargv[1] && (dctx->cctx->drvflags & SLBT_DRIVER_VERBOSITY_USAGE)) return slbt_uninstall_usage( @@ -307,14 +300,14 @@ int slbt_exec_uninstall( dctx->cctx->drvflags & SLBT_DRIVER_ANNOTATE_NEVER); /* <uninstall> argv meta */ - if (!(meta = argv_get( + if (!(meta = slbt_argv_get( iargv,optv, dctx->cctx->drvflags & SLBT_DRIVER_VERBOSITY_ERRORS ? ARGV_VERBOSITY_ERRORS : 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)); - argv_free(meta); - slbt_free_exec_ctx(actx); + slbt_argv_free(meta); + slbt_ectx_free_exec_ctx(ectx); return 0; } |