
On Fri, 22 Oct 2010 03:55:49 -0400 Mike Frysinger vapier@gentoo.org wrote:
On Friday, October 22, 2010 03:37:43 Joakim Tjernlund wrote:
Mike Frysinger wrote on 2010/10/22 09:20:22:
On Friday, October 22, 2010 02:10:16 Joakim Tjernlund wrote:
does not set errno which screws error handling. One have to bend over just to cope with this.
that depends on your implementation. in u-boot, there really is no "errno"
Yes, and that and that is even worse. How do you tell if you are out of memory or not? Checking size == 0 after the fact? Then you could do that before calling malloc in the first place.
i still dont see any real world (or even theoretical) need for malloc(0). so the issue of error checking is irrelevant until you can come up with one.
Here's a (non-U-Boot) example from some code that unflattens a device tree into a live tree representation:
prop->len = fdt32_to_cpu(fdtprop->len); fdtprop = fdt_offset_ptr(fdt, offset, sizeof(*fdtprop) + prop->len); if (!fdtprop) { ret = -FDT_ERR_TRUNCATED; goto err; }
prop->data = malloc(prop->len); if (!prop->data) goto nomem;
You couldn't do this in portable code, since malloc(0) is allowed to return NULL, and it wouldn't be hard to work around it by checking prop->len for zero. But it is a use case where malloc(0) returning non-NULL is convenient.
I don't think Joakim's suggestion of a single "impossible_ptr" is compliant, though -- it's supposed to be either NULL or a *unique* pointer.
-Scott