You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
760 B
41 lines
760 B
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
|
|
#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:
|