diff options
Diffstat (limited to 'src/core/url.c')
| -rw-r--r-- | src/core/url.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/core/url.c b/src/core/url.c index 472e70b2..699734a7 100644 --- a/src/core/url.c +++ b/src/core/url.c @@ -610,16 +610,10 @@ nni_url_asprintf_port(char **str, const nng_url *url, int port) #define URL_COPYSTR(d, s) ((s != NULL) && ((d = nni_strdup(s)) == NULL)) int -nng_url_clone(nng_url **dstp, const nng_url *src) +nni_url_clone_inline(nng_url *dst, const nng_url *src) { - nng_url *dst; - - if ((dst = NNI_ALLOC_STRUCT(dst)) == NULL) { - return (NNG_ENOMEM); - } if (src->u_bufsz != 0) { if ((dst->u_buffer = nni_alloc(dst->u_bufsz)) == NULL) { - NNI_FREE_STRUCT(dst); return (NNG_ENOMEM); } dst->u_bufsz = src->u_bufsz; @@ -646,12 +640,27 @@ nng_url_clone(nng_url **dstp, const nng_url *src) } dst->u_scheme = src->u_scheme; dst->u_port = src->u_port; - *dstp = dst; return (0); } #undef URL_COPYSTR +int +nng_url_clone(nng_url **dstp, const nng_url *src) +{ + nng_url *dst; + int rv; + if ((dst = NNI_ALLOC_STRUCT(dst)) == NULL) { + return (NNG_ENOMEM); + } + if ((rv = nni_url_clone_inline(dst, src) != 0)) { + NNI_FREE_STRUCT(dst); + return (rv); + } + *dstp = dst; + return (0); +} + // nni_url_to_address resolves a URL into a sockaddr, assuming the URL is for // an IP address. int |
