git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: size_t vs "unsigned long"

From
JWJan Wielemaker <wielemak@science.uva.nl>
Date
Oct 4, 2007, 07:16 UTC
Message-ID
<200710040916.55998.wielemak@science.uva.nl>
In-Reply-To
<20071003213601.GD28188@artemis.corp>
On Wednesday 03 October 2007 23:36, Pierre Habouzit wrote:
Show 32 quoted lines
> On Wed, Oct 03, 2007 at 09:19:59PM +0000, Jan Wielemaker wrote:
> > On Wednesday 03 October 2007 22:48, Pierre Habouzit wrote:
> > > On Wed, Oct 03, 2007 at 08:30:04PM +0000, Junio C Hamano wrote:
> > > > Traditionally, inside git, we have used the length of things
> > > > with "unsigned long" for pretty much anything, except where we
> > > > wanted the length exactly sized we used int32_t, uint64_t and
> > > > friends.
> > > >
> > > > A few places pass pointer to unsigned long as the second
> > > > parameter to strbuf_detach(), triggering type mismatch warnings.
> > > > An easy way out is to change strbuf_detach() to take a pointer
> > > > to ulong but I think it is going backwards.  Most places that
> > > > use "unsigned long" can safely be converted (and made more
> > > > correct) to use size_t.
> > >
> > >   Well, afaict, on every linux archs I know of, unsigned longs and
> > > size_t are the same. Though, I don't know if that holds for the msys
> > > port, and if that does not holds, then a s/unsigned long/size_t/ would
> > > help them. Else, for consistency sake, I believe the change is a good
> > > one.
> >
> > Surely on the Microsoft 64-bit compilers size_t is 64-bits and long is
> > 32-bits.  Don't blame me, I'm just the messenger that learned the hard
> > way ...
>
>   Yeah, I've been wondering, and it's the information I had. well, the
> information I had is that sizeof(size_t) is 4 on win32, and 8 on win64,
> OTOH (and this one I'm sure), on windows, longs are 32bits on both (32
> and 64 bits ABIs).
>
>   So replacing unsigned long with size_t's will help the msys port,
> hence I had some insight that this could prove useful, now I'm sure :)

The other types that are useful are intptr_t and uintptr_t, integers that are guaranteed to be able to hold a pointer. They are defined by recent versions of the Microsoft compilers and are in <inttypes.h> in most POSIX systems (at least I didn't have complaints since I started using them). I use them for integers holding mangled pointers. Of course most clean C programs should not need that.

	--- Jan
Previous: Pierre HabouzitNext: Florian Weimer
Message 6 of 8 in “size_t vs "unsigned long"”
  1. Junio C HamanoOct 3, 2007
  2. Pierre HabouzitOct 3, 2007
  3. Junio C HamanoOct 3, 2007
  4. Jan WielemakerOct 3, 2007
  5. Pierre HabouzitOct 3, 2007
  6. Jan WielemakerOct 4, 2007
  7. Florian WeimerOct 3, 2007
  8. Kyle MoffettOct 5, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.