+2003-01-12 Thomas Helvey <tom.helvey@cox.net>
+ * include/class.h, include/ircd_string.h, ircd/class.c,
+ ircd/gline.c, ircd_string.c: Fix undefined order
+ of evaluation bug in gline.c, add general purpose hasher for
+ conf entries.
2003-01-11 Thomas Helvey <tom.helvey@cox.net>
* include/channel.h, include/ircd_alloc.h, ircd/channel.c,
ircd/client.c, ircd/gline.c, ircd/ircd_alloc.c,
extern int get_conf_ping(const struct ConfItem *aconf);
extern char *get_client_class(struct Client *acptr);
extern void add_class(char *name, unsigned int ping,
- unsigned int confreq, unsigned int maxli, unsigned int sendq);
+ unsigned int confreq, unsigned int maxli,
+ unsigned int sendq);
extern void check_class(void);
extern void report_classes(struct Client *sptr, struct StatDesc *sd, int stat,
char *param);
extern int string_is_address(const char* str);
extern int string_has_wildcards(const char* str);
+/*! Return hash for string using PJW algorithm */
+extern unsigned hash_pjw(const char* str);
extern char* ircd_strncpy(char* dest, const char* src, size_t len);
extern int ircd_strcmp(const char *a, const char *b);
extern int ircd_strncmp(const char *a, const char *b, size_t n);
-extern int unique_name_vector(char* names, char token, char** vector, int size);
-extern int token_vector(char* names, char token, char** vector, int size);
+extern int unique_name_vector(char* names, char token,
+ char** vector, int size);
+extern int token_vector(char* names, char token,
+ char** vector, int size);
extern const char* ircd_ntoa(const char* addr);
extern const char* ircd_ntoa_r(char* buf, const char* addr);
extern char* host_from_uh(char* buf, const char* userhost, size_t len);
for (prev = cl = connClassList; cl; cl = prev->next) {
Debug((DEBUG_DEBUG, "Class %s : CF: %d PF: %d ML: %d LI: %d SQ: %d",
- ConClass(cl), ConFreq(cl), PingFreq(cl), MaxLinks(cl), Links(cl), MaxSendq(cl)));
+ ConClass(cl), ConFreq(cl), PingFreq(cl), MaxLinks(cl),
+ Links(cl), MaxSendq(cl)));
/*
* unlink marked classes, delete unreferenced ones
*/
void class_send_meminfo(struct Client* cptr)
{
send_reply(cptr, SND_EXPLICIT | RPL_STATSDEBUG, ":Classes: inuse: %d(%d)",
- connClassAllocCount, connClassAllocCount * sizeof(struct ConnectionClass));
+ connClassAllocCount,
+ connClassAllocCount * sizeof(struct ConnectionClass));
}
} else if (*mask == '*' || *mask == '?')
flags |= MASK_WILD_0 | MASK_WILDS; /* found a wildcard */
else if (*mask == '/') { /* n.n.n.n/n notation; parse bit specifier */
- ipmask = strtoul(++mask, &mask, 10);
+ ++mask;
+ ipmask = strtoul(mask, &mask, 10);
if (*mask || dots != 3 || ipmask > 32 || /* sanity-check to date */
(flags & (MASK_WILDS | MASK_IP)) != MASK_IP)
static regex_t hostRegex;
static const char* addrExpr =
- "^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){1,3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$";
+ "^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){1,3}"
+ "(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$";
static regex_t addrRegex;
int init_string(void)
return 0;
}
+unsigned int hash_pjw(const char* str)
+{
+ unsigned h = 0;
+ unsigned g;
+ assert(str);
+
+ for ( ; *str; ++str) {
+ h = (h << 4) + *str;
+ if ((g = h & 0xf0000000)) {
+ h ^= g >> 24; /* fold top four bits onto ------X- */
+ h ^= g; /* clear top four bits */
+ }
+ }
+ return h;
+}
+
/*
* strtoken.c
*