[PATCH] RFC: come up with startswith function.

Érico Nogueira ericonr@disroot.org
Tue Apr 20 11:50:11 GMT 2021



Em 20/04/2021 08:43, Mark Wielaard escreveu:
> Hi Martin,
> 
> On Mon, 2021-04-19 at 15:18 +0200, Martin Liška wrote:
>> I made similar changes to binutils some time ago and I would like to
>> come up with the same function for elfutils. Note that current
>> construct
>> is quite error prone, I found for instance these 2 bad usages:
>>
>> diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c
>> index 88b5211d..b6de3510 100644
>> --- a/libdwfl/relocate.c
>> +++ b/libdwfl/relocate.c
>> @@ -518,7 +518,7 @@ relocate_section (Dwfl_Module *mod, Elf
>> *relocated, const GElf_Ehdr *ehdr,
>>          Nothing to do here.  */
>>       return DWFL_E_NOERROR;
>>   
>> -  if (strncmp (tname, ".zdebug", strlen ("zdebug")) == 0)
>> +  if (strncmp (tname, ".zdebug", strlen (".zdebug")) == 0)
>>       elf_compress_gnu (tscn, 0, 0);
>>   
>>     if ((tshdr->sh_flags & SHF_COMPRESSED) != 0)
>> @@ -539,7 +539,7 @@ relocate_section (Dwfl_Module *mod, Elf
>> *relocated, const GElf_Ehdr *ehdr,
>>     if (sname == NULL)
>>       return DWFL_E_LIBELF;
>>   
>> -  if (strncmp (sname, ".zdebug", strlen ("zdebug")) == 0)
>> +  if (strncmp (sname, ".zdebug", strlen (".zdebug")) == 0)
>>       elf_compress_gnu (scn, 0, 0);
>>   
>>     if ((shdr->sh_flags & SHF_COMPRESSED) != 0)
> 
> Urgh. Thanks for finding this!
> 
>> I'm not convinced about function declaration in system.h. Is it a
>> proper location?
> 
> Yes, I think it is.
> 
>> And the function is not used in debuginfod/debuginfod-client.c and
>> debuginfod/debuginfod.cxx.
>> I would need another decl for these, am I right?
> 
> I think they both can simply include system.h (might want to double
> check the -I search path in debuginfod/Makefile.am) because system.h
> should be stand-alone, you don't need to link to anything else.
> 
> Maybe for debuginfod.cxx there is a better C++ way for strings. But if
> it uses C strings, then it could also simply include system.h.

std::basic_string_view::starts_with is only C++20, so I'd suggest 
wrapping `startswith` to not have to type `.c_str()` all the time, but 
nothing beyond that.

> 
> Thanks,
> 
> Mark
> 


More information about the Elfutils-devel mailing list