commit-inetutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Inetutils branch, master, updated. inetutils-1_9_1-105-g890be


From: Mats Erik Andersson
Subject: [SCM] GNU Inetutils branch, master, updated. inetutils-1_9_1-105-g890be11
Date: Thu, 31 May 2012 16:30:22 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Inetutils ".

The branch, master has been updated
       via  890be117d428028e4e77608303416598c163c158 (commit)
      from  ac18df39a8502d98ebd8988937fffb98c5e405df (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/inetutils.git/commit/?id=890be117d428028e4e77608303416598c163c158


commit 890be117d428028e4e77608303416598c163c158
Author: Mats Erik Andersson <address@hidden>
Date:   Thu May 31 17:13:41 2012 +0200

    ftp: Adaptive block size.

diff --git a/ChangeLog b/ChangeLog
index 2aebde6..9f72a57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
  2012-05-31  Mats Erik Andersson  <address@hidden>
 
+       ftp: Adaptive block size in image mode.
+
+       * ftp/ftp.c (sendrequest): New variables BLKSIZE, BUFSIZE.
+       Change type of BUF to `static char *' for allocation.
+       Set BLKSIZE to `st_blksize' for input file.  Allocate and
+       increase size of buffer as needed.
+       <TYPE_I>: Use BUFSIZE for buffer length when calling read().
+       (recvrequest): Call fstat() on successful stream `fout'
+       and set BLKSIZE to `st_blksize'.
+       (abort_remote): Replace macro BUFSIZ by `sizeof(buf)'.
+
+ 2012-05-31  Mats Erik Andersson  <address@hidden>
+
        ftpd: Use adaptive block sizes in image mode.
 
        * ftpd/ftpd.c (receive_data): Update signature to
diff --git a/ftp/ftp.c b/ftp/ftp.c
index b662259..3317055 100644
--- a/ftp/ftp.c
+++ b/ftp/ftp.c
@@ -542,7 +542,10 @@ sendrequest (char *cmd, char *local, char *remote, int 
printnames)
   int (*closefunc) (FILE *);
   sighandler_t oldintr, oldintp;
   long long bytes = 0, local_hashbytes = hashbytes;
-  char *lmode, buf[BUFSIZ], *bufp;
+  char *lmode, *bufp;
+  int blksize = BUFSIZ;
+  static int bufsize = 0;
+  static char *buf;
 
   if (verbose && printnames)
     {
@@ -616,6 +619,7 @@ sendrequest (char *cmd, char *local, char *remote, int 
printnames)
          code = -1;
          return;
        }
+       blksize = st.st_blksize;
     }
   if (initconn ())
     {
@@ -687,6 +691,20 @@ sendrequest (char *cmd, char *local, char *remote, int 
printnames)
   dout = dataconn (lmode);
   if (dout == NULL)
     goto abort;
+
+  if (blksize > bufsize)
+    {
+      free (buf);
+      buf = malloc ((unsigned) blksize);
+      if (buf == NULL)
+       {
+         error (0, errno, "malloc");
+         bufsize = 0;
+         goto abort;
+       }
+      bufsize = blksize;
+    }
+
   gettimeofday (&start, (struct timezone *) 0);
   oldintp = signal (SIGPIPE, SIG_IGN);
   switch (curtype)
@@ -695,7 +713,7 @@ sendrequest (char *cmd, char *local, char *remote, int 
printnames)
     case TYPE_I:
     case TYPE_L:
       errno = d = 0;
-      while ((c = read (fileno (fin), buf, sizeof (buf))) > 0)
+      while ((c = read (fileno (fin), buf, bufsize)) > 0)
        {
          bytes += c;
          for (bufp = buf; c > 0; c -= d, bufp += d)
@@ -823,7 +841,8 @@ recvrequest (char *cmd, char *local, char *remote, char 
*lmode, int printnames)
   FILE *fout, *din = 0;
   int (*closefunc) (FILE *);
   sighandler_t oldintr, oldintp;
-  int c, d, is_retr, tcrflag, bare_lfs = 0, blksize;
+  int c, d, is_retr, tcrflag, bare_lfs = 0;
+  int blksize = BUFSIZ;
   static int bufsize = 0;
   static char *buf;
   long long bytes = 0, local_hashbytes = hashbytes;
@@ -909,6 +928,7 @@ recvrequest (char *cmd, char *local, char *remote, char 
*lmode, int printnames)
   din = dataconn ("r");
   if (din == NULL)
     goto abort;
+
   if (strcmp (local, "-") == 0)
     fout = stdout;
   else if (*local == '|')
@@ -924,15 +944,18 @@ recvrequest (char *cmd, char *local, char *remote, char 
*lmode, int printnames)
     }
   else
     {
+      struct stat st;
+
       fout = fopen (local, lmode);
-      if (fout == NULL)
+      if (fout == NULL || fstat (fileno (fout), &st) < 0)
        {
          error (0, errno, "local: %s", local);
          goto abort;
        }
       closefunc = fclose;
+      blksize = st.st_blksize;
     }
-  blksize = BUFSIZ;
+
   if (blksize > bufsize)
     {
       free (buf);
@@ -945,6 +968,7 @@ recvrequest (char *cmd, char *local, char *remote, char 
*lmode, int printnames)
        }
       bufsize = blksize;
     }
+
   gettimeofday (&start, (struct timezone *) 0);
   switch (curtype)
     {
@@ -974,6 +998,7 @@ recvrequest (char *cmd, char *local, char *remote, char 
*lmode, int printnames)
              fflush (stdout);
            }
        }
+
       if (hash && bytes > 0)
        {
          if (bytes < local_hashbytes)
@@ -1891,7 +1916,7 @@ abort_remote (FILE *din)
     }
   if (din && FD_ISSET (fileno (din), &mask))
     {
-      while (read (fileno (din), buf, BUFSIZ) > 0)
+      while (read (fileno (din), buf, sizeof (buf)) > 0)
        /* LOOP */ ;
     }
   if (getreply (0) == ERROR && code == 552)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog |   13 +++++++++++++
 ftp/ftp.c |   37 +++++++++++++++++++++++++++++++------
 2 files changed, 44 insertions(+), 6 deletions(-)


hooks/post-receive
-- 
GNU Inetutils 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]