* Colin Percival <cperc...@freebsd.org>, 20111016 19:21: > This might make look(1) build, but on a 64-bit machine it also makes > look(1) fail with "File too large" whenever it's larger than > (int64_t)(UINT64_MAX) = -1 bytes long.
d'oh! Stupid signedness. I casted to off_t explicitly, since we need to do 64-bit comparison, but off_t is signed, while size_t is not. Hmmm... Casting to size_t is not the way to go, but off_t also should be avoided. We can assume st_size is non-negative, so we should do something like this, right? %%% Index: look.c =================================================================== --- look.c (revision 226430) +++ look.c (working copy) @@ -134,7 +134,7 @@ do { if ((fd = open(file, O_RDONLY, 0)) < 0 || fstat(fd, &sb)) err(2, "%s", file); - if (sb.st_size > (off_t)SIZE_T_MAX) + if ((uintmax_t)sb.st_size > (uintmax_t)SIZE_T_MAX) errx(2, "%s: %s", file, strerror(EFBIG)); if (sb.st_size == 0) { close(fd); %%% -- Ed Schouten <e...@80386.nl> WWW: http://80386.nl/
pgpv7qLMTsZ26.pgp
Description: PGP signature