diff options
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/slibtool_symlink_impl.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/internal/slibtool_symlink_impl.c b/src/internal/slibtool_symlink_impl.c index 34661f0..019d3d6 100644 --- a/src/internal/slibtool_symlink_impl.c +++ b/src/internal/slibtool_symlink_impl.c @@ -78,7 +78,14 @@ slbt_hidden int slbt_create_symlink( lnkname) <0) return SLBT_BUFFER_ERROR(dctx); + /* fdcwd */ + fdcwd = slbt_driver_fdcwd(dctx); + /* placeholder? */ + if (fdevnull) + if (unlinkat(fdcwd,lnkname,0) && (errno != ENOENT)) + return SLBT_SYSTEM_ERROR(dctx,0); + if (suffix) { sprintf(alnkarg,"%s%s",lnkname,suffix); lnkname = alnkarg; @@ -115,9 +122,6 @@ slbt_hidden int slbt_create_symlink( /* restore execution context */ ectx->argv = oargv; - /* fdcwd */ - fdcwd = slbt_driver_fdcwd(dctx); - /* create symlink */ if (symlinkat(atarget,fdcwd,tmplnk)) return SLBT_SYSTEM_ERROR(dctx,tmplnk); |