1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-04 11:40:22 +00:00

(write_segment): Write valid data in units of 1<<13,

but write zeros only a page at a time.
This commit is contained in:
Richard M. Stallman 1995-10-08 19:29:57 +00:00
parent a96621c61e
commit 5a31e1d01c

View File

@ -1014,15 +1014,18 @@ write_segment (new, ptr, end)
register int i, nwrite, ret;
char buf[80];
extern int errno;
/* This is the normal amount to write at once.
It is the size of block that NFS uses. */
int writesize = 1 << 13;
int pagesize = getpagesize ();
char *zeros = (char *) alloca (pagesize);
char zeros[1 << 13];
bzero (zeros, pagesize);
bzero (zeros, sizeof (zeros));
for (i = 0; ptr < end;)
{
/* distance to next multiple of pagesize. */
nwrite = (((int) ptr + pagesize) & -pagesize) - (int) ptr;
/* Distance to next multiple of writesize. */
nwrite = (((int) ptr + writesize) & -writesize) - (int) ptr;
/* But not beyond specified end. */
if (nwrite > end - ptr) nwrite = end - ptr;
ret = write (new, ptr, nwrite);
@ -1035,7 +1038,16 @@ write_segment (new, ptr, end)
&& errno == EFAULT
#endif
)
write (new, zeros, nwrite);
{
/* Write only a page of zeros at once,
so that we we don't overshoot the start
of the valid memory in the old data segment. */
if (nwrite > pagesize)
nwrite = pagesize;
write (new, zeros, nwrite);
}
#if 0 /* Now that we have can ask `write' to write more than a page,
it is legit for write do less than the whole amount specified. */
else if (nwrite != ret)
{
sprintf (buf,
@ -1043,6 +1055,7 @@ write_segment (new, ptr, end)
ptr, new, nwrite, ret, errno);
PERROR (buf);
}
#endif
i += nwrite;
ptr += nwrite;
}