On Mon, 2005-09-26 at 18:19, Sam Varshavchik wrote:
Daniel Ludwig writes:
Yes. You are limited by the word size on your 32 bit platform. 32
bit systems cannot process numeric values over 2 GB.
Ok ;) !
But if I edit the first line in maildirsize manually to 5000000000S
(=5GB), what will happen ??
The numeric value gets parsed as a 32-bit quantity, and it will naturally
overflow.
Or do I have to remove the maildirsize in such huge Maildirs ?
Yes. To support such huge quotas, you'll have to move up to a 64-bit
platform.
Please examine the following program:
cat /tmp/longlong.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
long long i;
for (i = 0; i < 5000000000ll; i += 100000000) {
printf("%lld \t", i);
}
exit(0);
}
I have no trouble compiling and executing this program on my 32 bit
Intel box. Just because I do not have 64 bit memory hardware does not
mean that I can't do 64 bit arithmetic - or have a 64 bit file.
You do not need to buy new hardware. You do need to change the program -
it has to recognize that the numbers can be greater than 32 bits - by
defining them as "long long" rather than "long" (or using standard
defined types that have mutable definitions - an off_t when you have 64
bit files defined is a 64 bit thing). You will need to change printfs
and such to format the longer numbers. You will need, in some cases, to
use different system calls. For example, you might want to seek deep
into a file - and you would need to use the right versions of the calls.
Something defining USE_LARGEGFILE might work - you need to look at how
the libraries work, there are ways to get the 64 bit versions of the
calls to be defined under the old names.
Use -Wall to get all warnings - it will tell you when (for example) you
mess up with a printf and leave out the ll in %lld, for example.
Good luck and test thoroughly.