This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Refactor malloc (x * sizeof (t) to XNMALLOC (x, t).


(10/31/13 4:59 PM), Paul Eggert wrote:
On 10/31/2013 09:46 AM, OndÅej BÃlka wrote:

+#define XNMALLOC(e, tp) (tp *) malloc ((e) * sizeof (tp))

Don't we need something similar for realloc?

It needs another parentheses around the entire definiens.

Better yet, why not a function instead of a macro?
E.g., something like this in libc-internal.h:

   /* Return the address of an array of N objects, each of nonzero
      size S, or NULL (setting errno) if the allocation fails.  */

   inline void *
   nmalloc (size_t n, size_t s)
   {
     return malloc (n <= SIZE_MAX / s ? n * s : SIZE_MAX);

I'm worry about this. Rounding down to SIZE_DOWN is sometime dangerous.
How about return NULL instead? The best fallback way depend on caller code.


   }

That way, instead of this:

   result = XNMALLOC (step_cnt, struct __gconv_step);

a caller can write this:

   result = nmalloc (step_cnt, sizeof *result);

with simpler semantics, and with less churn later if 'result' changes
its type.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]