Add a comment to explain a cast done in file_fdopen().

This commit is contained in:
Guy Harris 2021-10-18 16:22:33 -07:00
parent a2e877d397
commit 3fe96028d2
1 changed files with 18 additions and 0 deletions

View File

@ -1132,6 +1132,24 @@ file_fdopen(int fd)
*
* If the value is too big to fit into a guint,
* just use the maximum read buffer size.
*
* On top of that, the Single UNIX Speification says that
* st_blksize is of type blksize_t, which is a *signed*
* integer type, and, at minimum, macOS 11.6 and Linux 5.14.11's
* include/uapi/asm-generic/stat.h define it as such.
*
* However, other OSes might make it unsigned, and older versions
* of OSes that currently make it signed might make it unsigned,
* so we try to avoid warnings from that.
*
* We cast MAX_READ_BUF_SIZE to long in order to avoid the
* warning, although it might introduce warnings on platforms
* where st_blocksize is unsigned; we'll deal with that if
* it ever shows up as an issue.
*
* MAX_READ_BUF_SIZE is < the largest *signed* 32-bt integer,
* so casting it to long won't turn it into a negative number.
* (We only support 32-bit and 64-bit 2's-complement platforms.)
*/
if (st.st_blksize <= (long)MAX_READ_BUF_SIZE)
want = (guint)st.st_blksize;