EINA_CHECK_IF_THE_POINTER_IS_NULL_AND_IF_NOT_ASSUME_IT_S_NOT_A_STRAY_POINTER_AND_TRY_TO_FREE_IT_WITH_GIVEN_FUNCTION_THEN_SET_THE_POINTER_TO_NULL_TO_AVOID_MISUSAGE_LATER_ON()
On Fri, Dec 6, 2013 at 6:18 PM, David Seikel <onef...@gmail.com> wrote: > On Fri, 6 Dec 2013 17:26:21 -0200 Gustavo Sverzut Barbieri > <barbi...@gmail.com> wrote: > >> On Fri, Dec 6, 2013 at 10:42 AM, David Seikel <onef...@gmail.com> >> wrote: >> > On Fri, 6 Dec 2013 10:12:09 -0200 Gustavo Sverzut Barbieri >> > <barbi...@gmail.com> wrote: >> > >> >> On Thu, Dec 5, 2013 at 10:23 PM, Daniel Juyung Seo >> >> <seojuyu...@gmail.com> wrote: >> >> > Dear all, this is Daniel Juyung Seo. >> >> > >> >> > I propose EFL_SAFE_FREE macro for efl. >> >> > It looks like: >> >> > >> >> > # define EFL_SAFE_FREE(_h, _fn) do { if (_h) { _fn((void*)_h); >> >> > _h = NULL; } } while (0) >> >> > >> >> > As I have been using ELM_SAFE_FREE for months, I found out that >> >> > this macro is quite useful in terms of code readability, reducing >> >> > human mistakes, and using much smaller number of lines with the >> >> > same functionality. >> >> > >> >> > Enlightenment has >> >> > # define E_FREE_FUNC(_h, _fn) do { if (_h) { _fn((void*)_h); _h = >> >> > NULL; } } while (0) >> >> > >> >> > Elementary has >> >> > #define ELM_SAFE_FREE(_h, _fn) do { if (_h) { _fn((void*)_h); _h >> >> > = NULL; } } while (0) >> >> > >> >> > So why not efl? >> >> > >> >> > By using EFL_SAFE_FREE, this (Old) code will reborn as a (New) >> >> > code. 5 lines down to 1 line. >> >> > (Old) >> >> > if (svr->until_deletion) >> >> > { >> >> > ecore_timer_del(svr->until_deletion); >> >> > svr->until_deletion = NULL; >> >> > } >> >> > >> >> > (New) >> >> > EFL_SAFE_FREE(svr->until_deletion, ecore_timer_del); >> >> >> >> bad name as there is nothing save in it. >> >> >> >> EINA_FREE_AND_NULL(ptr, freefunc) would be more descriptive, code >> >> is the same. Or: >> >> >> >> EINA_FREE_AND_NULL(ptr) // does free() >> >> EINA_DISPOSE_AND_NULL(ptr, disposefunc) // generic version >> >> >> >> I'm not a native speaker, eventually there is a better name for the >> >> second one. >> > >> > Safe, as in "this is the safe way to do it", nothing to do with >> > saving things. >> >> i know, but what is safe in it? Because it checks for null before >> calling the function? If you take libc "free()" this is not required, >> so it's no big deal. The set to NULL is also something not always >> desired, if you're cleaning up a local variable all tools >> (gcc/clang/coverity) will report dead assignment. Tools won't report >> but it's also not needed (or desired) if you clean a member of a >> struct that is also being deleted. > > I wasn't commenting on it's safety, just on the difference between the > words 'safe' and 'save', since you pointed out you are not a native > English speaker. So your statement "there is nothing save in it" was > not relevant if you meant "there is nothing saved in it". Looks like > you meant "there is nothing safe in it". > > Should be only one of these macros, and it should be at the EINA level, > so every one can use it. Are we stuck with existing API here though? > > How about EINA_NUKE_FROM_ORBIT, it's the only safe way. B-) > > -- > A big old stinking pile of genius that no one wants > coz there are too many silver coated monkeys in the world. > > ------------------------------------------------------------------------------ > Sponsored by Intel(R) XDK > Develop, test and display web and hybrid apps with a single code base. > Download it for free now! > http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ Sponsored by Intel(R) XDK Develop, test and display web and hybrid apps with a single code base. Download it for free now! http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel