xref: /rk3399_ARM-atf/lib/libc/memrchr.c (revision fcccd358e4cd6199c797ad127c77c47ec1ad5983)
1*ebff1072SAmbroise Vincent /*
2*ebff1072SAmbroise Vincent  * Copyright (c) 2019, Arm Limited. All rights reserved.
3*ebff1072SAmbroise Vincent  *
4*ebff1072SAmbroise Vincent  * SPDX-License-Identifier: BSD-3-Clause
5*ebff1072SAmbroise Vincent  */
6*ebff1072SAmbroise Vincent 
7*ebff1072SAmbroise Vincent #include <string.h>
8*ebff1072SAmbroise Vincent 
9*ebff1072SAmbroise Vincent #undef memrchr
10*ebff1072SAmbroise Vincent 
memrchr(const void * src,int c,size_t len)11*ebff1072SAmbroise Vincent void *memrchr(const void *src, int c, size_t len)
12*ebff1072SAmbroise Vincent {
13*ebff1072SAmbroise Vincent 	const unsigned char *s = src + (len - 1);
14*ebff1072SAmbroise Vincent 
15*ebff1072SAmbroise Vincent 	while (len--) {
16*ebff1072SAmbroise Vincent 		if (*s == (unsigned char)c) {
17*ebff1072SAmbroise Vincent 			return (void*) s;
18*ebff1072SAmbroise Vincent 		}
19*ebff1072SAmbroise Vincent 
20*ebff1072SAmbroise Vincent 		s--;
21*ebff1072SAmbroise Vincent 	}
22*ebff1072SAmbroise Vincent 
23*ebff1072SAmbroise Vincent 	return NULL;
24*ebff1072SAmbroise Vincent }
25