summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd/intrinsics.h
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/slapd/intrinsics.h')
-rw-r--r--ldap/servers/slapd/intrinsics.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/ldap/servers/slapd/intrinsics.h b/ldap/servers/slapd/intrinsics.h
new file mode 100644
index 00000000..f0b63431
--- /dev/null
+++ b/ldap/servers/slapd/intrinsics.h
@@ -0,0 +1,112 @@
+/** BEGIN COPYRIGHT BLOCK
+ * Copyright 2001 Sun Microsystems, Inc.
+ * Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
+ * All rights reserved.
+ * END COPYRIGHT BLOCK **/
+
+/* Header file used to declare functions which we beat on heavily as intrinsic */
+
+/* For NT ...*/
+
+#ifdef _WIN32
+__inline static int strcmpi_fast(const char * dst, const char * src)
+{
+ int f,l;
+ do {
+ if ( ((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z') )
+ f -= ('A' - 'a');
+ if ( ((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z') )
+ l -= ('A' - 'a');
+ } while ( f && (f == l) );
+ return(f - l);
+}
+#ifdef strcasecmp
+#undef strcasecmp
+#endif
+#define strcasecmp(x,y) strcmpi_fast(x,y)
+#ifdef strcmpi
+#undef strcmpi
+#endif
+#define strcmpi(x,y) strcmpi_fast(x,y)
+
+__inline static int tolower_fast(int c)
+{
+ if ( (c >= 'A') && (c <= 'Z') )
+ c = c + ('a' - 'A');
+ return c;
+}
+#ifdef tolower
+#undef tolower
+#endif
+#define tolower(x) tolower_fast(x)
+
+#else
+
+#ifdef HPUX
+#pragma INLINE strcmpi_fast,tolower_fast,toupper_fast,strncasecmp_fast
+#endif
+#ifdef LINUX
+#define INLINE_DIRECTIVE __inline__
+#else
+#define INLINE_DIRECTIVE
+#endif
+
+INLINE_DIRECTIVE static int strcmpi_fast(const char * dst, const char * src)
+{
+ int f,l;
+ do {
+ if ( ((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z') )
+ f -= ('A' - 'a');
+ if ( ((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z') )
+ l -= ('A' - 'a');
+ } while ( f && (f == l) );
+ return(f - l);
+}
+#ifdef strcasecmp
+#undef strcasecmp
+#endif
+#define strcasecmp(x,y) strcmpi_fast(x,y)
+#ifdef strcmpi
+#undef strcmpi
+#endif
+#define strcmpi(x,y) strcmpi_fast(x,y)
+
+INLINE_DIRECTIVE static int tolower_fast(int c)
+{
+ if ( (c >= 'A') && (c <= 'Z') )
+ c = c + ('a' - 'A');
+ return c;
+}
+#ifdef tolower
+#undef tolower
+#endif
+#define tolower(x) tolower_fast(x)
+
+INLINE_DIRECTIVE static int toupper_fast(int c)
+{
+ if ( (c >= 'a') && (c <= 'z') )
+ c = c - ('a' - 'A');
+ return c;
+}
+#ifdef toupper
+#undef toupper
+#endif
+#define toupper(x) toupper_fast(x)
+
+INLINE_DIRECTIVE static int strncasecmp_fast(const char * dst, const char * src, int n)
+{
+ int f,l,x=0;
+ do {
+ if ( ((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z') )
+ f -= ('A' - 'a');
+ if ( ((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z') )
+ l -= ('A' - 'a');
+ } while ( f && (f == l) && ++x < n );
+ return(f - l);
+}
+
+#ifdef strncasecmp
+#undef strncasecmp
+#endif
+#define strncasecmp(x,y,z) strncasecmp_fast(x,y,z)
+#endif /* NT */