@@ -111,23 +111,21 @@ func toResponse(res *C.wasi_outbound_http_response_t) (*http.Response, error) {
111111
112112func toOutboundHeaders (hm http.Header ) C.wasi_outbound_http_headers_t {
113113 var reqHeaders C.wasi_outbound_http_headers_t
114+
114115 headersLen := len (hm )
115116
116117 if headersLen > 0 {
117118 reqHeaders .len = C .ulong (headersLen )
118- var x C.wasi_outbound_http_string_t
119- headersPtr := C . malloc (C .size_t (headersLen ) * C .size_t (unsafe .Sizeof (x )))
120- ptr := ( * [ 1 << 30 ]C. wasi_outbound_http_tuple2_string_string_t )( unsafe .Pointer ( & headersPtr ))[: headersLen : headersLen ]
119+ var x C.wasi_outbound_http_tuple2_string_string_t
120+ reqHeaders . ptr = ( * C . wasi_outbound_http_tuple2_string_string_t )( C . malloc (C .size_t (headersLen ) * C .size_t (unsafe .Sizeof (x ) )))
121+ headers := unsafe .Slice ( reqHeaders . ptr , headersLen )
121122
122123 idx := 0
123124 for k , v := range hm {
124- ptr [idx ].f0 = C.wasi_outbound_http_string_t {ptr : C .CString (k ), len : C .size_t (len (k ))}
125- ptr [idx ].f1 = C.wasi_outbound_http_string_t {ptr : C .CString (v [0 ]), len : C .size_t (len (v [0 ]))}
125+ headers [idx ] = newOutboundHeader (k , v [0 ])
126126 idx ++
127127 }
128- reqHeaders .ptr = & ptr [0 ]
129128 }
130-
131129 return reqHeaders
132130}
133131
@@ -188,3 +186,11 @@ func toErr(code C.uint8_t, url string) error {
188186 return nil
189187 }
190188}
189+
190+ // newOutboundHeader creates a new outboundHeader with the given key/value.
191+ func newOutboundHeader (k , v string ) C.wasi_outbound_http_tuple2_string_string_t {
192+ return C.wasi_outbound_http_tuple2_string_string_t {
193+ f0 : C.wasi_outbound_http_string_t {ptr : C .CString (k ), len : C .size_t (len (k ))},
194+ f1 : C.wasi_outbound_http_string_t {ptr : C .CString (v ), len : C .size_t (len (v ))},
195+ }
196+ }
0 commit comments