On Tue, 26 Jul 2005, Glynn Clements wrote:
Holger Kiehl wrote:
I would like to have an unsigned off_t, what is the best and portbale way
to define this? Currently I use the following code:
#if SIZEOF_OFF_T == 4
typedef unsigned long u_off_t;
#else
typedef unsigned long long u_off_t;
#endif
SIZEOF_OFF_T is returned from the gnu autoconfig tools.
Is this the correct way of doing this?
There isn't any "correct" way of doing it.
Or is there some better more portable way?
Using the types from stdint.h (uint32_t, uint64_t etc) would be more
portable than making assumptions about the sizes of "long", "long long"
etc.
So a solution with C99 and stdint.h could look as follows:
#ifdef HAVE_STDINT_H
# if SIZEOF_OFF_T == 4
typedef uint32_t u_off_t;
# else
typedef uint64_t u_off_t;
# endif
#else
# if SIZEOF_OFF_T == 4
typedef unsigned long u_off_t;
# else
typedef unsigned long long u_off_t;
# endif
#endif
The problem I have with this is how do I use this with printf() or fprintf()?
What do I use: %u, %lu or %llu? Does C99 provide a solution here?
Alternatively:
#if SIZEOF_OFF_T == SIZEOF_INT
typedef unsigned int off_t
#elif SIZEOF_OFF_T == SIZEOF_LONG
typedef unsigned long off_t
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
typedef unsigned long long off_t
#endif
Same problem here as well, how to use this with printf()?
Besides, what do I use for uint64_t in printf()?
Out of curiosity, why do you want an unsigned off_t anyhow?
I use it to store the number of bytes I have send to a certain host.
If this is unsigned there is no need to worry about an overflow and I can
always just add each file size transmitted. Just when I want to calculate
the transfer rate I need to watch out for an overflow.
Thanks,
Holger
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming"
in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html