51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include <lib.h>
 | |
| #include <string.h>
 | |
| /*  lsearch(3)  and  lfind(3)
 | |
|  *
 | |
|  *  Author: Terrence W. Holm          Sep. 1988
 | |
|  */
 | |
| 
 | |
| #include <stddef.h>
 | |
| 
 | |
| _PROTOTYPE( char *lsearch, (char *key, char *base,
 | |
| 			    unsigned *count, unsigned width,
 | |
| 			    int (*keycmp)(const void *, const void *)));
 | |
| _PROTOTYPE( char *lfind, (char *key, char *base,
 | |
| 			    unsigned *count, unsigned width,
 | |
| 			    int (*keycmp)(const void *, const void *)));
 | |
| 
 | |
| char *lsearch(key, base, count, width, keycmp)
 | |
| char *key;
 | |
| char *base;
 | |
| unsigned *count;
 | |
| unsigned width;
 | |
| _PROTOTYPE( int (*keycmp), (const void *, const void *));
 | |
| {
 | |
|   char *entry;
 | |
|   char *last = base + *count * width;
 | |
| 
 | |
|   for (entry = base; entry < last; entry += width)
 | |
| 	if (keycmp(key, entry) == 0) return(entry);
 | |
| 
 | |
|   bcopy(key, last, width);
 | |
|   *count += 1;
 | |
|   return(last);
 | |
| }
 | |
| 
 | |
| 
 | |
| char *lfind(key, base, count, width, keycmp)
 | |
| char *key;
 | |
| char *base;
 | |
| unsigned *count;
 | |
| unsigned width;
 | |
| _PROTOTYPE( int (*keycmp), (const void *, const void *));
 | |
| {
 | |
|   char *entry;
 | |
|   char *last = base + *count * width;
 | |
| 
 | |
|   for (entry = base; entry < last; entry += width)
 | |
| 	if (keycmp(key, entry) == 0) return(entry);
 | |
| 
 | |
|   return((char *)NULL);
 | |
| }
 | 
