ohh... then my mind tricked me, and I didn't notice the lack of
"const" in there.

I was remembering it as "const char *" return, that would be stored in
a global until it finishes...

if you need to free, then sure, PURE is wrong :-)

On Thu, May 24, 2018 at 11:21 AM, Marcel Hollerbach <[email protected]> wrote:
> Hello,
>
> this is not correct. It returns a different pointer on each call. The
> content behind the pointer is the same, correct. The pointer is NOT.
>
> Your example is missing one thing, you are not using the value, think of a
> case where you give the returned value to a function that calls free. The
> compiler might be unable to detect that and assume that it can move out the
> function call, which causes a multi-free call on the same pointer.
>
> Greetings
> bu5hm4n
>
>
> Am 24. Mai 2018 15:58:01 MESZ schrieb Gustavo Sverzut Barbieri
> <[email protected]>:
>>
>> I disagree with that signature.
>>
>> it does a malloc to populate a cache, which is later used... then *all
>> calls returns the same, given the same parameters* (pure).
>>
>> the cache is only cleared on eina shutdown, which is unlikely to
>> affect use cases (would break "while (1) { eina_init();
>> eina_module_symbol_path_get(sym, dir); eina_shutdown();}" as it would
>> move the symbol path get out of the loop.
>>
>>
>>
>> On Thu, May 24, 2018 at 1:39 AM, Cedric BAIL <[email protected]> wrote:
>>>
>>>  cedric pushed a commit to branch master.
>>>
>>>
>>> http://git.enlightenment.org/core/efl.git/commit/?id=9dce56687b5967a36514c8f731a146197415f481
>>>
>>>  commit 9dce56687b5967a36514c8f731a146197415f481
>>>  Author: Cedric BAIL <[email protected]>
>>>  Date:   Wed May 23 19:36:56 2018 -0700
>>>
>>>      eina: path get actually allocate memory and can't be pure.
>>>  ---
>>>   src/lib/eina/eina_module.h | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>>  diff --git a/src/lib/eina/eina_module.h b/src/lib/eina/eina_module.h
>>>  index dafdb203ec..151b1c3101 100644
>>>  --- a/src/lib/eina/eina_module.h
>>>  +++ b/src/lib/eina/eina_module.h
>>>  @@ -230,7 +230,7 @@ EAPI void eina_module_symbol_global_set(Eina_Module
>>> *module, Eina_Bool global) E
>>>    * or allocation fails, this function returns @c NULL.
>>>    */
>>>   EAPI char *
>>>  - eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
>>> EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
>>>  + eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
>>> EINA_MALLOC EINA_ARG_NONNULL(1, 2);
>>>
>>>   /**
>>>    * @brief Returns the path built from the value of an environment
>>> variable and a
>>>  @@ -247,7 +247,7 @@ EAPI char *
>>>    * allocation fails, this function returns @c NULL.
>>>    */
>>>   EAPI char *
>>>  - eina_module_environment_path_get(const char *env, const char *sub_dir)
>>> EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
>>>  + eina_module_environment_path_get(const char *env, const char *sub_dir)
>>> EINA_MALLOC EINA_ARG_NONNULL(1, 2);
>>>
>>>
>>>   /**
>>>
>>>  --
>>
>>
>>
>>
>>
>
> --



-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to