xref: /inferno-os/libkern/cistrncmp.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth int
cistrncmp(char * s1,char * s2,int n)4*37da2899SCharles.Forsyth cistrncmp(char *s1, char *s2, int n)
5*37da2899SCharles.Forsyth {
6*37da2899SCharles.Forsyth 	int c1, c2;
7*37da2899SCharles.Forsyth 
8*37da2899SCharles.Forsyth 	while(*s1 && n-- > 0){
9*37da2899SCharles.Forsyth 		c1 = *(uchar*)s1++;
10*37da2899SCharles.Forsyth 		c2 = *(uchar*)s2++;
11*37da2899SCharles.Forsyth 
12*37da2899SCharles.Forsyth 		if(c1 == c2)
13*37da2899SCharles.Forsyth 			continue;
14*37da2899SCharles.Forsyth 
15*37da2899SCharles.Forsyth 		if(c1 >= 'A' && c1 <= 'Z')
16*37da2899SCharles.Forsyth 			c1 -= 'A' - 'a';
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth 		if(c2 >= 'A' && c2 <= 'Z')
19*37da2899SCharles.Forsyth 			c2 -= 'A' - 'a';
20*37da2899SCharles.Forsyth 
21*37da2899SCharles.Forsyth 		if(c1 != c2)
22*37da2899SCharles.Forsyth 			return c1 - c2;
23*37da2899SCharles.Forsyth 	}
24*37da2899SCharles.Forsyth 	if(n <= 0)
25*37da2899SCharles.Forsyth 		return 0;
26*37da2899SCharles.Forsyth 	return -*s2;
27*37da2899SCharles.Forsyth }
28