Mercurial > emacs
changeset 13152:a7e0445bd152
(write_segment): Write valid data in units of 1<<13,
but write zeros only a page at a time.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 08 Oct 1995 19:29:57 +0000 |
parents | 5297bf53ac38 |
children | c9694633f7ca |
files | src/unexec.c |
diffstat | 1 files changed, 18 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/unexec.c Sun Oct 08 19:26:07 1995 +0000 +++ b/src/unexec.c Sun Oct 08 19:29:57 1995 +0000 @@ -1014,15 +1014,18 @@ 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 @@ && 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 @@ ptr, new, nwrite, ret, errno); PERROR (buf); } +#endif i += nwrite; ptr += nwrite; }