diff options
author | wm4 <nfxjfg@googlemail.com> | 2014-03-21 21:51:31 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-03-23 08:56:35 +0400 |
commit | 686e662676288f04337d1dffcd0edf8235c9c8bf (patch) | |
tree | 783e1d687156c92256539e007a74cc6a2e2d34af /libavformat | |
parent | 6ee2911996ed5aea8fd49fd264cfb7930a7cd10e (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')
-rw-r--r-- | libavformat/http.c | 18 |
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; } |