]> granicus.if.org Git - php/commitdiff
(php_caudium_set_header): Allow for multiple headers with the same name.
authorDavid Hedbor <neotron@php.net>
Mon, 6 Nov 2000 22:11:10 +0000 (22:11 +0000)
committerDavid Hedbor <neotron@php.net>
Mon, 6 Nov 2000 22:11:10 +0000 (22:11 +0000)
sapi/caudium/caudium.c

index e08a4c84e727b686b268f8794177b3ff79f441f3..3724338d930e4d5bc2504f5665c3bf3130f7616f 100644 (file)
@@ -290,6 +290,7 @@ php_caudium_set_header(char *header_name, char *value, char *p)
   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");
@@ -308,16 +309,20 @@ php_caudium_set_header(char *header_name, char *value, char *p)
     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;