On 01/15/2014 02:37 AM, Lukas Slebodnik wrote:
> On (14/01/14 19:37), Dmitri Pal wrote:
>> On 01/14/2014 01:46 PM, Lukas Slebodnik wrote:
>>> On (13/01/14 16:46), Simo Sorce wrote:
>>>> On Mon, 2014-01-13 at 15:00 -0500, Dmitri Pal wrote:
>>>>> On 01/13/2014 02:53 PM, Stephen Gallagher wrote:
>>>>>> On 01/13/2014 01:42 PM, Lukas Slebodnik wrote:
>>>>>>> ehlo,
>>>>>>> attached patch addresses ticket #2193
>>>>>>> I have just a question about refarray/libref_array.sym There is
>>>>>>> extern function ref_array_debug, which is not defined in public
>>>>>>> header file (not exposed in public API), but it is used in
>>>>>>> ref_array unit tests. It needs to be in global section because
>>>>>>> linker with fail to find symbol. Should I add any comment to the
>>>>>>> file libref_array.sym or does anyone better solution?
>>>>>> If this isn't a public API and isn't used except by the unit test, it
>>>>>> should probably not be built as part of the library. It should
>>>>>> probably be part of the unit test.
>>>>> IMO this is conceptually wrong.
>>>>> Unit test emulates external use of the library. Unit test uses only
>>>>> public header and not private headers if any.
>>>>> If we put debug function in the unit test we will expose internal of the
>>>>> library that should not be know outside.
>>>>> I always view unit tests as example of use. If we show that it is OK to
>>>>> include private headers people would include private headers and try to
>>>>> access internal structures directly.
>>>> Sorry but I see a few issues with this argument.
>>>>
>>>> You say that unit tests only use the public API, the  you proceed and
>>>> use an undisclosed API that is not made available through the public
>>>> header files ? Isn't this contradictory ?
>>>>
>>>> Also I see nothing wrong in accessing private data via unit tests, I
>>>> never heard anyone have the expectation that unit tests are actually
>>>> examples to follow.
>>>>
>>>>> Putting it into a separate module is probably the cleanest solution but
>>>>> IMO too much overhead.
>>>> A separate shared object would be too much, but you can statically link
>>>> the function in the unit tests.
>>> Static linking would work with unit test, but function ref_array_reset is 
>>> also
>> you mean ref_array_debug, right?
>>
> Yes, I meant ref_array_debug. (copy&paste problem :-)
>
> BTW. It is already exposed in libref_array.so
> bash$ objdump -T /usr/lib64/libref_array.so | grep ref_array_debug
> 0000000000001300 g    DF .text  0000000000000176  Base        ref_array_debug
>                 ^^^
>              g means global


My assumption was always always that if the entry point is in public
header, then it is public.
If not it is not.

ref_array.h which defines public interface does not deliberately list
this function as public thus whether it is global or not really does not
matter. It not public.

2c.
>
>>> used in the file ini/ini_valueobj.c (I forgot to mention it in the 1st mail)
>>>
>>>   1065  #ifdef HAVE_TRACE
>>>   1066
>>>   1067          ref_array_debug(vo->raw_lines, 0);
>>>   1068          ref_array_debug(vo->raw_lengths, 1);
>>>   1069  #endif
>> yes it is used in the other "debug" situation.
>> This is exactly the situation that I mentioned in the other mail: "use
>> private functions from the library at your own risk".
>> I acknowledge the risk, this is why it is if-defed not just not called
>> based on an if() statement.
>>
> LS
> _______________________________________________
> sssd-devel mailing list
> sssd-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel


-- 
Thank you,
Dmitri Pal

Sr. Engineering Manager for IdM portfolio
Red Hat Inc.


-------------------------------
Looking to carve out IT costs?
www.redhat.com/carveoutcosts/



_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to