/* php_roxen_set_header() sets a header in the header mapping. Called in a * thread safe manner from php_roxen_sapi_header_handler. */ static void php_roxen_set_header(char *header_name, char *value, char *p) { struct svalue hsval; struct pike_string *hval, *ind, *hind; struct mapping *headermap; struct svalue *s_headermap; #ifdef ROXEN_USE_ZTS GET_THIS(); #endif hval = make_shared_string(value); ind = make_shared_string(" _headers"); hind = make_shared_binary_string(header_name, (int)(p - header_name)); s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind); if(!s_headermap) { struct svalue mappie; mappie.type = PIKE_T_MAPPING; headermap = allocate_mapping(1); mappie.u.mapping = headermap; mapping_string_insert(REQUEST_DATA, ind, &mappie); free_mapping(headermap); } else headermap = s_headermap->u.mapping; hsval.type = PIKE_T_STRING; hsval.u.string = hval; mapping_string_insert(headermap, hind, &hsval); free_string(hval); free_string(ind); free_string(hind); }
/* php_caudium_set_header() sets a header in the header mapping. Called in a * thread safe manner from php_caudium_sapi_header_handler. */ INLINE static void php_caudium_set_header(char *header_name, char *value, char *p) { struct svalue hsval; 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"); hind = make_shared_binary_string(header_name, (int)(p - header_name)); s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind); if(!s_headermap || s_headermap->type != PIKE_T_MAPPING) { struct svalue mappie; mappie.type = PIKE_T_MAPPING; headermap = allocate_mapping(1); mappie.u.mapping = headermap; mapping_string_insert(REQUEST_DATA, ind, &mappie); free_mapping(headermap); hval = make_shared_string(value); } else { headermap = s_headermap->u.mapping; soldval = low_mapping_string_lookup(headermap, hind); vallen = strlen(value); if(soldval != NULL && 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); } } hsval.type = PIKE_T_STRING; hsval.u.string = hval; mapping_string_insert(headermap, hind, &hsval); free_string(hval); free_string(ind); free_string(hind); }
void foo() { if(s->type == T_INT && count->type == T_INT) s->u.integer+=count->u.integer; else { push_svalue(s); push_svalue(count); f_add(2); mapping_string_insert(mappingen, key, Pike_sp-1); pop_stack(); } if(s->type == T_INT && count->type == T_INT && !INT_TYPE_ADD_OVERFLOW(count->u.integer, s->u.integer)) { /*fast add*/} else { /*f_add*/ } }
static struct mapping *tree2mapping(xmlElementContentPtr content) { struct mapping *ret; struct svalue sv; if (!content) return NULL; ret = allocate_mapping(12); sv.type = T_INT; sv.u.integer = content->type; mapping_string_insert(ret, econtent_type, &sv); sv.u.integer = content->ocur; mapping_string_insert(ret, econtent_ocur, &sv); mapping_string_insert_string(ret, econtent_name, make_shared_string(content->name)); mapping_string_insert_string(ret, econtent_prefix, make_shared_string(content->prefix)); if (content->c1) { sv.type = T_MAPPING; sv.u.mapping = tree2mapping(content->c1); } else sv.u.integer = 0; mapping_string_insert(ret, econtent_c1, &sv); if (content->c2) { sv.type = T_MAPPING; sv.u.mapping = tree2mapping(content->c2); } else { sv.type = T_INT; sv.u.integer = 0; } mapping_string_insert(ret, econtent_c2, &sv); return ret; }