strn muxing in avi support.
[ffmpeg.git] / libavformat / http.c
index d4e9613..0c07592 100644 (file)
@@ -355,7 +355,7 @@ static int http_write(URLContext *h, uint8_t *buf, int size)
 
     if (s->chunksize == -1) {
         /* headers are sent without any special encoding */
-    return url_write(s->hd, buf, size);
+        return url_write(s->hd, buf, size);
     }
 
     /* silently ignore zero-size data since chunk encoding that would
@@ -394,6 +394,8 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
     HTTPContext *s = h->priv_data;
     URLContext *old_hd = s->hd;
     int64_t old_off = s->off;
+    uint8_t old_buf[BUFFER_SIZE];
+    int old_buf_size;
 
     if (whence == AVSEEK_SIZE)
         return s->filesize;
@@ -401,6 +403,8 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
         return -1;
 
     /* we save the old context in case the seek fails */
+    old_buf_size = s->buf_end - s->buf_ptr;
+    memcpy(old_buf, s->buf_ptr, old_buf_size);
     s->hd = NULL;
     if (whence == SEEK_CUR)
         off += s->off;
@@ -410,6 +414,9 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
 
     /* if it fails, continue on old connection */
     if (http_open_cnx(h) < 0) {
+        memcpy(s->buffer, old_buf, old_buf_size);
+        s->buf_ptr = s->buffer;
+        s->buf_end = s->buffer + old_buf_size;
         s->hd = old_hd;
         s->off = old_off;
         return -1;