summaryrefslogtreecommitdiff
path: root/server/common.c
diff options
context:
space:
mode:
authorGravatar Greg Hudson <ghudson@mit.edu>1994-10-31 00:33:46 +0000
committerGravatar Greg Hudson <ghudson@mit.edu>1994-10-31 00:33:46 +0000
commitdab687ed495aeadda5393257e07d2a197c4dc741 (patch)
tree94c77a62bb1bda3428514b8ec8fdb86d362cacfa /server/common.c
parent0741c0b9ac6d5bfcdab21bc58cba3f400524ac37 (diff)
Case-insensitive hashing, and a support routine for quoting
subscription database dumps.
Diffstat (limited to 'server/common.c')
-rw-r--r--server/common.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/server/common.c b/server/common.c
index 6ae0a13..87585b9 100644
--- a/server/common.c
+++ b/server/common.c
@@ -49,7 +49,7 @@ strsave (sp)
return(ret);
}
-/* generic string hash function */
+/* The "& 0x5f" provides case-insensitivity for ASCII. */
unsigned long
#ifdef __STDC__
@@ -66,30 +66,49 @@ hash (string)
cp = *string++;
if (!cp)
break;
- hval += cp;
+ hval += cp & 0x5f;
cp = *string++;
if (!cp)
break;
- hval += cp * (3 + (1 << 16));
+ hval += (cp & 0x5f) * (3 + (1 << 16));
cp = *string++;
if (!cp)
break;
- hval += cp * (1 + (1 << 8));
+ hval += (cp & 0x5f) * (1 + (1 << 8));
cp = *string++;
if (!cp)
break;
- hval += cp * (1 + (1 << 12));
+ hval += (cp & 0x5f) * (1 + (1 << 12));
cp = *string++;
if (!cp)
break;
- hval += cp * (1 + (1 << 4));
+ hval += (cp & 0x5f) * (1 + (1 << 4));
hval += ((long) hval) >> 18;
}
hval &= 0x7fffffff;
return hval;
}
+
+/* Output a name, replacing newlines with \n and single quotes with \q. */
+void subscr_quote(p, fp)
+ char *p;
+ FILE *fp;
+{
+ for (; *p; p++) {
+ if (*p == '\'') {
+ putc('\\', fp);
+ putc('q', fp);
+ } else if (*p == '\n') {
+ putc('\\', fp);
+ putc('n', fp);
+ } else {
+ putc(*p, fp);
+ }
+ }
+}
+