Bug 2364 – ftell return type is long in C, that is 64-bit on x86-64
Status
RESOLVED
Resolution
FIXED
Severity
trivial
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2008-09-17T08:37:00Z
Last change time
2015-06-09T01:20:17Z
Assigned to
nobody
Creator
dfj1esp02
Comments
Comment #0 by dfj1esp02 — 2008-09-17T08:37:33Z
But in D it's declared as int ftell(FILE *);
Comment #1 by dfj1esp02 — 2008-10-09T07:43:27Z
> > 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).
Comment #2 by matti.niemenmaa+dbugzilla — 2008-10-09T12:17:41Z
... indeed. For some reason I thought different. Was it always like this?
Comment #4 by matti.niemenmaa+dbugzilla — 2008-10-10T04:03:28Z
Yes, I think it's always been like that.
Comment #5 by tomas — 2009-10-19T03:20:56Z
Even with the misunderstanding of C long being 32 or 64 bit, translating a C long to a D int is still wrong.
Comment #6 by braddr — 2009-10-19T09:20:26Z
Changing to resolved-fixed. In druntime, where this stuff lives now, it's defined as a c_long:
c_long ftell(FILE* stream);
Comment #7 by andrei — 2009-10-20T12:10:56Z
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!