資源簡介
使用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?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?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?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?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
- 上一篇:辦公自動(dòng)化上機(jī)考試題
- 下一篇:易語言爬蟲源碼
評論
共有 條評論