mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Add memmem to compat.
This commit is contained in:
		
							
								
								
									
										5
									
								
								compat.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								compat.h
									
									
									
									
									
								
							| @@ -261,6 +261,11 @@ size_t		 strnlen(const char *, size_t); | ||||
| char		*strndup(const char *, size_t); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_MEMMEM | ||||
| /* memmem.c */ | ||||
| void		*memmem(const void *, size_t, const void *, size_t); | ||||
| #endif | ||||
|  | ||||
| #ifndef HAVE_DAEMON | ||||
| /* daemon.c */ | ||||
| int	 	 daemon(int, int); | ||||
|   | ||||
							
								
								
									
										65
									
								
								compat/memmem.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								compat/memmem.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| /*	$OpenBSD: memmem.c,v 1.4 2015/08/31 02:53:57 guenther Exp $ */ | ||||
| /*- | ||||
|  * Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com> | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * 3. The name of the author may not be used to endorse or promote | ||||
|  *    products derived from this software without specific prior written | ||||
|  *    permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  */ | ||||
|  | ||||
| #include <string.h> | ||||
|  | ||||
| #include "compat.h" | ||||
|  | ||||
| /* | ||||
|  * Find the first occurrence of the byte string s in byte string l. | ||||
|  */ | ||||
|  | ||||
| void * | ||||
| memmem(const void *l, size_t l_len, const void *s, size_t s_len) | ||||
| { | ||||
| 	const char *cur, *last; | ||||
| 	const char *cl = l; | ||||
| 	const char *cs = s; | ||||
|  | ||||
| 	/* a zero length needle should just return the haystack */ | ||||
| 	if (s_len == 0) | ||||
| 		return (void *)cl; | ||||
|  | ||||
| 	/* "s" must be smaller or equal to "l" */ | ||||
| 	if (l_len < s_len) | ||||
| 		return NULL; | ||||
|  | ||||
| 	/* special case where s_len == 1 */ | ||||
| 	if (s_len == 1) | ||||
| 		return memchr(l, *cs, l_len); | ||||
|  | ||||
| 	/* the last position where its possible to find "s" in "l" */ | ||||
| 	last = cl + l_len - s_len; | ||||
|  | ||||
| 	for (cur = cl; cur <= last; cur++) | ||||
| 		if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0) | ||||
| 			return (void *)cur; | ||||
|  | ||||
| 	return NULL; | ||||
| } | ||||
| @@ -107,6 +107,7 @@ AC_REPLACE_FUNCS([ \ | ||||
| 	freezero \ | ||||
| 	getdtablecount \ | ||||
| 	getprogname \ | ||||
| 	memmem \ | ||||
| 	recallocarray \ | ||||
| 	reallocarray \ | ||||
| 	setenv \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott