diff options
author | Dave Reisner <dreisner@archlinux.org> | 2013-07-04 02:33:19 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2013-07-05 06:32:23 +0200 |
commit | eb19d41d5f85f169cee7570f783821cb705ad37a (patch) | |
tree | 245a12aa27e01a6f8ee74f5c1624d4e341551b81 /lib/libalpm/be_package.c | |
parent | 7b8f8753b15037bf4a88126ffde8195416432c72 (diff) | |
download | pacman-eb19d41d5f85f169cee7570f783821cb705ad37a.tar.gz pacman-eb19d41d5f85f169cee7570f783821cb705ad37a.tar.xz |
do not check error from close(2)
On operating systems we support, the behavior is always such that the
kernel will do the right thing as far as invalidating the file
descriptor, regardless of the eventual return value. Therefore,
potentially looping and calling close multiple times is wrong.
At best, we call close again on an invalid FD and throw a spurious EBADF
error. At worst, we might close an FD which doesn't belong to us when a
multi-threaded application opens its own file descriptor between
iterations of the loop.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'lib/libalpm/be_package.c')
-rw-r--r-- | lib/libalpm/be_package.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c index 5a709680..62626212 100644 --- a/lib/libalpm/be_package.c +++ b/lib/libalpm/be_package.c @@ -76,7 +76,7 @@ static void *_package_changelog_open(alpm_pkg_t *pkg) if(!changelog) { pkg->handle->pm_errno = ALPM_ERR_MEMORY; _alpm_archive_read_free(archive); - CLOSE(fd); + close(fd); return NULL; } changelog->archive = archive; @@ -86,7 +86,7 @@ static void *_package_changelog_open(alpm_pkg_t *pkg) } /* we didn't find a changelog */ _alpm_archive_read_free(archive); - CLOSE(fd); + close(fd); errno = ENOENT; return NULL; @@ -126,7 +126,7 @@ static int _package_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp) int ret; struct package_changelog *changelog = fp; ret = _alpm_archive_read_free(changelog->archive); - CLOSE(changelog->fd); + close(changelog->fd); free(changelog); return ret; } @@ -477,7 +477,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle, } _alpm_archive_read_free(archive); - CLOSE(fd); + close(fd); /* internal fields for package struct */ newpkg->origin = ALPM_PKG_FROM_FILE; @@ -510,7 +510,7 @@ error: _alpm_pkg_free(newpkg); _alpm_archive_read_free(archive); if(fd >= 0) { - CLOSE(fd); + close(fd); } return NULL; |