From: Andreas F. <as...@bo...> - 2006-01-19 23:00:31
|
Today, Juho Snellman <js...@ik...> wrote: > <as...@bo...> wrote: >> A "file not found" error sounds like a bug, though. I'll look into >> it. > > If you don't use the magic defines that were mentioned upthread to > get stat64(), stat() will fail with ENOENT on files larger than 2GB. Oh, ok (: Anyway, I tried to get largefile support on x86/linux to work today and it looks like a no-go: LARGEFILE support comes in 2 flavours: you get a 64 bit off_t and either use stat64 (and lseek64 etc.) or you get the C preprocessor to re-write all occurrences of stat to stat64. Rewriting the functions works for the runtime. It doesn't work on the lisp side, though; sb-alien doesn't use the preprocessor at all: when it uses stat, it uses the 32-bit version. So we would either have to conditionalize on 32bit off_t and linux everywhere and use the *64 functions, or we have to write wrappers in c land and use those. But that's not enough: AFAICT from reading http://ac-archive.sourceforge.net/largefile/, we will have to do that not just in sb-unix, but in every other library (think cffi-posix) as well. This is just a bit too much of a nightmare to attempt. So, if you want to open large (>2GB) files with sbcl on x86, you will have to use an os with non-broken file offsets; as stated upthread, FreeBSD is sane in this regard. Cheers, -- Andreas Fuchs, (http://|im:asf@|mailto:asf@)boinkor.net, antifuchs |