1178051Sdelphij/*	$OpenBSD: memrchr.c,v 1.2 2007/11/27 16:22:12 martynas Exp $	*/
2178051Sdelphij
3178051Sdelphij/*
4178051Sdelphij * Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
5178051Sdelphij *
6178051Sdelphij * Permission to use, copy, modify, and distribute this software for any
7178051Sdelphij * purpose with or without fee is hereby granted, provided that the above
8178051Sdelphij * copyright notice and this permission notice appear in all copies.
9178051Sdelphij *
10178051Sdelphij * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11178051Sdelphij * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12178051Sdelphij * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13178051Sdelphij * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14178051Sdelphij * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15178051Sdelphij * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16178051Sdelphij * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17178051Sdelphij *
18178051Sdelphij * $FreeBSD$
19178051Sdelphij */
20178051Sdelphij
21178051Sdelphij#include <string.h>
22178051Sdelphij
23178051Sdelphij/*
24178051Sdelphij * Reverse memchr()
25178051Sdelphij * Find the last occurrence of 'c' in the buffer 's' of size 'n'.
26178051Sdelphij */
27178051Sdelphijvoid *
28178051Sdelphijmemrchr(const void *s, int c, size_t n)
29178051Sdelphij{
30178051Sdelphij	const unsigned char *cp;
31178051Sdelphij
32178051Sdelphij	if (n != 0) {
33178051Sdelphij		cp = (unsigned char *)s + n;
34178051Sdelphij		do {
35178051Sdelphij			if (*(--cp) == (unsigned char)c)
36178051Sdelphij				return((void *)cp);
37178051Sdelphij		} while (--n != 0);
38178051Sdelphij	}
39178051Sdelphij	return(NULL);
40178051Sdelphij}
41