summaryrefslogtreecommitdiffstats
path: root/lib/Plugins/FileTransfer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Plugins/FileTransfer.cpp')
-rw-r--r--lib/Plugins/FileTransfer.cpp31
1 files changed, 11 insertions, 20 deletions
diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp
index 60e1e66..b08ecd5 100644
--- a/lib/Plugins/FileTransfer.cpp
+++ b/lib/Plugins/FileTransfer.cpp
@@ -80,11 +80,7 @@ void CFileTransfer::SendFile(const char *pURL, const char *pFilename)
{
throw CABRTException(EXCEP_PLUGIN, "Can't open archive file '%s'", pFilename);
}
- if (fstat(fileno(f), &buf) == -1)
- {
- fclose(f);
- throw CABRTException(EXCEP_PLUGIN, "Can't stat archive file '%s'", pFilename);
- }
+ fstat(fileno(f), &buf); /* never fails */
curl = xcurl_easy_init();
/* enable uploading */
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
@@ -92,7 +88,7 @@ void CFileTransfer::SendFile(const char *pURL, const char *pFilename)
curl_easy_setopt(curl, CURLOPT_URL, wholeURL.c_str());
/* FILE handle: passed to the default callback, it will fread() it */
curl_easy_setopt(curl, CURLOPT_READDATA, f);
- curl_easy_setopt(curl, CURLOPT_INFILESIZE, buf.st_size);
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)buf.st_size);
/* everything is done here; result 0 means success */
int result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
@@ -110,13 +106,11 @@ parameter "something" to each filename,
now used in create_zip, but can be useful for some future
archivers as well
*/
-static void traverse_directory(const char * directory, void * something,
- void (*func)(void *, const char *) )
+static void traverse_directory(const char *directory, void *something,
+ void (*func)(void *, const char *))
{
- DIR * dp;
- struct dirent * dirp;
- char complete_name[BUFSIZ];
- char * end;
+ DIR *dp;
+ struct dirent *dirp;
dp = opendir(directory);
if (dp == NULL)
@@ -127,14 +121,8 @@ static void traverse_directory(const char * directory, void * something,
{
if (is_regular_file(dirp, directory))
{
- end = stpcpy(complete_name, directory);
- if (end[-1] != '/')
- {
- *end++ = '/';
- }
- end = stpcpy(end, dirp->d_name);
-
- func(something, complete_name);
+ string complete_name = concat_path_file(directory, dirp->d_name);
+ func(something, complete_name.c_str());
}
}
closedir(dp);
@@ -189,6 +177,7 @@ static void create_targz(const char * archive_name, const char * directory)
f = fopen(name_without_gz, "r");
if (f == NULL)
{
+//TODO: we leak uncompressed tar file on disk??
free(name_without_gz);
return;
}
@@ -234,6 +223,7 @@ static void create_tarbz2(const char * archive_name, const char * directory)
f = fopen(archive_name, "w");
if (f == NULL)
{
+//TODO: we leak uncompressed tar file on disk??
close(tarFD);
free(name_without_bz2);
return;
@@ -320,6 +310,7 @@ void CFileTransfer::Run(const char *pActionDir, const char *pArgs)
else if (strcmp(pArgs, "one") == 0)
{
/* just send one archive */
+//TODO: where are we creating it??!! In cwd, which may well be / ??!!!
string archivename = ssprintf("%s-%s%s", hostname, DirBase(pActionDir).c_str(), m_sArchiveType.c_str());
try
{