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
Nope, see for instance http://en.wikipedia.org/wiki/64-bit#64-bit_data_models or try MSVC yourself: sizeof(long) == 4.
Comment #3 by dfj1esp02 — 2008-10-10T02:26:19Z
... 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!