#include #include #include "http/header.h" static inline unsigned long sdbm(const unsigned char * str) { unsigned long hash = 0; int c; while ((c = tolower(*str++))) hash = c + (hash << 6) + (hash << 16) - hash; return hash; } static inline int comp (const void * _a, const void * _b) { unsigned long a = *(unsigned long *)_a; const HttpHeader b = *(const HttpHeader *)_b; return (a < b->hash)? -1 : (a > b->hash)? 1 : 0; } char * httpHeaderGet(const HttpHeader header[], int nheader, const char * name) { unsigned long hash = sdbm((unsigned char *)name); HttpHeader found; found = bsearch(&hash, header, nheader, sizeof(HttpHeader), comp); return (NULL != found)? found->value : NULL; } // vim: set ts=4 sw=4: