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
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <apti18n.h>
#include <errno.h>
#include <unistd.h>
#include <apti18n.h>
/* Set the modification times. The only way it can fail is if someone
has futzed with our file, which is intolerable :> */
/* 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_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);
if (close(Fd) != 0)
return _error->Errno("close",_("Failed to close file %s"),Itm.Name);
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iostream>
#include <unistd.h>
#include <iostream>
if (UpdateMTime > 0 &&
(Now - St.st_mtime > (signed)UpdateMTime || St.st_mtime > Now))
{
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);
#include <apt-pkg/hashes.h>
#include <sys/stat.h>
#include <apt-pkg/hashes.h>
#include <sys/stat.h>
#include <unistd.h>
#include <apti18n.h>
/*}}}*/
#include <unistd.h>
#include <apti18n.h>
/*}}}*/
// Transfer the modification times
// 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_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);
Hashes Hash;
FileFd Fd(Res.Filename, FileFd::ReadOnly);
- struct timespec times[2];
+ struct timeval times[2];
times[0].tv_sec = FailTime;
times[1].tv_sec = FailTime;
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);
- struct timespec times[2];
+ struct timeval times[2];
times[0].tv_sec = FailTime;
times[1].tv_sec = FailTime;
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
// If the file is missing we hard fail and delete the destfile
// otherwise transient fail
Res.Size = Fd.Size();
// Timestamp
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_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);
#include <apt-pkg/hashes.h>
#include <sys/stat.h>
#include <apt-pkg/hashes.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
+ Res.Size = To.FileSize();
+ To.Close();
if (Failed == true)
return false;
if (Failed == true)
return false;
if (stat(Path.c_str(),&Buf) != 0)
return _error->Errno("stat",_("Failed to stat"));
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[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
// Return a Done response
- Res.LastModified = Buf.st_mtime;
Res.TakeHashes(Hash);
URIDone(Res);
Res.TakeHashes(Hash);
URIDone(Res);
curl_easy_getinfo(curl, CURLINFO_FILETIME, &Res.LastModified);
if (Res.LastModified != -1)
{
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_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;
}
else
Res.LastModified = resultStat.st_mtime;
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
stat(patch_name.c_str(), &bufpatch) != 0)
return _error->Errno("stat", _("Failed to stat"));
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_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"));
if (stat(Itm->DestFile.c_str(), &bufbase) != 0)
return _error->Errno("stat", _("Failed to stat"));
_exit(100);
// Transfer the modification times
_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_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);
close(FailFd);
_exit(100);
- struct timespec times[2];
+ struct timeval times[2];
times[0].tv_sec = FailTime;
times[1].tv_sec = FailTime;
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)
// If the file is missing we hard fail otherwise transient fail
if (Missing == true)
- struct timespec times[2];
+ struct timeval times[2];
times[0].tv_sec = FailTime;
times[1].tv_sec = FailTime;
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);
if (FailFd == -1)
_exit(100);
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_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);
close(FailFd);
_exit(100);
- struct timespec times[2];
+ struct timeval times[2];
times[0].tv_sec = times[1].tv_sec = Server->Date;
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)
// Send status to APT
if (Result == true)