diff options
author | David Kalnischkies <david@kalnischkies.de> | 2014-02-10 21:52:38 +0100 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2014-02-11 02:28:27 +0100 |
commit | 246bbb611d4cd5e2a13ecffb6cbe0e76390eae6f (patch) | |
tree | b26d839bc4a41e98153706084ed41778a85026a4 /methods | |
parent | e209542632e61b9bf07b809c333f1e4b9de7fde9 (diff) |
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
Diffstat (limited to 'methods')
-rw-r--r-- | methods/copy.cc | 14 | ||||
-rw-r--r-- | methods/ftp.cc | 18 | ||||
-rw-r--r-- | methods/gzip.cc | 22 | ||||
-rw-r--r-- | methods/https.cc | 6 | ||||
-rw-r--r-- | methods/rred.cc | 9 | ||||
-rw-r--r-- | methods/rsh.cc | 18 | ||||
-rw-r--r-- | methods/server.cc | 12 |
7 files changed, 46 insertions, 53 deletions
diff --git a/methods/copy.cc b/methods/copy.cc index 744cc2b51..f2a8f9ed8 100644 --- a/methods/copy.cc +++ b/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); diff --git a/methods/ftp.cc b/methods/ftp.cc index 2d05364d5..70bf4f607 100644 --- a/methods/ftp.cc +++ b/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; } diff --git a/methods/gzip.cc b/methods/gzip.cc index f1edb353b..a2844e969 100644 --- a/methods/gzip.cc +++ b/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); diff --git a/methods/https.cc b/methods/https.cc index e16e36339..146b2bfb8 100644 --- a/methods/https.cc +++ b/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; diff --git a/methods/rred.cc b/methods/rred.cc index f7dac3c19..fe7ef7322 100644 --- a/methods/rred.cc +++ b/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")); diff --git a/methods/rsh.cc b/methods/rsh.cc index a441220bf..4e1aaea26 100644 --- a/methods/rsh.cc +++ b/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; } diff --git a/methods/server.cc b/methods/server.cc index e12c23c07..76faa7e7f 100644 --- a/methods/server.cc +++ b/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) |