소스 검색

use utimes instead of utimensat/futimens

cppcheck complains about the obsolete utime as it was removed in
POSIX1.2008 and recommends usage of utimensat/futimens instead
as those are in POSIX and so commit 9ce3cfc9 switched to them.
It is just that they aren't as portable as the standard suggests:
At least our kFreeBSD and Hurd ports stumble over it at runtime.
So to make both, the ports and cppcheck happy, we use utimes instead.

Closes: 738567
David Kalnischkies 12 년 전
부모
커밋
246bbb611d
9개의 변경된 파일53개의 추가작업 그리고 58개의 파일을 삭제
  1. 5 4
      apt-inst/dirstream.cc
  2. 2 1
      ftparchive/multicompress.cc
  3. 6 8
      methods/copy.cc
  4. 9 9
      methods/ftp.cc
  5. 8 14
      methods/gzip.cc
  6. 3 3
      methods/https.cc
  7. 5 4
      methods/rred.cc
  8. 9 9
      methods/rsh.cc
  9. 6 6
      methods/server.cc

+ 5 - 4
apt-inst/dirstream.cc

@@ -19,6 +19,7 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/time.h>
 #include <errno.h>
 #include <unistd.h>
 #include <apti18n.h>
@@ -95,11 +96,11 @@ bool pkgDirStream::FinishedFile(Item &Itm,int Fd)
 
    /* Set the modification times. The only way it can fail is if someone
       has futzed with our file, which is intolerable :> */
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = times[1].tv_sec = Itm.MTime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   if (futimens(Fd, times) != 0)
-      _error->Errno("futimens", "Failed to set modification time for %s",Itm.Name);
+   times[0].tv_usec = times[1].tv_usec = 0;
+   if (utimes(Itm.Name, times) != 0)
+      _error->Errno("utimes", "Failed to set modification time for %s",Itm.Name);
 
    if (close(Fd) != 0)
       return _error->Errno("close",_("Failed to close file %s"),Itm.Name);

+ 2 - 1
ftparchive/multicompress.cc

@@ -24,6 +24,7 @@
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <unistd.h>
 #include <iostream>
 
@@ -237,7 +238,7 @@ bool MultiCompress::Finalize(unsigned long long &OutSize)
 	 if (UpdateMTime > 0 &&
 	     (Now - St.st_mtime > (signed)UpdateMTime || St.st_mtime > Now))
 	 {
-	    utimensat(AT_FDCWD, I->Output.c_str(), NULL, AT_SYMLINK_NOFOLLOW);
+	    utimes(I->Output.c_str(), NULL);
 	    Changed = true;
 	 }
       }

+ 6 - 8
methods/copy.cc

@@ -18,6 +18,7 @@
 #include <apt-pkg/hashes.h>
 
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <unistd.h>
 #include <apti18n.h>
 									/*}}}*/
@@ -70,18 +71,15 @@ bool CopyMethod::Fetch(FetchItem *Itm)
    }
 
    From.Close();
+   To.Close();
 
    // Transfer the modification times
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = Buf.st_atime;
    times[1].tv_sec = Buf.st_mtime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   if (futimens(To.Fd(), times) != 0)
-   {
-      To.OpFail();
-      return _error->Errno("futimens",_("Failed to set modification time"));
-   }
-   To.Close();
+   times[0].tv_usec = times[1].tv_usec = 0;
+   if (utimes(Res.Filename.c_str(), times) != 0)
+      return _error->Errno("utimes",_("Failed to set modification time"));
 
    Hashes Hash;
    FileFd Fd(Res.Filename, FileFd::ReadOnly);

+ 9 - 9
methods/ftp.cc

@@ -954,11 +954,11 @@ void FtpMethod::SigTerm(int)
       _exit(100);
 
    // Timestamp
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = FailTime;
    times[1].tv_sec = FailTime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   futimens(FailFd, times);
+   times[0].tv_usec = times[1].tv_usec = 0;
+   utimes(FailFile.c_str(), times);
 
    close(FailFd);
 
@@ -1062,11 +1062,11 @@ bool FtpMethod::Fetch(FetchItem *Itm)
 	 Fd.Close();
 
 	 // Timestamp
-	 struct timespec times[2];
+	 struct timeval times[2];
 	 times[0].tv_sec = FailTime;
 	 times[1].tv_sec = FailTime;
-	 times[0].tv_nsec = times[1].tv_nsec = 0;
-	 futimens(FailFd, times);
+	 times[0].tv_usec = times[1].tv_usec = 0;
+	 utimes(FailFile.c_str(), times);
 
 	 // If the file is missing we hard fail and delete the destfile
 	 // otherwise transient fail
@@ -1081,11 +1081,11 @@ bool FtpMethod::Fetch(FetchItem *Itm)
       Res.Size = Fd.Size();
 
       // Timestamp
-      struct timespec times[2];
+      struct timeval times[2];
       times[0].tv_sec = FailTime;
       times[1].tv_sec = FailTime;
-      times[0].tv_nsec = times[1].tv_nsec = 0;
-      futimens(Fd.Fd(), times);
+      times[0].tv_usec = times[1].tv_usec = 0;
+      utimes(Fd.Name().c_str(), times);
       FailFd = -1;
    }
 

+ 8 - 14
methods/gzip.cc

@@ -18,6 +18,7 @@
 #include <apt-pkg/hashes.h>
 
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <errno.h>
@@ -93,6 +94,8 @@ bool GzipMethod::Fetch(FetchItem *Itm)
    }
    
    From.Close();
+   Res.Size = To.FileSize();
+   To.Close();
 
    if (Failed == true)
       return false;
@@ -102,23 +105,14 @@ bool GzipMethod::Fetch(FetchItem *Itm)
    if (stat(Path.c_str(),&Buf) != 0)
       return _error->Errno("stat",_("Failed to stat"));
 
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = Buf.st_atime;
-   times[1].tv_sec = Buf.st_mtime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   if (futimens(To.Fd(), times) != 0)
-   {
-      To.OpFail();
-      return _error->Errno("futimens",_("Failed to set modification time"));
-   }
-   Res.Size = To.FileSize();
-   To.Close();
-
-   if (stat(Itm->DestFile.c_str(),&Buf) != 0)
-      return _error->Errno("stat",_("Failed to stat"));
+   Res.LastModified = times[1].tv_sec = Buf.st_mtime;
+   times[0].tv_usec = times[1].tv_usec = 0;
+   if (utimes(Itm->DestFile.c_str(), times) != 0)
+      return _error->Errno("utimes",_("Failed to set modification time"));
 
    // Return a Done response
-   Res.LastModified = Buf.st_mtime;
    Res.TakeHashes(Hash);
 
    URIDone(Res);

+ 3 - 3
methods/https.cc

@@ -404,11 +404,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    curl_easy_getinfo(curl, CURLINFO_FILETIME, &Res.LastModified);
    if (Res.LastModified != -1)
    {
-      struct timespec times[2];
+      struct timeval times[2];
       times[0].tv_sec = Res.LastModified;
       times[1].tv_sec = Res.LastModified;
-      times[0].tv_nsec = times[1].tv_nsec = 0;
-      futimens(File->Fd(), times);
+      times[0].tv_usec = times[1].tv_usec = 0;
+      utimes(File->Name().c_str(), times);
    }
    else
       Res.LastModified = resultStat.st_mtime;

+ 5 - 4
methods/rred.cc

@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 
 #include <apti18n.h>
 
@@ -597,12 +598,12 @@ class RredMethod : public pkgAcqMethod {
 	       stat(patch_name.c_str(), &bufpatch) != 0)
 	    return _error->Errno("stat", _("Failed to stat"));
 
-	 struct timespec times[2];
+	 struct timeval times[2];
 	 times[0].tv_sec = bufbase.st_atime;
 	 times[1].tv_sec = bufpatch.st_mtime;
-	 times[0].tv_nsec = times[1].tv_nsec = 0;
-	 if (utimensat(AT_FDCWD, Itm->DestFile.c_str(), times, 0) != 0)
-	    return _error->Errno("utimensat",_("Failed to set modification time"));
+	 times[0].tv_usec = times[1].tv_usec = 0;
+	 if (utimes(Itm->DestFile.c_str(), times) != 0)
+	    return _error->Errno("utimes",_("Failed to set modification time"));
 
 	 if (stat(Itm->DestFile.c_str(), &bufbase) != 0)
 	    return _error->Errno("stat", _("Failed to stat"));

+ 9 - 9
methods/rsh.cc

@@ -396,11 +396,11 @@ void RSHMethod::SigTerm(int sig)
       _exit(100);
 
    // Transfer the modification times
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = FailTime;
    times[1].tv_sec = FailTime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   futimens(FailFd, times);
+   times[0].tv_usec = times[1].tv_usec = 0;
+   utimes(FailFile.c_str(), times);
    close(FailFd);
 
    _exit(100);
@@ -488,11 +488,11 @@ bool RSHMethod::Fetch(FetchItem *Itm)
 	 Fd.Close();
 
 	 // Timestamp
-	 struct timespec times[2];
+	 struct timeval times[2];
 	 times[0].tv_sec = FailTime;
 	 times[1].tv_sec = FailTime;
-	 times[0].tv_nsec = times[1].tv_nsec = 0;
-	 futimens(FailFd, times);
+	 times[0].tv_usec = times[1].tv_usec = 0;
+	 utimes(FailFile.c_str(), times);
 
 	 // If the file is missing we hard fail otherwise transient fail
 	 if (Missing == true)
@@ -502,11 +502,11 @@ bool RSHMethod::Fetch(FetchItem *Itm)
       }
 
       Res.Size = Fd.Size();
-      struct timespec times[2];
+      struct timeval times[2];
       times[0].tv_sec = FailTime;
       times[1].tv_sec = FailTime;
-      times[0].tv_nsec = times[1].tv_nsec = 0;
-      futimens(Fd.Fd(), times);
+      times[0].tv_usec = times[1].tv_usec = 0;
+      utimes(Fd.Name().c_str(), times);
       FailFd = -1;
    }
 

+ 6 - 6
methods/server.cc

@@ -369,11 +369,11 @@ void ServerMethod::SigTerm(int)
    if (FailFd == -1)
       _exit(100);
 
-   struct timespec times[2];
+   struct timeval times[2];
    times[0].tv_sec = FailTime;
    times[1].tv_sec = FailTime;
-   times[0].tv_nsec = times[1].tv_nsec = 0;
-   futimens(FailFd, times);
+   times[0].tv_usec = times[1].tv_usec = 0;
+   utimes(FailFile.c_str(), times);
    close(FailFd);
 
    _exit(100);
@@ -539,10 +539,10 @@ int ServerMethod::Loop()
 	    File = 0;
 	    
 	    // Timestamp
-	    struct timespec times[2];
+	    struct timeval times[2];
 	    times[0].tv_sec = times[1].tv_sec = Server->Date;
-	    times[0].tv_nsec = times[1].tv_nsec = 0;
-	    utimensat(AT_FDCWD, Queue->DestFile.c_str(), times, AT_SYMLINK_NOFOLLOW);
+	    times[0].tv_usec = times[1].tv_usec = 0;
+	    utimes(Queue->DestFile.c_str(), times);
 
 	    // Send status to APT
 	    if (Result == true)