summaryrefslogtreecommitdiff
path: root/server/common.c
diff options
context:
space:
mode:
authorGravatar Kenneth G Raeburn <raeburn@mit.edu>1990-11-13 12:02:59 +0000
committerGravatar Kenneth G Raeburn <raeburn@mit.edu>1990-11-13 12:02:59 +0000
commita36a075433165839ec7a02379ad83c03e08498a5 (patch)
treef6ad43e0f7a6e60f5e65d3e632b49edabf9a9a7a /server/common.c
parentdb89d0d2485f01c3d411c87952f2cd09e372f844 (diff)
C++ conversion and lots of modifications from summer & fall work
Diffstat (limited to 'server/common.c')
-rw-r--r--server/common.c57
1 files changed, 48 insertions, 9 deletions
diff --git a/server/common.c b/server/common.c
index e61f61e..1d1b7c1 100644
--- a/server/common.c
+++ b/server/common.c
@@ -15,30 +15,69 @@
#ifndef lint
#ifndef SABER
-static char rcsid_common_c[] = "$Header$";
+static const char rcsid_common_c[] =
+ "$Header$";
#endif SABER
#endif lint
#include <stdio.h>
-#include <zephyr/zsyslog.h>
-#include <strings.h>
-
-extern char *malloc();
+#include <assert.h>
+#include <ctype.h>
+#include "zserver.h"
/* common routines for the server */
/* copy the string into newly allocated area */
char *
-strsave(sp)
-char *sp;
+strsave (const char *sp)
{
register char *ret;
- if((ret = malloc((unsigned) strlen(sp)+1)) == NULL) {
- syslog(LOG_ERR, "no mem strsave'ing");
+ if((ret = (char *) xmalloc((unsigned) strlen(sp)+1)) == NULL) {
+ syslog(LOG_ERR, "no mem strdup'ing");
abort();
}
(void) strcpy(ret,sp);
return(ret);
}
+
+/* generic string hash function */
+
+unsigned long
+hash (const char *string)
+{
+ register int hval = 0;
+ register char cp;
+
+ while (1) {
+ cp = *string++;
+ if (!cp)
+ break;
+ hval += cp;
+
+ cp = *string++;
+ if (!cp)
+ break;
+ hval += cp * 9;
+
+ cp = *string++;
+ if (!cp)
+ break;
+ hval += cp * 17;
+
+ cp = *string++;
+ if (!cp)
+ break;
+ hval += cp * 65;
+
+ cp = *string++;
+ if (!cp)
+ break;
+ hval += cp * 129;
+
+ hval += (hval & 0x7fffff) * 256;
+ hval &= 0x7fffffff;
+ }
+ return hval;
+}