Skip to content

Commit

Permalink
Use more portable function memchr()
Browse files Browse the repository at this point in the history
Use more portable memchr() function instead of strnlen() which is not in ISO standard
  • Loading branch information
serge1 committed Aug 28, 2023
1 parent 8ae6cec commit 089160c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
4 changes: 2 additions & 2 deletions elfio/elfio_strings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ template <class S> class string_section_accessor_template
if ( string_section ) {
const char* data = string_section->get_data();
if ( index < string_section->get_size() && nullptr != data ) {
size_t string_length =
strnlen( data + index, string_section->get_size() - index );
size_t string_length = strnlength(
data + index, string_section->get_size() - index );
if ( string_length < ( string_section->get_size() - index ) )
return data + index;
}
Expand Down
8 changes: 8 additions & 0 deletions elfio/elfio_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ THE SOFTWARE.

#include <cstdint>
#include <ostream>
#include <cstring>

#define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) virtual TYPE get_##NAME() const = 0

Expand Down Expand Up @@ -259,6 +260,13 @@ inline void adjust_stream_size( std::ostream& stream, std::streamsize offset )
stream.seekp( offset );
}

//------------------------------------------------------------------------------
inline static size_t strnlength( const char* s, size_t n )
{
const char* found = (const char*)std::memchr( s, '\0', n );
return found ? (size_t)( found - s ) : n;
}

/**
* Consumers should write an implementation of this class and pass an instance of it to the ELFIO::elfio constructor.
*/
Expand Down

0 comments on commit 089160c

Please sign in to comment.