Fix call to system fallocate to handle errno correctly.
authorHolger Berger <holger.berger@googlemail.com>
Fri, 19 Mar 2021 22:38:54 +0000 (15:38 -0700)
committerCary Coutant <ccoutant@gmail.com>
Fri, 19 Mar 2021 23:18:53 +0000 (16:18 -0700)
2021-03-19  Holger Berger  <holger.berger@googlemail.com>

gold/
PR gold/26541
* output.cc (gold_fallocate): Use errno when calling system fallocate.

gold/ChangeLog
gold/output.cc

index 2d4e6092a271ad2b977aa9aecfbc404f0b4706b8..4aec6d4683bbb217b8c42be90d0c71c61c0eeb43 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-19  Holger Berger  <holger.berger@googlemail.com>
+
+       PR gold/26541
+       * output.cc (gold_fallocate): Use errno when calling system fallocate.
+
 2021-03-19  Cary Coutant  <ccoutant@gmail.com>
 
        PR gold/26585
index b7505ffd72c73975076429e21004f5ba3a31b9f4..afdba06753eb8f8b67b7f2a9cb6c23cf6966fe8e 100644 (file)
@@ -141,12 +141,14 @@ gold_fallocate(int o, off_t offset, off_t len)
 
 #ifdef HAVE_FALLOCATE
   {
+    errno = 0;
     int err = ::fallocate(o, 0, offset, len);
-    if (err != EINVAL && err != ENOSYS && err != EOPNOTSUPP)
-      return err;
+    if (err < 0 && errno != EINVAL && errno != ENOSYS && errno != EOPNOTSUPP)
+      return errno;
   }
 #endif // defined(HAVE_FALLOCATE)
 
+  errno = 0;
   if (::ftruncate(o, offset + len) < 0)
     return errno;
   return 0;