From 7ae5c14d2b4cc2dce023dac9bdf6020962c7bcec Mon Sep 17 00:00:00 2001 From: midipix Date: Tue, 13 Apr 2021 16:46:12 +0000 Subject: library: replace all uses of stat() and lstat() with fstatat() counterparts. --- src/logic/slbt_exec_link.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/logic/slbt_exec_link.c') diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c index 8b8efa2..e5376b3 100644 --- a/src/logic/slbt_exec_link.c +++ b/src/logic/slbt_exec_link.c @@ -97,6 +97,9 @@ static int slbt_get_deps_meta( struct slbt_map_info * mapinfo; char depfile[PATH_MAX]; + /* fdcwd */ + fdcwd = slbt_driver_fdcwd(dctx); + /* -rpath */ if ((size_t)snprintf(depfile,sizeof(depfile), "%s.slibtool.rpath", @@ -105,7 +108,7 @@ static int slbt_get_deps_meta( return SLBT_BUFFER_ERROR(dctx); /* -Wl,%s */ - if (!(lstat(depfile,&st))) { + if (!fstatat(fdcwd,depfile,&st,AT_SYMLINK_NOFOLLOW)) { depsmeta->infolen += st.st_size + 4; depsmeta->infolen++; } @@ -117,9 +120,6 @@ static int slbt_get_deps_meta( >= sizeof(depfile)) return SLBT_BUFFER_ERROR(dctx); - /* fdcwd */ - fdcwd = slbt_driver_fdcwd(dctx); - /* mapinfo */ if (!(mapinfo = slbt_map_file(fdcwd,depfile,SLBT_MAP_INPUT))) return (fexternal && (errno == ENOENT)) @@ -535,7 +535,7 @@ static int slbt_exec_link_adjust_argument_vector( /* -rpath */ sprintf(rpathlnk,"%s.slibtool.rpath",*carg); - if (!(lstat(rpathlnk,&st))) { + if (!fstatat(fdcwd,rpathlnk,&st,AT_SYMLINK_NOFOLLOW)) { if (slbt_readlink( rpathlnk,\ rpathdir, @@ -590,7 +590,7 @@ static int slbt_exec_link_adjust_argument_vector( } } - if (dpath && !stat(dpath,&st)) { + if (dpath && !fstatat(fdcwd,dpath,&st,0)) { if (!(mapinfo = slbt_map_file( fdcwd,dpath, SLBT_MAP_INPUT))) @@ -975,7 +975,7 @@ static int slbt_exec_link_create_dep_file( mark = strrchr(mark,'.'); strcpy(mark,dctx->cctx->settings.dsosuffix); - fdyndep = !stat(depfile,&st); + fdyndep = !fstatat(fdcwd,depfile,&st,0); /* [-L... as needed] */ if (fdyndep && (ectx->ldirdepth >= 0)) { @@ -1229,9 +1229,13 @@ static int slbt_exec_link_create_noop_symlink( const char * arfilename) { struct stat st; + int fdcwd; + + /* fdcwd */ + fdcwd = slbt_driver_fdcwd(dctx); /* file exists? */ - if (!(lstat(arfilename,&st))) + if (!fstatat(fdcwd,arfilename,&st,AT_SYMLINK_NOFOLLOW)) return 0; /* needed? */ @@ -1752,7 +1756,7 @@ static int slbt_exec_link_create_executable( &depsmeta, SLBT_NESTED_ERROR(dctx)); - if (stat(wrapper,&st)) + if (fstatat(fdcwd,wrapper,&st,0)) return slbt_exec_link_exit( &depsmeta, SLBT_SYSTEM_ERROR(dctx,wrapper)); -- cgit v1.2.3