| 104 | } |
| 105 | |
| 106 | int FileHandle::Printf(const char *fmt, ...) { |
| 107 | va_list args; |
| 108 | va_start(args, fmt); |
| 109 | |
| 110 | std::vector<char> OutBuffer(100); |
| 111 | int ret = -1; |
| 112 | while (OutBuffer.size() < 1024 * 1024) { |
| 113 | ret = vsnprintf(OutBuffer.data(), OutBuffer.size(), fmt, args); |
| 114 | if (ret > 0 && ret < (int)OutBuffer.size()) |
| 115 | break; |
| 116 | OutBuffer.resize(OutBuffer.size() * 2); |
| 117 | } |
| 118 | |
| 119 | va_end(args); |
| 120 | |
| 121 | avio_write(avio, reinterpret_cast<const unsigned char *>(OutBuffer.data()), ret); |
| 122 | avio_flush(avio); |
| 123 | |
| 124 | return avio->error < 0 ? avio->error : ret; |
| 125 | } |