diff options
Diffstat (limited to 'src/libstddjb/filecopy_unsafe.c')
-rw-r--r-- | src/libstddjb/filecopy_unsafe.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/libstddjb/filecopy_unsafe.c b/src/libstddjb/filecopy_unsafe.c index 68bcc5b..a6410c1 100644 --- a/src/libstddjb/filecopy_unsafe.c +++ b/src/libstddjb/filecopy_unsafe.c @@ -1,6 +1,5 @@ /* ISC license. */ -#include <errno.h> #include <fcntl.h> #include <skalibs/djbunix.h> @@ -10,23 +9,15 @@ int filecopy_unsafe (char const *src, char const *dst, unsigned int mode) int s = open2(src, O_RDONLY) ; if (s < 0) return 0 ; d = open3(dst, O_WRONLY | O_CREAT | O_TRUNC, mode) ; - if (d < 0) - { - int e = errno ; - fd_close(s) ; - errno = e ; - return 0 ; - } - if (fd_cat(s, d) < 0) - { - int e = errno ; - fd_close(d) ; - fd_close(s) ; - errno = e ; - return 0 ; - } + if (d < 0) goto errs ; + if (fd_cat(s, d) < 0) goto errd ; fd_close(d) ; fd_close(s) ; return 1 ; +errd: + fd_close(d) ; +errs: + fd_close(s) ; + return 0 ; } |