do a better job of supporting files larger than 2GB
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9796 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -283,6 +283,22 @@ tolocal(argc, argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
sizestr(off_t size)
|
||||||
|
{
|
||||||
|
static char ss[32];
|
||||||
|
char *p;
|
||||||
|
ss[sizeof(ss) - 1] = '\0';
|
||||||
|
for(p = ss + sizeof(ss) - 2; p >= ss; p--) {
|
||||||
|
*p = '0' + size % 10;
|
||||||
|
size /= 10;
|
||||||
|
if(size == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ss;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
source(argc, argv)
|
source(argc, argv)
|
||||||
int argc;
|
int argc;
|
||||||
@@ -333,8 +349,8 @@ syserr: run_err("%s: %s", name, strerror(errno));
|
|||||||
goto next;
|
goto next;
|
||||||
}
|
}
|
||||||
#define MODEMASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
|
#define MODEMASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
|
||||||
(void)snprintf(buf, sizeof(buf), "C%04o %lu %s\n",
|
snprintf(buf, sizeof(buf), "C%04o %s %s\n",
|
||||||
stb.st_mode & MODEMASK, (unsigned long)stb.st_size, last);
|
stb.st_mode & MODEMASK, sizestr(stb.st_size), last);
|
||||||
(void)write(remout, buf, strlen(buf));
|
(void)write(remout, buf, strlen(buf));
|
||||||
if (response() < 0)
|
if (response() < 0)
|
||||||
goto next;
|
goto next;
|
||||||
@@ -594,16 +610,13 @@ bad: run_err("%s: %s", np, strerror(errno));
|
|||||||
if (i + amt > size)
|
if (i + amt > size)
|
||||||
amt = size - i;
|
amt = size - i;
|
||||||
count += amt;
|
count += amt;
|
||||||
do {
|
if((j = net_read(remin, cp, amt)) != amt) {
|
||||||
j = read(remin, cp, amt);
|
run_err("%s", j ? strerror(errno) :
|
||||||
if (j <= 0) {
|
"dropped connection");
|
||||||
run_err("%s", j ? strerror(errno) :
|
exit(1);
|
||||||
"dropped connection");
|
}
|
||||||
exit(1);
|
amt -= j;
|
||||||
}
|
cp += j;
|
||||||
amt -= j;
|
|
||||||
cp += j;
|
|
||||||
} while (amt > 0);
|
|
||||||
if (count == bp->cnt) {
|
if (count == bp->cnt) {
|
||||||
/* Keep reading so we stay sync'd up. */
|
/* Keep reading so we stay sync'd up. */
|
||||||
if (wrerr == NO) {
|
if (wrerr == NO) {
|
||||||
|
Reference in New Issue
Block a user