struct pike_string *hval, *ind, *hind;
struct mapping *headermap;
struct svalue *s_headermap, *soldval;
+ int vallen;
GET_THIS();
// hval = make_shared_string(value);
ind = make_shared_string(" _headers");
hval = make_shared_string(value);
} else {
headermap = s_headermap->u.mapping;
-#if 0
- soldval = low_mapping_string_lookup(s_headermap, hind);
+ soldval = low_mapping_string_lookup(headermap, hind);
+ vallen = strlen(value);
if(soldval != NULL &&
- soldval->u.type == PIKE_T_STRING &&
+ soldval->type == PIKE_T_STRING &&
soldval->u.string->size_shift == 0) {
/* Existing, valid header. Prepend.*/
+ hval = begin_shared_string(soldval->u.string->len + 1 + vallen);
+ MEMCPY(hval->str, soldval->u.string->str, soldval->u.string->len);
+ STR0(hval)[soldval->u.string->len] = '\0';
+ MEMCPY(hval->str+soldval->u.string->len+1, value, vallen);
+ hval = end_shared_string(hval);
+ } else {
hval = make_shared_string(value);
}
-#endif
- hval = make_shared_string(value);
}
hsval.type = PIKE_T_STRING;
hsval.u.string = hval;