paul.moore at centrify.com
Thu Oct 1 13:29:35 EDT 2009
static inline void k5alloc(size_t size)
return calloc(size, 1);
since the results is either good or ENOMEM, there not a lot of point in
returning the failure reason
#define k5alloc(sz) calloc(sz,1)
From: krbdev-bounces at mit.edu [mailto:krbdev-bounces at mit.edu] On Behalf
Of Greg Hudson
Sent: Thursday, October 01, 2009 10:04 AM
To: Jeffrey Hutzelman
Cc: krbdev at mit.edu
Subject: Re: Little conveniences
On Thu, 2009-10-01 at 12:55 -0400, Jeffrey Hutzelman wrote:
> Huh? What's wrong with this?
> static inline krb5_error_code k5alloc(size_t size, void **ptrp)
> *ptrp = calloc(size, 1);
> return (*ptrp == NULL) ? ENOMEM : 0;
First and probably foremost, you'd have to cast the address of every
pointer you passed in, or you'd get a compiler warning. That's uglier
than switching around the return pointer and error code.
Second, even with the casts, it wouldn't be correct C. C (the
standardized language) does not assume that all pointer types are
represented equally. When you write "charptr = voidptr;" you give the
compiler an option to add code to convert the pointer representations.
When you cast &charptr to a void ** and assign through that, you do not.
Of course, it works fine in C (the language we actually use on platforms
anyone has ever heard of) because in reality all pointer types are
usually represented equally.
krbdev mailing list krbdev at mit.edu
More information about the krbdev