summaryrefslogtreecommitdiff
path: root/src/libunixonacid/open3_at.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-07-16 11:19:51 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-07-16 11:19:51 +0000
commit16013c560e189bd0c4fb58e038c0f449542dba7a (patch)
treeb9d2777f2e5a8108b684839f04310ffd0de82179 /src/libunixonacid/open3_at.c
parent538fd727337959b1d7b8449a578a31fd9a9c62b4 (diff)
downloadskalibs-16013c560e189bd0c4fb58e038c0f449542dba7a.tar.xz
Add egidingroups sysdeps, change fd_close() to void and saving errno, propagate changes
Diffstat (limited to 'src/libunixonacid/open3_at.c')
-rw-r--r--src/libunixonacid/open3_at.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/libunixonacid/open3_at.c b/src/libunixonacid/open3_at.c
index 22bbecd..d4234d4 100644
--- a/src/libunixonacid/open3_at.c
+++ b/src/libunixonacid/open3_at.c
@@ -30,30 +30,26 @@ int open3_at (int dirfd, char const *file, int flags, unsigned int mode)
int fd ;
int fdhere = open_read(".") ;
if (fdhere < 0) return -1 ;
- if (fd_chdir(dirfd) < 0)
- {
- int e = errno ;
- fd_close(fdhere) ;
- errno = e ;
- return -1 ;
- }
+ if (fd_chdir(dirfd) < 0) goto errclose ;
fd = open3(file, flags, mode) ;
if (fd < 0)
{
int e = errno ;
fd_chdir(fdhere) ;
- fd_close(fdhere) ;
errno = e ;
- return -1 ;
+ goto errclose ;
}
if (fd_chdir(fdhere) < 0)
{
- int e = errno ;
- fd_close(fdhere) ;
- errno = e ;
- return -1 ;
+ fd_close(fd) ;
+ goto errclose ;
}
+ fd_close(fdhere) ;
return fd ;
+
+ errclose:
+ fd_close(fdhere) ;
+ return -1 ;
}
#endif