| 1913 | } |
| 1914 | |
| 1915 | TSReturnCode |
| 1916 | TSMimeHdrFieldClone(TSMBuffer dest_bufp, TSMLoc dest_hdr, TSMBuffer src_bufp, TSMLoc src_hdr, TSMLoc src_field, TSMLoc *locp) |
| 1917 | { |
| 1918 | // Allow to modify the buffer only |
| 1919 | // if bufp is modifiable. If bufp is not modifiable return |
| 1920 | // TS_ERROR. If not allowed, set *locp to TS_NULL_MLOC. |
| 1921 | sdk_assert(sdk_sanity_check_mbuffer(dest_bufp) == TS_SUCCESS); |
| 1922 | sdk_assert(sdk_sanity_check_mbuffer(src_bufp) == TS_SUCCESS); |
| 1923 | sdk_assert((sdk_sanity_check_mime_hdr_handle(dest_hdr) == TS_SUCCESS) || |
| 1924 | (sdk_sanity_check_http_hdr_handle(dest_hdr) == TS_SUCCESS)); |
| 1925 | sdk_assert((sdk_sanity_check_mime_hdr_handle(src_hdr) == TS_SUCCESS) || |
| 1926 | (sdk_sanity_check_http_hdr_handle(src_hdr) == TS_SUCCESS)); |
| 1927 | sdk_assert(sdk_sanity_check_field_handle(src_field, src_hdr) == TS_SUCCESS); |
| 1928 | sdk_assert(sdk_sanity_check_null_ptr((void *)locp) == TS_SUCCESS); |
| 1929 | |
| 1930 | if (!isWriteable(dest_bufp)) { |
| 1931 | return TS_ERROR; |
| 1932 | } |
| 1933 | |
| 1934 | // This is sort of sub-optimal, since we'll check the args again. TODO. |
| 1935 | if (TSMimeHdrFieldCreate(dest_bufp, dest_hdr, locp) == TS_SUCCESS) { |
| 1936 | TSMimeHdrFieldCopy(dest_bufp, dest_hdr, *locp, src_bufp, src_hdr, src_field); |
| 1937 | return TS_SUCCESS; |
| 1938 | } |
| 1939 | // TSMimeHdrFieldCreate() failed for some reason. |
| 1940 | return TS_ERROR; |
| 1941 | } |
| 1942 | |
| 1943 | TSReturnCode |
| 1944 | TSMimeHdrFieldCopyValues(TSMBuffer dest_bufp, TSMLoc dest_hdr, TSMLoc dest_field, TSMBuffer src_bufp, TSMLoc src_hdr, |