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