diff --git a/src/internal/slibtool_lconf_impl.c b/src/internal/slibtool_lconf_impl.c index c5f721a..691536d 100644 --- a/src/internal/slibtool_lconf_impl.c +++ b/src/internal/slibtool_lconf_impl.c @@ -61,17 +61,23 @@ static int slbt_lconf_open( if (fdparent < 0) return SLBT_SYSTEM_ERROR(dctx); - if (fstat(fdparent,&stparent) < 0) + if (fstat(fdparent,&stparent) < 0) { + close(fdparent); return SLBT_SYSTEM_ERROR(dctx); + } - if (stparent.st_dev != stcwd.st_dev) + if (stparent.st_dev != stcwd.st_dev) { + close(fdparent); return SLBT_CUSTOM_ERROR( dctx,SLBT_ERR_LCONF_OPEN); + } fdlconfdir = fdparent; fdlconf = openat(fdlconfdir,"libtool",O_RDONLY,0); } + slbt_lconf_close(fdcwd,fdlconfdir); + return fdlconf; }