svn commit: samba r14612 - in branches/SAMBA_4_0/source/lib/util: .

tridge at samba.org tridge at samba.org
Tue Mar 21 11:37:11 GMT 2006


Author: tridge
Date: 2006-03-21 11:37:11 +0000 (Tue, 21 Mar 2006)
New Revision: 14612

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14612

Log:

added strncasecmp_m() and fixed strcasecmp_m() for invalid codepoints

Modified:
   branches/SAMBA_4_0/source/lib/util/util_str.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/util/util_str.c
===================================================================
--- branches/SAMBA_4_0/source/lib/util/util_str.c	2006-03-21 11:14:29 UTC (rev 14611)
+++ branches/SAMBA_4_0/source/lib/util/util_str.c	2006-03-21 11:37:11 UTC (rev 14612)
@@ -101,14 +101,53 @@
 		if (c1 == INVALID_CODEPOINT ||
 		    c2 == INVALID_CODEPOINT) {
 			/* what else can we do?? */
+			return strcasecmp(s1, s2);
+		}
+
+		if (toupper_w(c1) != toupper_w(c2)) {
 			return c1 - c2;
 		}
+	}
 
+	return *s1 - *s2;
+}
+
+/**
+ Case insensitive string compararison, length limited
+**/
+_PUBLIC_ int strncasecmp_m(const char *s1, const char *s2, size_t n)
+{
+	codepoint_t c1=0, c2=0;
+	size_t size1, size2;
+
+	while (*s1 && *s2 && n) {
+		n--;
+
+		c1 = next_codepoint(s1, &size1);
+		c2 = next_codepoint(s2, &size2);
+
+		s1 += size1;
+		s2 += size2;
+
+		if (c1 == c2) {
+			continue;
+		}
+
+		if (c1 == INVALID_CODEPOINT ||
+		    c2 == INVALID_CODEPOINT) {
+			/* what else can we do?? */
+			return strcasecmp(s1, s2);
+		}
+
 		if (toupper_w(c1) != toupper_w(c2)) {
 			return c1 - c2;
 		}
 	}
 
+	if (n == 0) {
+		return 0;
+	}
+
 	return *s1 - *s2;
 }
 



More information about the samba-cvs mailing list