--- netkit-ftp-0.17/ftp/ftp.c.rasold 2005-08-22 14:22:50.000000000 +0200 +++ netkit-ftp-0.17/ftp/ftp.c 2005-08-22 14:23:02.000000000 +0200 @@ -139,7 +139,7 @@ static char *gunique(char *); static void proxtrans(const char *cmd, char *local, char *remote); static int initconn(void); -static void ptransfer(const char *direction, long bytes, +static void ptransfer(const char *direction, long long bytes, const struct timeval *t0, const struct timeval *t1); static void tvsub(struct timeval *tdiff, @@ -579,7 +579,7 @@ int (*volatile closefunc)(FILE *); void (*volatile oldintr)(int); void (*volatile oldintp)(int); - volatile long bytes = 0, hashbytes = HASHBYTES; + volatile long long bytes = 0, hashbytes = HASHBYTES; char buf[BUFSIZ], *bufp; const char *volatile lmode; @@ -713,14 +713,14 @@ if ((d = write(fileno(dout), bufp, c)) <= 0) break; if (hash) { - while (bytes >= hashbytes) { - (void) putchar('#'); - hashbytes += HASHBYTES; - } - (void) fflush(stdout); - } + while (bytes >= hashbytes) { /* <-- 'long long' signed overflow is */ + (void) putchar('#'); /* possible. In this case, we can */ + hashbytes += HASHBYTES; /* 'cycle' there for very long time. */ + } /* Search 'hasbytes' in file down, */ + (void) fflush(stdout); /* there are similar parts. */ + } /* */ if (tick && (bytes >= hashbytes)) { - printf("\rBytes transferred: %ld", bytes); + printf("\rBytes transferred: %lld", bytes); (void) fflush(stdout); while (bytes >= hashbytes) hashbytes += TICKBYTES; @@ -733,7 +733,7 @@ (void) fflush(stdout); } if (tick) { - (void) printf("\rBytes transferred: %ld\n", bytes); + (void) printf("\rBytes transferred: %lld\n", bytes); (void) fflush(stdout); } if (c < 0) @@ -755,7 +755,7 @@ hashbytes += HASHBYTES; } if (tick && (bytes >= hashbytes)) { - (void) printf("\rBytes transferred: %ld", + (void) printf("\rBytes transferred: %lld", bytes); (void) fflush(stdout); while (bytes >= hashbytes) @@ -780,7 +780,7 @@ (void) fflush(stdout); } if (tick) { - (void) printf("\rBytes transferred: %ld\n", bytes); + (void) printf("\rBytes transferred: %lld\n", bytes); (void) fflush(stdout); } if (ferror(fin)) @@ -853,9 +853,9 @@ void (*volatile oldintp)(int); void (*volatile oldintr)(int); volatile int is_retr, tcrflag, bare_lfs = 0; - static unsigned bufsize; + static unsigned bufsize=0; static char *buf; - volatile long bytes = 0, hashbytes = HASHBYTES; + volatile long long bytes = 0, hashbytes = HASHBYTES; register int c, d; struct timeval start, stop; struct stat st; @@ -1031,7 +1031,7 @@ (void) fflush(stdout); } if (tick && (bytes >= hashbytes) && is_retr) { - (void) printf("\rBytes transferred: %ld", + (void) printf("\rBytes transferred: %lld", bytes); (void) fflush(stdout); while (bytes >= hashbytes) @@ -1045,7 +1045,7 @@ (void) fflush(stdout); } if (tick && is_retr) { - (void) printf("\rBytes transferred: %ld\n", bytes); + (void) printf("\rBytes transferred: %lld\n", bytes); (void) fflush(stdout); } if (c < 0) { @@ -1095,7 +1095,7 @@ hashbytes += HASHBYTES; } if (tick && (bytes >= hashbytes) && is_retr) { - printf("\rBytes transferred: %ld", + printf("\rBytes transferred: %lld", bytes); fflush(stdout); while (bytes >= hashbytes) @@ -1126,7 +1126,7 @@ (void) fflush(stdout); } if (tick && is_retr) { - (void) printf("\rBytes transferred: %ld\n", bytes); + (void) printf("\rBytes transferred: %lld\n", bytes); (void) fflush(stdout); } if (bare_lfs) { @@ -1540,7 +1540,7 @@ } static void -ptransfer(const char *direction, long bytes, +ptransfer(const char *direction, long long bytes, const struct timeval *t0, const struct timeval *t1) { @@ -1552,7 +1552,7 @@ s = td.tv_sec + (td.tv_usec / 1000000.); #define nz(x) ((x) == 0 ? 1 : (x)) bs = bytes / nz(s); - printf("%ld bytes %s in %.3g secs (%.2g Kbytes/sec)\n", + printf("%lld bytes %s in %.3g secs (%.2g Kbytes/sec)\n", bytes, direction, s, bs / 1024.0); } }