aboutsummaryrefslogtreecommitdiff
path: root/locale/programs/locarchive.c
diff options
context:
space:
mode:
Diffstat (limited to 'locale/programs/locarchive.c')
-rw-r--r--locale/programs/locarchive.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
index 2c19f4f..ad025a8 100644
--- a/locale/programs/locarchive.c
+++ b/locale/programs/locarchive.c
@@ -638,7 +638,8 @@ open_archive (struct locarhandle *ah, bool readonly)
|| st.st_dev != st2.st_dev
|| st.st_ino != st2.st_ino)
{
- (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
+ if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
+ error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
close (fd);
continue;
}
@@ -650,14 +651,17 @@ open_archive (struct locarhandle *ah, bool readonly)
/* Read the header. */
if (TEMP_FAILURE_RETRY (read (fd, &head, sizeof (head))) != sizeof (head))
{
- (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
- error (EXIT_FAILURE, errno, _("cannot read archive header"));
+ int errval = errno;
+ if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
+ error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
+ error (EXIT_FAILURE, errval, _("cannot read archive header"));
}
/* Check the magic value */
if (GET (head.magic) != AR_MAGIC)
{
- (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
+ if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
+ error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
error (EXIT_FAILURE, 0, _("bad magic value in archive header"));
}
@@ -676,8 +680,10 @@ open_archive (struct locarhandle *ah, bool readonly)
MAP_SHARED | xflags, fd, 0);
if (ah->addr == MAP_FAILED)
{
- (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
- error (EXIT_FAILURE, errno, _("cannot map archive header"));
+ int errval = errno;
+ if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
+ error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
+ error (EXIT_FAILURE, errval, _("cannot map archive header"));
}
ah->reserved = reserved;
ah->mmap_base = mmap_base;