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

KOSAKI Motohiro kosaki.motohiro@gmail.com
Thu Oct 31 21:14:00 GMT 2013


(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.
>



More information about the Libc-alpha mailing list