• 大小: 2.21MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-10-03
  • 语言: 其他
  • 标签: lighttpd  cgi  

资源简介

使用lighttpd的开源代码成功搭建支持cgi的代码包

资源截图

代码片段和文件信息

#include “array.h“
#include “buffer.h“

#include 
#include 
#include 
#include 

#include 
#include 

array *array_init(void) {
array *a;

a = calloc(1 sizeof(*a));
force_assert(a);

a->next_power_of_2 = 1;

return a;
}

array *array_init_array(array *src) {
size_t i;
array *a = array_init();

if (0 == src->size) return a;

a->used = src->used;
a->size = src->size;
a->next_power_of_2 = src->next_power_of_2;
a->unique_ndx = src->unique_ndx;

a->data = malloc(sizeof(*src->data) * src->size);
for (i = 0; i < src->size; i++) {
if (src->data[i]) a->data[i] = src->data[i]->copy(src->data[i]);
else a->data[i] = NULL;
}

a->sorted = malloc(sizeof(*src->sorted)   * src->size);
memcpy(a->sorted src->sorted sizeof(*src->sorted)   * src->size);
return a;
}

void array_free(array *a) {
size_t i;
if (!a) return;

if (!a->is_weakref) {
for (i = 0; i < a->size; i++) {
if (a->data[i]) a->data[i]->free(a->data[i]);
}
}

if (a->data) free(a->data);
if (a->sorted) free(a->sorted);

free(a);
}

void array_reset(array *a) {
size_t i;
if (!a) return;

if (!a->is_weakref) {
for (i = 0; i < a->used; i++) {
a->data[i]->reset(a->data[i]);
}
}

a->used = 0;
}

data_unset *array_pop(array *a) {
data_unset *du;

force_assert(a->used != 0);

a->used --;
du = a->data[a->used];
a->data[a->used] = NULL;

return du;
}

static int array_get_index(array *a const char *key size_t keylen int *rndx) {
int ndx = -1;
int i pos = 0;

if (key == NULL) return -1;

/* try to find the string */
for (i = pos = a->next_power_of_2 / 2; ; i >>= 1) {
int cmp;

if (pos < 0) {
pos += i;
} else if (pos >= (int)a->used) {
pos -= i;
} else {
cmp = buffer_caseless_compare(key keylen CONST_BUF_LEN(a->data[a->sorted[pos]]->key));

if (cmp == 0) {
/* found */
ndx = a->sorted[pos];
break;
} else if (cmp < 0) {
pos -= i;
} else {
pos += i;
}
}
if (i == 0) break;
}

if (rndx) *rndx = pos;

return ndx;
}

data_unset *array_get_element(array *a const char *key) {
int ndx;

if (-1 != (ndx = array_get_index(a key strlen(key) NULL))) {
/* found leave here */

return a->data[ndx];
}

return NULL;
}

data_unset *array_get_unused_element(array *a data_type_t t) {
data_unset *ds = NULL;
unsigned int i;

for (i = a->used; i < a->size; i++) {
if (a->data[i] && a->data[i]->type == t) {
ds = a->data[i];

/* make empty slot at a->used for next insert */
a->data[i] = a->data[a->used];
a->data[a->used] = NULL;

return ds;
}
}

return NULL;
}

void array_set_key_value(array *hdrs const char *key size_t key_len const char *value size_t val_len) {
data_string *ds_dst;

if (NULL != (ds_dst = (data_string *)array_get_element(hdrs key))) {
buffer_copy_string_len(ds_dst->value value val_len);
return;
}

if (NULL == (ds_dst = (data_string *)array_get_unused_element(hdrs TYPE_STRING))) {
ds_dst = dat

评论

共有 条评论