xref: /plan9/sys/src/ape/lib/bsd/strncasecmp.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <stdlib.h>
2*219b2ee8SDavid du Colombier #include <string.h>
3*219b2ee8SDavid du Colombier #include <ctype.h>
4*219b2ee8SDavid du Colombier #include <bsd.h>
5*219b2ee8SDavid du Colombier 
6*219b2ee8SDavid du Colombier int
7*219b2ee8SDavid du Colombier strncasecmp(char *s1, char *s2,int n)
8*219b2ee8SDavid du Colombier {
9*219b2ee8SDavid du Colombier 	char *s1ptr, *s2ptr;
10*219b2ee8SDavid du Colombier 	int s1size, s2size, i;
11*219b2ee8SDavid du Colombier 	int ret_val;
12*219b2ee8SDavid du Colombier 
13*219b2ee8SDavid du Colombier 	if (n<1)
14*219b2ee8SDavid du Colombier 		return 0;
15*219b2ee8SDavid du Colombier 
16*219b2ee8SDavid du Colombier 	s1size = n<strlen(s1)?n+1:strlen(s1)+1;
17*219b2ee8SDavid du Colombier 	s2size = n<strlen(s2)?n+1:strlen(s2)+1;
18*219b2ee8SDavid du Colombier 	s1ptr = (char *)malloc(s1size); s2ptr = (char *)malloc(s2size);
19*219b2ee8SDavid du Colombier 	if ((s1ptr == NULL) || (s2ptr == NULL))
20*219b2ee8SDavid du Colombier 		return 0; /* any better ideas here? */
21*219b2ee8SDavid du Colombier 
22*219b2ee8SDavid du Colombier 	for (i= 0; i < s1size ; i++ )
23*219b2ee8SDavid du Colombier 		s1ptr[i] = toupper(s1[i]);
24*219b2ee8SDavid du Colombier 	s1ptr[s1size] = '\0';
25*219b2ee8SDavid du Colombier 
26*219b2ee8SDavid du Colombier 	for (i= 0; i < s2size ; i++ )
27*219b2ee8SDavid du Colombier 		s2ptr[i] = toupper(s2[i]);
28*219b2ee8SDavid du Colombier 
29*219b2ee8SDavid du Colombier 	s2ptr[s2size] = '\0';
30*219b2ee8SDavid du Colombier 	ret_val = strncmp(s1ptr,s2ptr,n);
31*219b2ee8SDavid du Colombier 	free(s1ptr); free(s2ptr);
32*219b2ee8SDavid du Colombier 	return ret_val;
33*219b2ee8SDavid du Colombier }
34