Files
binutils-gdb/libiberty/memrchr.c
Andreas Schwab c671850a83 libiberty: sync with gcc
Import the following commits from GCC as of r16-614-g9d039eff453f77:
	31dd621796f libiberty: add ldirname function
	f3d07779fdb libiberty: Append <libgen.h> to AC_CHECK_DECLS [PR119218].
	90183362524 libiberty, gcc: Add memrchr to libiberty and use it [PR119283].
	43717ee9064 libiberty: Fix off-by-one when collecting range expression
2025-05-20 09:49:13 +02:00

34 lines
883 B
C

/*
@deftypefn Supplemental void* memrchr (const void *@var{s}, int @var{c}, @
size_t @var{n})
This function searches memory for the character @var{c} in reverse order,
starting at @code{*@var{s}+@var{n}-1} . The search only ends with
the first occurrence of @var{c}, or when the start us reached; in particular,
a null character does not terminate the search. If the character @var{c} is
found within @var{length} characters of @code{*@var{s}}, a pointer
to the character is returned. If @var{c} is not found, then @code{NULL} is
returned.
@end deftypefn
*/
#include <ansidecl.h>
#include <stddef.h>
void *
memrchr (const void *src_void, int c, size_t length)
{
if (length == 0)
return NULL;
const unsigned char *p = (const unsigned char*)src_void;
p += length;
while (*--p != (unsigned char)c)
if (src_void == p)
return NULL;
return (void *)p;
}