But in D it's declared as int ftell(FILE *);
> > So .. ptrdiff_t? > > Nope, C long. So 32 bits on Win32, Win64, and 32-bit *nix, but 64 bits > on 64-bit *nix. All c types are compiler-specific, but in fact long is 64 bit on x86-64 architecture (os-independent).
Nope, see for instance http://en.wikipedia.org/wiki/64-bit#64-bit_data_models or try MSVC yourself: sizeof(long) == 4.
... indeed. For some reason I thought different. Was it always like this?
Yes, I think it's always been like that.
Even with the misunderstanding of C long being 32 or 64 bit, translating a C long to a D int is still wrong.
Changing to resolved-fixed. In druntime, where this stuff lives now, it's defined as a c_long: c_long ftell(FILE* stream);
I'd like to replace the antiquated fseek/ftell routines with 64-bit routines straight inside druntime. On Windows, there's _fseeki64: http://msdn.microsoft.com/en-us/library/75yw9bf3%28VS.80%29.aspx On Linux, there's fseeko64: http://www.mkssoftware.com/docs/man3/fseek.3.asp I couldn't find the appropriate OSX routine, and I wouldn't be able to test it either. I know Sean is very busy, so may I get a hand from around here? Ideally what I'd like to do would be to take care of whatever forwarding/aliasing is needed inside druntime to make the normal fseek and ftell routines use 64-bit ulong. (Sean approved.) Please let me know if you could help, thanks!