summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-01-28 16:43:49 +0100
committerMichael Vogt <mvo@debian.org>2014-01-28 16:43:49 +0100
commitacead5b93cf49ab33cba4be2ea8e1b253ed0f2bf (patch)
tree7c8631716d2182c7891533a0e4ce3b6962595f17 /methods
parentf4a631adf2f14c99d61ecb7f61cb1b3625c1cde4 (diff)
parentbae81c1307e956aa8928c9d6a77830fb733cd61f (diff)
Merge branch 'debian/sid' into ubuntu/master
Diffstat (limited to 'methods')
-rw-r--r--methods/connect.cc6
-rw-r--r--methods/copy.cc18
-rw-r--r--methods/ftp.cc49
-rw-r--r--methods/gzip.cc26
-rw-r--r--methods/http.cc4
-rw-r--r--methods/https.cc10
-rw-r--r--methods/https.h2
-rw-r--r--methods/mirror.cc8
-rw-r--r--methods/rsh.cc36
-rw-r--r--methods/server.cc25
-rw-r--r--methods/server.h2
11 files changed, 94 insertions, 92 deletions
diff --git a/methods/connect.cc b/methods/connect.cc
index fc7a72ee9..d9c9a1dd4 100644
--- a/methods/connect.cc
+++ b/methods/connect.cc
@@ -142,9 +142,9 @@ bool Connect(std::string Host,int Port,const char *Service,int DefPort,int &Fd,
// Convert the port name/number
char ServStr[300];
if (Port != 0)
- snprintf(ServStr,sizeof(ServStr),"%u",Port);
+ snprintf(ServStr,sizeof(ServStr),"%i", Port);
else
- snprintf(ServStr,sizeof(ServStr),"%s",Service);
+ snprintf(ServStr,sizeof(ServStr),"%s", Service);
/* We used a cached address record.. Yes this is against the spec but
the way we have setup our rotating dns suggests that this is more
@@ -190,7 +190,7 @@ bool Connect(std::string Host,int Port,const char *Service,int DefPort,int &Fd,
{
if (DefPort != 0)
{
- snprintf(ServStr,sizeof(ServStr),"%u",DefPort);
+ snprintf(ServStr, sizeof(ServStr), "%i", DefPort);
DefPort = 0;
continue;
}
diff --git a/methods/copy.cc b/methods/copy.cc
index e81d0022b..744cc2b51 100644
--- a/methods/copy.cc
+++ b/methods/copy.cc
@@ -18,7 +18,6 @@
#include <apt-pkg/hashes.h>
#include <sys/stat.h>
-#include <utime.h>
#include <unistd.h>
#include <apti18n.h>
/*}}}*/
@@ -71,18 +70,19 @@ bool CopyMethod::Fetch(FetchItem *Itm)
}
From.Close();
- To.Close();
-
+
// Transfer the modification times
- struct utimbuf TimeBuf;
- TimeBuf.actime = Buf.st_atime;
- TimeBuf.modtime = Buf.st_mtime;
- if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0)
+ struct timespec 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("utime",_("Failed to set modification time"));
+ return _error->Errno("futimens",_("Failed to set modification time"));
}
-
+ To.Close();
+
Hashes Hash;
FileFd Fd(Res.Filename, FileFd::ReadOnly);
Hash.AddFD(Fd);
diff --git a/methods/ftp.cc b/methods/ftp.cc
index 979adca62..2d05364d5 100644
--- a/methods/ftp.cc
+++ b/methods/ftp.cc
@@ -26,7 +26,6 @@
#include <sys/stat.h>
#include <sys/time.h>
-#include <utime.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
@@ -953,14 +952,16 @@ void FtpMethod::SigTerm(int)
{
if (FailFd == -1)
_exit(100);
- close(FailFd);
-
+
// Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(FailFile.c_str(),&UBuf);
-
+ struct timespec times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_nsec = times[1].tv_nsec = 0;
+ futimens(FailFd, times);
+
+ close(FailFd);
+
_exit(100);
}
/*}}}*/
@@ -1059,13 +1060,14 @@ bool FtpMethod::Fetch(FetchItem *Itm)
if (Server->Get(File,Fd,Res.ResumePoint,Hash,Missing) == false)
{
Fd.Close();
-
+
// Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(FailFile.c_str(),&UBuf);
-
+ struct timespec times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_nsec = times[1].tv_nsec = 0;
+ futimens(FailFd, times);
+
// If the file is missing we hard fail and delete the destfile
// otherwise transient fail
if (Missing == true) {
@@ -1077,20 +1079,21 @@ bool FtpMethod::Fetch(FetchItem *Itm)
}
Res.Size = Fd.Size();
+
+ // Timestamp
+ struct timespec 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);
+ FailFd = -1;
}
-
+
Res.LastModified = FailTime;
Res.TakeHashes(Hash);
-
- // Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(Queue->DestFile.c_str(),&UBuf);
- FailFd = -1;
URIDone(Res);
-
+
return true;
}
/*}}}*/
diff --git a/methods/gzip.cc b/methods/gzip.cc
index 48c8e9892..f1edb353b 100644
--- a/methods/gzip.cc
+++ b/methods/gzip.cc
@@ -19,7 +19,6 @@
#include <sys/stat.h>
#include <unistd.h>
-#include <utime.h>
#include <stdio.h>
#include <errno.h>
#include <apti18n.h>
@@ -94,32 +93,35 @@ bool GzipMethod::Fetch(FetchItem *Itm)
}
From.Close();
- To.Close();
-
+
if (Failed == true)
return false;
-
+
// Transfer the modification times
struct stat Buf;
if (stat(Path.c_str(),&Buf) != 0)
return _error->Errno("stat",_("Failed to stat"));
- struct utimbuf TimeBuf;
- TimeBuf.actime = Buf.st_atime;
- TimeBuf.modtime = Buf.st_mtime;
- if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0)
- return _error->Errno("utime",_("Failed to set modification time"));
+ struct timespec 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"));
-
+
// Return a Done response
Res.LastModified = Buf.st_mtime;
- Res.Size = Buf.st_size;
Res.TakeHashes(Hash);
URIDone(Res);
-
return true;
}
/*}}}*/
diff --git a/methods/http.cc b/methods/http.cc
index b22b61efc..e1390afcb 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -97,8 +97,6 @@ void CircleBuf::Reset()
is non-blocking.. */
bool CircleBuf::Read(int Fd)
{
- unsigned long long BwReadMax;
-
while (1)
{
// Woops, buffer is full
@@ -106,7 +104,7 @@ bool CircleBuf::Read(int Fd)
return true;
// what's left to read in this tick
- BwReadMax = CircleBuf::BwReadLimit/BW_HZ;
+ unsigned long long const BwReadMax = CircleBuf::BwReadLimit/BW_HZ;
if(CircleBuf::BwReadLimit) {
struct timeval now;
diff --git a/methods/https.cc b/methods/https.cc
index 2a562434b..e16e36339 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -21,7 +21,6 @@
#include <sys/stat.h>
#include <sys/time.h>
-#include <utime.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
@@ -405,10 +404,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
curl_easy_getinfo(curl, CURLINFO_FILETIME, &Res.LastModified);
if (Res.LastModified != -1)
{
- struct utimbuf UBuf;
- UBuf.actime = Res.LastModified;
- UBuf.modtime = Res.LastModified;
- utime(File->Name().c_str(),&UBuf);
+ struct timespec 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);
}
else
Res.LastModified = resultStat.st_mtime;
diff --git a/methods/https.h b/methods/https.h
index 8632d6d02..89a89d19c 100644
--- a/methods/https.h
+++ b/methods/https.h
@@ -65,7 +65,7 @@ class HttpsMethod : public pkgAcqMethod
public:
FileFd *File;
- HttpsMethod() : pkgAcqMethod("1.2",Pipeline | SendConfig)
+ HttpsMethod() : pkgAcqMethod("1.2",Pipeline | SendConfig), File(NULL)
{
File = 0;
curl = curl_easy_init();
diff --git a/methods/mirror.cc b/methods/mirror.cc
index 854366318..83ef0d133 100644
--- a/methods/mirror.cc
+++ b/methods/mirror.cc
@@ -114,7 +114,7 @@ bool MirrorMethod::Clean(string Dir)
for(I=list.begin(); I != list.end(); ++I)
{
string uri = (*I)->GetURI();
- if(uri.find("mirror://") != 0)
+ if(uri.compare(0, strlen("mirror://"), "mirror://") != 0)
continue;
string BaseUri = uri.substr(0,uri.size()-1);
if (URItoFileName(BaseUri) == Dir->d_name)
@@ -198,9 +198,9 @@ bool MirrorMethod::RandomizeMirrorFile(string mirror_file)
// "stable" on the same machine. this is to avoid running into out-of-sync
// issues (i.e. Release/Release.gpg different on each mirror)
struct utsname buf;
- int seed=1, i;
+ int seed=1;
if(uname(&buf) == 0) {
- for(i=0,seed=1; buf.nodename[i] != 0; i++) {
+ for(int i=0,seed=1; buf.nodename[i] != 0; ++i) {
seed = seed * 31 + buf.nodename[i];
}
}
@@ -306,7 +306,7 @@ bool MirrorMethod::InitMirrors()
if (s.size() == 0)
continue;
// ignore non http lines
- if (s.find("http://") != 0)
+ if (s.compare(0, strlen("http://"), "http://") != 0)
continue;
AllMirrors.push_back(s);
diff --git a/methods/rsh.cc b/methods/rsh.cc
index d76dca6ef..a441220bf 100644
--- a/methods/rsh.cc
+++ b/methods/rsh.cc
@@ -20,7 +20,6 @@
#include <sys/stat.h>
#include <sys/time.h>
-#include <utime.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
@@ -395,13 +394,14 @@ void RSHMethod::SigTerm(int sig)
{
if (FailFd == -1)
_exit(100);
- close(FailFd);
- // Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(FailFile.c_str(),&UBuf);
+ // Transfer the modification times
+ struct timespec times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_nsec = times[1].tv_nsec = 0;
+ futimens(FailFd, times);
+ close(FailFd);
_exit(100);
}
@@ -488,10 +488,11 @@ bool RSHMethod::Fetch(FetchItem *Itm)
Fd.Close();
// Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(FailFile.c_str(),&UBuf);
+ struct timespec times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_nsec = times[1].tv_nsec = 0;
+ futimens(FailFd, times);
// If the file is missing we hard fail otherwise transient fail
if (Missing == true)
@@ -501,18 +502,17 @@ bool RSHMethod::Fetch(FetchItem *Itm)
}
Res.Size = Fd.Size();
+ struct timespec 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);
+ FailFd = -1;
}
Res.LastModified = FailTime;
Res.TakeHashes(Hash);
- // Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(Queue->DestFile.c_str(),&UBuf);
- FailFd = -1;
-
URIDone(Res);
return true;
diff --git a/methods/server.cc b/methods/server.cc
index a2128441c..e12c23c07 100644
--- a/methods/server.cc
+++ b/methods/server.cc
@@ -17,9 +17,9 @@
#include <apt-pkg/hashes.h>
#include <apt-pkg/netrc.h>
+#include <fcntl.h>
#include <sys/stat.h>
#include <sys/time.h>
-#include <utime.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
@@ -368,14 +368,14 @@ void ServerMethod::SigTerm(int)
{
if (FailFd == -1)
_exit(100);
+
+ struct timespec times[2];
+ times[0].tv_sec = FailTime;
+ times[1].tv_sec = FailTime;
+ times[0].tv_nsec = times[1].tv_nsec = 0;
+ futimens(FailFd, times);
close(FailFd);
-
- // Timestamp
- struct utimbuf UBuf;
- UBuf.actime = FailTime;
- UBuf.modtime = FailTime;
- utime(FailFile.c_str(),&UBuf);
-
+
_exit(100);
}
/*}}}*/
@@ -539,11 +539,10 @@ int ServerMethod::Loop()
File = 0;
// Timestamp
- struct utimbuf UBuf;
- time(&UBuf.actime);
- UBuf.actime = Server->Date;
- UBuf.modtime = Server->Date;
- utime(Queue->DestFile.c_str(),&UBuf);
+ struct timespec 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);
// Send status to APT
if (Result == true)
diff --git a/methods/server.h b/methods/server.h
index 4dc6a1f2f..2b81e6173 100644
--- a/methods/server.h
+++ b/methods/server.h
@@ -137,7 +137,7 @@ class ServerMethod : public pkgAcqMethod
virtual ServerState * CreateServerState(URI uri) = 0;
virtual void RotateDNS() = 0;
- ServerMethod(const char *Ver,unsigned long Flags = 0) : pkgAcqMethod(Ver, Flags), PipelineDepth(0), AllowRedirect(false), Debug(false) {};
+ ServerMethod(const char *Ver,unsigned long Flags = 0) : pkgAcqMethod(Ver, Flags), Server(NULL), File(NULL), PipelineDepth(0), AllowRedirect(false), Debug(false) {};
virtual ~ServerMethod() {};
};