]> git.saurik.com Git - apt.git/commitdiff
use utimes instead of utimensat/futimens
authorDavid Kalnischkies <david@kalnischkies.de>
Mon, 10 Feb 2014 20:52:38 +0000 (21:52 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Tue, 11 Feb 2014 01:28:27 +0000 (02:28 +0100)
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
apt-inst/dirstream.cc
ftparchive/multicompress.cc
methods/copy.cc
methods/ftp.cc
methods/gzip.cc
methods/https.cc
methods/rred.cc
methods/rsh.cc
methods/server.cc

index b62bdcae12457e0440ea3910093449218da5a7cc..e06c30a572d7c852adca4fc39d0b24c16cf1d754 100644 (file)
@@ -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);
index c1bd6037a926e61decc488e253fe01fd52f5d17c..1555d2f2d3182d9b857088513d1eb395984d0205 100644 (file)
@@ -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;
         }
       }
index 744cc2b51a024b6f421af852d5396d4fd2ad6e37..f2a8f9ed8a4154032eea2b530f032d6b6f0f11b0 100644 (file)
@@ -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);
index 2d05364d5849d6bc340a387f369c136bf2e569cb..70bf4f6079b2a42b4f56d336611953c8c1fe3f2c 100644 (file)
@@ -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;
    }
 
index f1edb353bce02dca189006a263b7be4805d23483..a2844e9692b0e1b7128095adb4aa20af1716a9ea 100644 (file)
@@ -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);
index e16e363397e0c874d5e52735e5fde22eecabc949..146b2bfb8ca360b96d155b90cbefe1689d2f6fed 100644 (file)
@@ -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;
index f7dac3c191f8a89f8038fbaabe52881fe19c3221..fe7ef7322a40d0c08397f8501fc85e347c85889a 100644 (file)
@@ -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"));
index a441220bfe0d211a4b75d38d16b6127a70388035..4e1aaea26d4b2965fde61d2dd35ffe265396775e 100644 (file)
@@ -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;
    }
 
index e12c23c0759b98156c92b2d01b16c11bf150caef..76faa7e7f035f9c69ed15a39000cf36bb50ad03a 100644 (file)
@@ -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)