diff options
author | midipix <writeonce@midipix.org> | 2016-04-08 12:53:52 -0400 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-04-08 12:53:52 -0400 |
commit | 6529aa199a616eaeb8f32841d29ec5afd7dcc4f4 (patch) | |
tree | cc962f2dbe65030454928522d42872003a268c5c /src/logic | |
parent | 82142f33ca3209442426e56da24d9722adf4c8bb (diff) | |
download | slibtool-6529aa199a616eaeb8f32841d29ec5afd7dcc4f4.tar.bz2 slibtool-6529aa199a616eaeb8f32841d29ec5afd7dcc4f4.tar.xz |
internal: slbt_create_symlink(): initial implementation and integration.
Diffstat (limited to 'src/logic')
-rw-r--r-- | src/logic/slbt_exec_link.c | 50 |
1 files changed, 3 insertions, 47 deletions
diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 5ffbc29..1a21da4 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -12,6 +12,7 @@ #include <slibtool/slibtool.h> #include "slibtool_spawn_impl.h" +#include "slibtool_symlink_impl.h" /*******************************************************************/ /* */ @@ -503,51 +504,6 @@ static int slbt_exec_link_create_executable( return 0; } -static int slbt_exec_link_create_symlink( - const struct slbt_driver_ctx * dctx, - struct slbt_exec_ctx * ectx, - const char * target, - char * lnkname, - bool flawrapper) -{ - const char * slash; - char * ln[5]; - char * dotdot; - char atarget[PATH_MAX]; - - /* atarget */ - if ((slash = strrchr(target,'/'))) - slash++; - else - slash = target; - - dotdot = flawrapper ? "../" : ""; - - if ((size_t)snprintf(atarget,sizeof(atarget),"%s%s", - dotdot,slash) >= sizeof(atarget)) - return -1; - - /* ln argv (fake) */ - ln[0] = "ln"; - ln[1] = "-s"; - ln[2] = atarget; - ln[3] = lnkname; - ln[4] = 0; - ectx->argv = ln; - - /* step output */ - if (!(dctx->cctx->drvflags & SLBT_DRIVER_SILENT)) - if (slbt_output_link(dctx,ectx)) - return -1; - - /* remove old symlink as needed */ - if (slbt_exec_link_remove_file(dctx,ectx,lnkname)) - return -1; - - /* create symlink */ - return symlink(atarget,lnkname); -} - static int slbt_exec_link_create_library_symlink( const struct slbt_driver_ctx * dctx, struct slbt_exec_ctx * ectx, @@ -570,7 +526,7 @@ static int slbt_exec_link_create_library_symlink( else strcpy(lnkname,ectx->dsofilename); - return slbt_exec_link_create_symlink( + return slbt_create_symlink( dctx,ectx, target,lnkname, false); @@ -677,7 +633,7 @@ int slbt_exec_link( } /* wrapper symlink */ - if (slbt_exec_link_create_symlink( + if (slbt_create_symlink( dctx,ectx, output, ectx->lafilename, |