Dear Joakim Tjernlund, > Mike Frysinger <vap...@gentoo.org> wrote on 2010/10/21 21:51:53: >> On Thursday, October 21, 2010 07:45:10 Joakim Tjernlund wrote: >>> Wolfgang Denk wrote on 2010/10/21 13:32:54: >>>> Joakim Tjernlund you wrote: >>>>>> - if ((long)bytes < 0) return 0; >>>>>> + if ((long)bytes <= 0) return 0; >>>>> I think you should return some impossible ptr value =! NULL >>>>> Size 0 not really an error. >>>> It is legal for malloc() to return NULL in case of size==0, >>>> and for the sake of simplicity I recommend we do just that. >>> Yes, but not very useful. Glibc does not return NULL >> it is useful for malloc(0) == NULL. the glibc behavior is downright >> obnoxious. we disable this for uClibc and dont see problems. if > anything, we >> catch accidental programming mistakes which then get fixed.
My five cents: > There is a value in having the possibility to express a > 0 bytes data set. Consider this simple example: > An app read lines from a file and mallocs each line read and builds an > array with malloced pointers. The last entry is a NULL ptr to > signal EOF. This breaks down for empty lines if malloc(0) > returns NULL. Your example is in the right way, but a bit flawed in its simplicity. Even empty lines need some form of information that they are of length zero, be it a 0x00 in the memory line itself (requiring malloc(length+1)) or that same information in a variable somewhere else: struct line { byte *buf; int length; } lines[...]; As an (undercover) Mathematician: Out of principle I would say that malloc(0) should return a non-NULL pointer of an area where exactly 0 bytes may be used. And, of course, free() of that area shall not fail or crash the system. > Not to mention error handling, as I recall, a malloc(0) that returns NULL > does not set errno which screws error handling. One have to bend over > just to cope with this. >> why exactly do you want malloc(0) to return valid memory ? i would > rather >> have u-boot return an error. In the case of u-boot, where a driver or whatever should never really need to allocate zero memory, such a programming error should be made obvious by at least a warning message. > Ideally it should return a ptr to invalid memory so you get a SEGV if you > try to defer the ptr but I take anything over a NULL ptr. Makes sense only if any access outside of any allocated memory would behave the same, otherwise this is a special case again. Best Regards, Reinhard _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot