[FFmpeg-cvslog] http: restructure http_connect error handling path

wm4 git at videolan.org
Sun Mar 23 06:18:59 CET 2014


ffmpeg | branch: master | wm4 <nfxjfg at googlemail.com> | Fri Mar 21 18:51:31 2014 +0100| [686e662676288f04337d1dffcd0edf8235c9c8bf] | committer: Michael Niedermayer

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 at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=686e662676288f04337d1dffcd0edf8235c9c8bf
---

 libavformat/http.c |   18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/libavformat/http.c b/libavformat/http.c
index aefc9fa..64ca4ae 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;
 }
 
 



More information about the ffmpeg-cvslog mailing list