| 106 | } |
| 107 | |
| 108 | static int copy_tag(AVIOContext *in, AVIOContext *out, int32_t tag_name) |
| 109 | { |
| 110 | int32_t size, tag; |
| 111 | |
| 112 | size = avio_rb32(in); |
| 113 | tag = avio_rb32(in); |
| 114 | avio_wb32(out, size); |
| 115 | avio_wb32(out, tag); |
| 116 | if (expect_tag(tag, tag_name) != 0) |
| 117 | return -1; |
| 118 | size -= 8; |
| 119 | while (size > 0) { |
| 120 | char buf[1024]; |
| 121 | int len = FFMIN(sizeof(buf), size); |
| 122 | int got; |
| 123 | if ((got = avio_read(in, buf, len)) != len) { |
| 124 | fprintf(stderr, "short read, wanted %d, got %d\n", len, got); |
| 125 | break; |
| 126 | } |
| 127 | avio_write(out, buf, len); |
| 128 | size -= len; |
| 129 | } |
| 130 | return 0; |
| 131 | } |
| 132 | |
| 133 | static int skip_tag(AVIOContext *in, int32_t tag_name) |
| 134 | { |
no test coverage detected