(send_data): avoid calling mmap with `len == 0'. Some mmap:s rather
dislike that (Solaris) and some munmap get grumpy later. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6804 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1292,22 +1292,30 @@ send_data(FILE *instr, FILE *outstr)
|
|||||||
char *chunk;
|
char *chunk;
|
||||||
int in = fileno(instr);
|
int in = fileno(instr);
|
||||||
if(fstat(in, &st) == 0 && S_ISREG(st.st_mode)) {
|
if(fstat(in, &st) == 0 && S_ISREG(st.st_mode)) {
|
||||||
chunk = mmap(0, st.st_size, PROT_READ, MAP_SHARED, in, 0);
|
/*
|
||||||
if((void *)chunk != (void *)MAP_FAILED) {
|
* mmap zero bytes has potential of loosing, don't do it.
|
||||||
cnt = st.st_size - restart_point;
|
*/
|
||||||
sec_write(fileno(outstr),
|
if (st.st_size > 0) {
|
||||||
chunk + restart_point,
|
chunk = mmap(0, st.st_size, PROT_READ,
|
||||||
cnt);
|
MAP_SHARED, in, 0);
|
||||||
munmap(chunk, st.st_size);
|
if((void *)chunk != (void *)MAP_FAILED) {
|
||||||
sec_fflush(outstr);
|
cnt = st.st_size - restart_point;
|
||||||
byte_count = cnt;
|
sec_write(fileno(outstr),
|
||||||
|
chunk + restart_point,
|
||||||
|
cnt);
|
||||||
|
if (munmap(chunk, st.st_size) < 0)
|
||||||
|
warn ("munmap");
|
||||||
|
sec_fflush(outstr);
|
||||||
|
byte_count = cnt;
|
||||||
|
transflag = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
transflag = 0;
|
transflag = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
if(transflag){
|
if(transflag) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
netfd = fileno(outstr);
|
netfd = fileno(outstr);
|
||||||
@@ -1495,7 +1503,7 @@ statcmd(void)
|
|||||||
struct sockaddr_in *sin;
|
struct sockaddr_in *sin;
|
||||||
u_char *a, *p;
|
u_char *a, *p;
|
||||||
|
|
||||||
lreply(211, "%s FTP server status:", hostname, version);
|
lreply(211, "%s FTP server (%s) status:", hostname, version);
|
||||||
printf(" %s\r\n", version);
|
printf(" %s\r\n", version);
|
||||||
printf(" Connected to %s", remotehost);
|
printf(" Connected to %s", remotehost);
|
||||||
if (!isdigit(remotehost[0]))
|
if (!isdigit(remotehost[0]))
|
||||||
|
Reference in New Issue
Block a user