Annotation of src/usr.bin/sudo/memrchr.c, Revision 1.1
1.1 ! millert 1: /*
! 2: * Copyright (c) 2007 Todd C. Miller <Todd.Miller@courtesan.com>
! 3: *
! 4: * Permission to use, copy, modify, and distribute this software for any
! 5: * purpose with or without fee is hereby granted, provided that the above
! 6: * copyright notice and this permission notice appear in all copies.
! 7: *
! 8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 15: */
! 16:
! 17: #include <sys/types.h>
! 18: #include <config.h>
! 19: #include <compat.h>
! 20:
! 21: #ifndef lint
! 22: __unused static const char rcsid[] = "$Sudo: memrchr.c,v 1.1.2.2 2007/06/19 21:00:35 millert Exp $";
! 23: #endif /* lint */
! 24:
! 25: #include <sys/types.h>
! 26: #include <config.h>
! 27:
! 28: /*
! 29: * Reverse memchr()
! 30: * Find the last occurence of 'c' in the buffer 's' of size 'n'.
! 31: */
! 32: VOID *
! 33: memrchr(s, c, n)
! 34: const VOID *s;
! 35: int c;
! 36: size_t n;
! 37: {
! 38: const unsigned char *cp;
! 39:
! 40: if (n != 0) {
! 41: cp = (unsigned char *)s + n;
! 42: do {
! 43: if (*(--cp) == (unsigned char)c)
! 44: return((VOID *)cp);
! 45: } while (--n != 0);
! 46: }
! 47: return((VOID *)0);
! 48: }