www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2364] New: ftell return type is long in C, that is 64-bit on x86-64

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364

           Summary: ftell return type is long in C, that is 64-bit on x86-64
           Product: D
           Version: 2.019
          Platform: PC
               URL: http://digitalmars.com/d/2.0/phobos/std_c_stdio.html#fte
                    ll
        OS/Version: Windows
            Status: NEW
          Severity: trivial
          Priority: P2
         Component: Phobos
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: terranium yandex.ru


But in D it's declared as int ftell(FILE *);


-- 
Sep 17 2008
next sibling parent reply downs <default_357-line yahoo.de> writes:
d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=2364
 
            Summary: ftell return type is long in C, that is 64-bit on x86-64
            Product: D
            Version: 2.019
           Platform: PC
                URL: http://digitalmars.com/d/2.0/phobos/std_c_stdio.html#fte
                     ll
         OS/Version: Windows
             Status: NEW
           Severity: trivial
           Priority: P2
          Component: Phobos
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: terranium yandex.ru
 
 
 But in D it's declared as int ftell(FILE *);
 
 

So .. ptrdiff_t?
Sep 17 2008
parent reply Sean Kelly <sean invisibleduck.org> writes:
downs wrote:
 d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=2364

            Summary: ftell return type is long in C, that is 64-bit on x86-64
            Product: D
            Version: 2.019
           Platform: PC
                URL: http://digitalmars.com/d/2.0/phobos/std_c_stdio.html#fte
                     ll
         OS/Version: Windows
             Status: NEW
           Severity: trivial
           Priority: P2
          Component: Phobos
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: terranium yandex.ru


 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.
Sep 17 2008
parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
"Denis Koroskin" wrote
 On Thu, 18 Sep 2008 08:52:13 +0400, Sean Kelly <sean invisibleduck.org> 
 wrote:

 downs wrote:
 d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=2364

            Summary: ftell return type is long in C, that is 64-bit on 
 x86-64
            Product: D
            Version: 2.019
           Platform: PC
                URL: 
 http://digitalmars.com/d/2.0/phobos/std_c_stdio.html#fte
                     ll
         OS/Version: Windows
             Status: NEW
           Severity: trivial
           Priority: P2
          Component: Phobos
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: terranium yandex.ru


 But in D it's declared as int ftell(FILE *);


Nope, C long. So 32 bits on Win32, Win64, and 32-bit *nix, but 64 bits on 64-bit *nix.

Isn't it compiler specific? I.e. DMD declares C long as D int no matter what. But I agree that it should return long (on 32-bit OS, too).

Better answer: don't use ftell :) But in case you have to, it seems that a version'd c_long is in order. -Steve
Sep 18 2008
prev sibling next sibling parent "Denis Koroskin" <2korden gmail.com> writes:
On Thu, 18 Sep 2008 08:52:13 +0400, Sean Kelly <sean invisibleduck.org>  
wrote:

 downs wrote:
 d-bugmail puremagic.com wrote:
 http://d.puremagic.com/issues/show_bug.cgi?id=2364

            Summary: ftell return type is long in C, that is 64-bit on  
 x86-64
            Product: D
            Version: 2.019
           Platform: PC
                URL:  
 http://digitalmars.com/d/2.0/phobos/std_c_stdio.html#fte
                     ll
         OS/Version: Windows
             Status: NEW
           Severity: trivial
           Priority: P2
          Component: Phobos
         AssignedTo: bugzilla digitalmars.com
         ReportedBy: terranium yandex.ru


 But in D it's declared as int ftell(FILE *);


Nope, C long. So 32 bits on Win32, Win64, and 32-bit *nix, but 64 bits on 64-bit *nix.

Isn't it compiler specific? I.e. DMD declares C long as D int no matter what. But I agree that it should return long (on 32-bit OS, too).
Sep 18 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364





------- Comment #1 from terranium yandex.ru  2008-10-09 07:43 -------
 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). --
Oct 09 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364





------- Comment #2 from matti.niemenmaa+dbugzilla iki.fi  2008-10-09 12:17
-------
Nope, see for instance http://en.wikipedia.org/wiki/64-bit#64-bit_data_models
or try MSVC yourself: sizeof(long) == 4.


-- 
Oct 09 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364





------- Comment #3 from terranium yandex.ru  2008-10-10 02:26 -------
... indeed. For some reason I thought different. Was it always like this?


-- 
Oct 10 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364





------- Comment #4 from matti.niemenmaa+dbugzilla iki.fi  2008-10-10 04:03
-------
Yes, I think it's always been like that.


-- 
Oct 10 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364


Sobirari Muhomori <dfj1esp02 sneakemail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 19 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364


Tomas Lindquist Olsen <tomas famolsen.dk> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tomas famolsen.dk


--- Comment #5 from Tomas Lindquist Olsen <tomas famolsen.dk> 2009-10-19
03:20:56 PDT ---
Even with the misunderstanding of C long being 32 or 64 bit, translating a C
long to a D int is still wrong.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 19 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364


Brad Roberts <braddr puremagic.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |braddr puremagic.com
         Resolution|INVALID                     |FIXED


--- Comment #6 from Brad Roberts <braddr puremagic.com> 2009-10-19 09:20:26 PDT
---
Changing to resolved-fixed.  In druntime, where this stuff lives now, it's
defined as a c_long:

c_long ftell(FILE* stream);

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 19 2009
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2364


Andrei Alexandrescu <andrei metalanguage.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrei metalanguage.com


--- Comment #7 from Andrei Alexandrescu <andrei metalanguage.com> 2009-10-20
12:10:56 PDT ---
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!

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 20 2009