[PATCH] Add xfer:log-dir parameter to write transfer_log in arbitrary dir.

Timur Sufiev <[email protected]> Tue, 01 Feb 2011 10:42:22 +0300
Newsgroups gmane.network.lftp.devel
Message-ID <[email protected]>
Hello!

I think it would be convenient to specify arbitrary directory for=20
storing transfer_log (it is useful when several processes using lftp are=20
launched simultaneously, and we need to analyze transfer_log for each=20
process separately). Here is the patch, feel free to make=20
suggestions/corrections etc.

---
  src/FileCopy.cc |   10 +++++++++-
  src/ResMgr.cc   |    4 ++++
  src/ResMgr.h    |    1 +
  src/resource.cc |    1 +
  4 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/FileCopy.cc b/src/FileCopy.cc
index a462cca..ab34959 100644
--- a/src/FileCopy.cc
+++ b/src/FileCopy.cc
@@ -629,7 +629,15 @@ void FileCopy::LogTransfer()
        return;
     if(!transfer_log)
     {
-      int=20
fd=3Dopen(dir_file(get_lftp_home(),"transfer_log"),O_WRONLY|O_APPEND|O_CR=
EAT,0600);
+      const char *dirname =3D ResMgr::Query("xfer:log-dir", 0);
+      int fd;
+
+      if ( dirname && strcmp(dirname, "") ) {
+       =20
fd=3Dopen(dir_file(dirname,"transfer_log"),O_WRONLY|O_APPEND|O_CREAT,0600=
);
+      }
+      else
+       =20
fd=3Dopen(dir_file(get_lftp_home(),"transfer_log"),O_WRONLY|O_APPEND|O_CR=
EAT,0600);
+
        if(fd=3D=3D-1)
       return;
        transfer_log=3Dnew Log;
diff --git a/src/ResMgr.cc b/src/ResMgr.cc
index 18f98fb..30b3e99 100644
--- a/src/ResMgr.cc
+++ b/src/ResMgr.cc
@@ -880,6 +880,10 @@ const char *ResMgr::DirReadable(xstring_c *value)
  {
     return FileAccessible(value,R_OK|X_OK,1);
  }
+const char *ResMgr::DirWritable(xstring_c *value)
+{
+   return FileAccessible(value,R_OK|X_OK|W_OK,1);
+}

  #ifdef HAVE_ICONV
  CDECL_BEGIN
diff --git a/src/ResMgr.h b/src/ResMgr.h
index 98ae105..ee0b8de 100644
--- a/src/ResMgr.h
+++ b/src/ResMgr.h
@@ -112,6 +112,7 @@ public:
     static const char *FileReadable(xstring_c *value);
     static const char *FileExecutable(xstring_c *value);
     static const char *DirReadable(xstring_c *value);
+   static const char *DirWritable(xstring_c *value);
     static const char *CharsetValidate(xstring_c *value);
     static const char *NoClosure(xstring_c *);
     static bool str2bool(const char *value);
diff --git a/src/resource.cc b/src/resource.cc
index 213b7a7..a89de5a 100644
--- a/src/resource.cc
+++ b/src/resource.cc
@@ -341,6 +341,7 @@ static ResType lftp_vars[] =3D {
     {"xfer:verify-command",     "",      ResMgr::FileExecutable,0},
     {"xfer:log",             "yes",     =20
ResMgr::BoolValidate,ResMgr::NoClosure},
     {"xfer:auto-rename",         "no",     =20
ResMgr::BoolValidate,ResMgr::NoClosure},
+   {"xfer:log-dir",              "",      ResMgr::DirWritable,0},

  #if USE_SSL
     {"ssl:ca-file",         "",     =20
ResMgr::FileReadable,ResMgr::NoClosure},
--=20
1.7.3.5

--=20
=D0=A1 =D1=83=D0=B2=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC,
=D0=A1=D1=83=D1=84=D0=B8=D0=B5=D0=B2 =D0=A2=D0=B8=D0=BC=D1=83=D1=80