summaryrefslogtreecommitdiff
path: root/libavformat/http.c
diff options
context:
space:
mode:
authorwm4 <nfxjfg@googlemail.com>2014-03-21 18:51:31 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-03-23 05:56:35 +0100
commit686e662676288f04337d1dffcd0edf8235c9c8bf (patch)
tree783e1d687156c92256539e007a74cc6a2e2d34af /libavformat/http.c
parent6ee2911996ed5aea8fd49fd264cfb7930a7cd10e (diff)
http: restructure http_connect error handling path
The authstr memory allocations make it annoying to error in the middle of the header setup code, so apply the usual C error handling idiom to make it easier to error at any point. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/http.c')
-rw-r--r--libavformat/http.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/libavformat/http.c b/libavformat/http.c
index aefc9fa245..64ca4ae548 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -775,17 +775,14 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
authstr ? authstr : "",
proxyauthstr ? "Proxy-" : "", proxyauthstr ? proxyauthstr : "");
- av_freep(&authstr);
- av_freep(&proxyauthstr);
-
av_log(h, AV_LOG_DEBUG, "request: %s\n", s->buffer);
if ((err = ffurl_write(s->hd, s->buffer, strlen(s->buffer))) < 0)
- return err;
+ goto done;
if (s->post_data)
if ((err = ffurl_write(s->hd, s->post_data, s->post_datalen)) < 0)
- return err;
+ goto done;
/* init input buffer */
s->buf_ptr = s->buffer;
@@ -802,15 +799,20 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
* we've still to send the POST data, but the code calling this
* function will check http_code after we return. */
s->http_code = 200;
- return 0;
+ err = 0;
+ goto done;
}
/* wait for header */
err = http_read_header(h, new_location);
if (err < 0)
- return err;
+ goto done;
- return (off == s->off) ? 0 : -1;
+ err = (off == s->off) ? 0 : -1;
+done:
+ av_freep(&authstr);
+ av_freep(&proxyauthstr);
+ return err;
}