Large memory support
Anatoly Vorobey
mellon@pobox.com
Wed, 25 Feb 2004 16:28:03 +0200
On Fri, Feb 20, 2004 at 11:21:06AM -0800, Jason Titus wrote:
> - pos += sprintf(pos, "STAT limit_maxbytes %u\r\n", settings.maxbytes);
> + pos += sprintf(pos, "STAT limit_maxbytes %llu\r\n", settings.maxbytes);
This is wrong, because %llu will always expect a 64bit argument, but on
32bit architectures your settings.maxbytes, being a size_t, will be a
32bit argument.
There're two ways to make it right:
a) use the 'z' field width option to sprintf here (and any other place
where we might need to output/input a size_t field) and retain the
size_t type. However, I don't know how standard 'z' is and would
appreciate information about it.
b) use 'unsigned long' instead of size_t, and give %l to sprintf.
"unsigned long" works great because it's 32bit on 32bit architectures
and 64bit on 64bit architectures.
I prefer b) myself, but I may be underappreciating size_t, I'm not sure.
> - settings.maxbytes = atoi(optarg)*1024*1024;
> + settings.maxbytes = (size_t) atoi(optarg)* (size_t) 1024* (size_t) 1024;
Most or all of these explicit typecasts shouldn't be necessary.
--
avva