Browse Source

* Add a rfc_ncasecmp()

Bryan Drewery 14 năm trước cách đây
mục cha
commit
c45ab07070
3 tập tin đã thay đổi với 24 bổ sung0 xóa
  1. 1 0
      src/mod/server.mod/servmsg.c
  2. 21 0
      src/rfc1459.c
  3. 2 0
      src/rfc1459.h

+ 1 - 0
src/mod/server.mod/servmsg.c

@@ -390,6 +390,7 @@ got005(char *from, char *msg)
       /* we are default set to rfc1459, so only switch if NOT rfc1459 */
       if (strcasecmp(p, "rfc1459")) {
         rfc_casecmp = strcasecmp;
+        rfc_ncasecmp = strncasecmp;
         rfc_toupper = toupper;
       }
     }

+ 21 - 0
src/rfc1459.c

@@ -28,6 +28,7 @@
 #include "rfc1459.h"
 
 int (*rfc_casecmp) (const char *, const char *) = _rfc_casecmp;
+int (*rfc_ncasecmp) (const char *, const char *, size_t) = _rfc_ncasecmp;
 int (*rfc_toupper) (int) = _rfc_toupper;
 
 int
@@ -46,6 +47,26 @@ _rfc_casecmp(const char *s1, const char *s2)
   return (res);
 }
 
+int
+_rfc_ncasecmp(const char *s1, const char *s2, size_t n)
+{
+  register unsigned char *str1 = (unsigned char *) s1;
+  register unsigned char *str2 = (unsigned char *) s2;
+  register int res;
+
+  if (!n) {
+    return 0;
+  }
+
+  while (--n && !(res = rfc_toupper(*str1) - rfc_toupper(*str2))) {
+    if (*str1 == '\0')
+      return 0;
+    str1++;
+    str2++;
+  }
+  return (res);
+}
+
 unsigned char rfc_touppertab[] = { 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
   0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
   0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,

+ 2 - 0
src/rfc1459.h

@@ -2,9 +2,11 @@
 #define _RFC1459_H
 
 int _rfc_casecmp(const char *, const char *);
+int _rfc_ncasecmp(const char *, const char *, size_t);
 int _rfc_toupper(int);
 
 extern int (*rfc_casecmp) (const char *, const char *);
+extern int (*rfc_ncasecmp) (const char *, const char *, size_t);
 extern int (*rfc_toupper) (int);
 
 #endif /* !_RFC1459_H */