SPDX: license tags (mostly by guesswork)
[exim.git] / src / src / exim_lock.c
index 074a951d1036b9c3b15a01bf8d49df833293391f..1a54a92ada0cab27d2dc1e8efb7649ab616f4d1a 100644 (file)
@@ -10,7 +10,8 @@ Default is -fcntl -lockfile.
 
 Argument: the name of the lock file
 
-Copyright (c) The Exim Maintainers 2016
+Copyright (c) The Exim Maintainers 2016 - 2021
+SPDX-License-Identifier: GPL-2.0-only
 */
 
 #include "os.h"
@@ -87,7 +88,6 @@ the other stuff in os.c, so force the other macros to omit it. */
 static void
 sigalrm_handler(int sig)
 {
-sig = sig;      /* Keep picky compilers happy */
 sigalrm_seen = TRUE;
 }
 
@@ -584,16 +584,28 @@ else
 if (restore_times)
   {
   struct stat strestore;
-#ifdef EXIM_HAVE_OPENAT
+#ifdef EXIM_HAVE_FUTIMENS
   int fd = open(filename, O_RDWR); /* use fd for both get & restore */
   struct timespec tt[2];
 
-  fstat(fd, &strestore);
+  if (fd < 0)
+    {
+    printf("open '%s': %s\n", filename, strerror(errno));
+    yield = 1;
+    goto CLEAN_UP;
+    }
+  if (fstat(fd, &strestore) != 0)
+    {
+    printf("fstat '%s': %s\n", filename, strerror(errno));
+    yield = 1;
+    close(fd);
+    goto CLEAN_UP;
+    }
   i = system(command);
   tt[0] = strestore.st_atim;
   tt[1] = strestore.st_mtim;
-  futimens(fd, tt);
-  close(fd);
+  (void) futimens(fd, tt);
+  (void) close(fd);
 #else
   struct utimbuf ut;