long tValueLen;
extract_token(tfield, buf, 0, '|', sizeof tfield);
tValueLen = extract_token(tvalue, buf, 1, '|', sizeof tvalue);
- for (i='A'; i<='Z'; ++i) if (msgkeys[i]!=NULL) {
- if (!strcasecmp(tfield, msgkeys[i])) {
- CM_SetField(template, i, tvalue, tValueLen);
- }
+ if (tValueLen >= 0) {
+ for (i='A'; i<='Z'; ++i) if (msgkeys[i]!=NULL) {
+ if (!strcasecmp(tfield, msgkeys[i])) {
+ CM_SetField(template, i, tvalue, tValueLen);
+ }
+ }
}
}
buffer_output();
else return *(long*)str;
}
+/**
+ * @ingroup HashListAlgorithm
+ * @brief another hashing algorithm; accepts exactly 4 characters, convert it to a hash key.
+ * @param str Our pointer to the long value
+ * @param len the length of the data pointed to; needs to be sizeof long, else we won't use it!
+ * @return the calculated hash value
+ */
+long FourHash(const char *key, long length)
+{
+ int i;
+ int ret = 0;
+ const unsigned char *ptr = (const unsigned char*)key;
+
+ for (i = 0; i < 4; i++, ptr ++)
+ ret = (ret << 8) |
+ ( ((*ptr >= 'a') &&
+ (*ptr <= 'z'))?
+ *ptr - 'a' + 'A':
+ *ptr);
+
+ return ret;
+}
+
/**
* @ingroup HashListPrivate
* @brief private abstract wrapper around the hashing algorithm
typedef void (*TransitionFunc) (void *Item1, void *Item2, int Odd);
typedef const char* (*PrintHashDataFunc) (const char *Key, void *Item, int Odd);
+long FourHash(const char *key, long length);
long Flathash(const char *str, long len);
long lFlathash(const char *str, long len);
#define IKEY(a) (const char*) &a, sizeof(a)