]> git.eshelyaron.com Git - emacs.git/commitdiff
In pdumper, simplify INT_MAX computation
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 11 Aug 2020 09:16:54 +0000 (02:16 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 11 Aug 2020 09:27:44 +0000 (02:27 -0700)
* src/pdumper.c (dump_read_all): Avoid unnecessary cast.
Also, round down to page size, as sysdep.c does.
Also, don’t assume INT_MAX <= UINT_MAX (!).

src/pdumper.c

index 6d303af77d0e2f63043c140a0965f11dd04f5935..fcad5242dfe917c4ab074fd7b1405dedfddf9b57 100644 (file)
@@ -5065,14 +5065,13 @@ dump_read_all (int fd, void *buf, size_t bytes_to_read)
 {
   /* We don't want to use emacs_read, since that relies on the lisp
      world, and we're not in the lisp world yet.  */
-  eassert (bytes_to_read <= SSIZE_MAX);
   size_t bytes_read = 0;
   while (bytes_read < bytes_to_read)
     {
-      /* Some platforms accept only int-sized values to read.  */
-      unsigned chunk_to_read = INT_MAX;
-      if (bytes_to_read - bytes_read < chunk_to_read)
-       chunk_to_read = (unsigned) (bytes_to_read - bytes_read);
+      /* Some platforms accept only int-sized values to read.
+         Round this down to a page size (see MAX_RW_COUNT in sysdep.c).  */
+      int max_rw_count = INT_MAX >> 18 << 18;
+      size_t chunk_to_read = min (bytes_to_read - bytes_read, max_rw_count);
       ssize_t chunk = read (fd, (char *) buf + bytes_read, chunk_to_read);
       if (chunk < 0)
         return chunk;