1 /* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 #include "qemu/osdep.h" 25 #include <zlib.h> 26 #include "qemu/madvise.h" 27 #include "qemu/error-report.h" 28 #include "qemu/iov.h" 29 #include "migration.h" 30 #include "qemu-file.h" 31 #include "trace.h" 32 #include "qapi/error.h" 33 34 #define IO_BUF_SIZE 32768 35 #define MAX_IOV_SIZE MIN_CONST(IOV_MAX, 64) 36 37 struct QEMUFile { 38 const QEMUFileHooks *hooks; 39 QIOChannel *ioc; 40 bool is_writable; 41 42 /* 43 * Maximum amount of data in bytes to transfer during one 44 * rate limiting time window 45 */ 46 int64_t rate_limit_max; 47 /* 48 * Total amount of data in bytes queued for transfer 49 * during this rate limiting time window 50 */ 51 int64_t rate_limit_used; 52 53 /* The sum of bytes transferred on the wire */ 54 int64_t total_transferred; 55 56 int buf_index; 57 int buf_size; /* 0 when writing */ 58 uint8_t buf[IO_BUF_SIZE]; 59 60 DECLARE_BITMAP(may_free, MAX_IOV_SIZE); 61 struct iovec iov[MAX_IOV_SIZE]; 62 unsigned int iovcnt; 63 64 int last_error; 65 Error *last_error_obj; 66 /* has the file has been shutdown */ 67 bool shutdown; 68 }; 69 70 /* 71 * Stop a file from being read/written - not all backing files can do this 72 * typically only sockets can. 73 * 74 * TODO: convert to propagate Error objects instead of squashing 75 * to a fixed errno value 76 */ 77 int qemu_file_shutdown(QEMUFile *f) 78 { 79 int ret = 0; 80 81 f->shutdown = true; 82 83 /* 84 * We must set qemufile error before the real shutdown(), otherwise 85 * there can be a race window where we thought IO all went though 86 * (because last_error==NULL) but actually IO has already stopped. 87 * 88 * If without correct ordering, the race can happen like this: 89 * 90 * page receiver other thread 91 * ------------- ------------ 92 * qemu_get_buffer() 93 * do shutdown() 94 * returns 0 (buffer all zero) 95 * (we didn't check this retcode) 96 * try to detect IO error 97 * last_error==NULL, IO okay 98 * install ALL-ZERO page 99 * set last_error 100 * --> guest crash! 101 */ 102 if (!f->last_error) { 103 qemu_file_set_error(f, -EIO); 104 } 105 106 if (!qio_channel_has_feature(f->ioc, 107 QIO_CHANNEL_FEATURE_SHUTDOWN)) { 108 return -ENOSYS; 109 } 110 111 if (qio_channel_shutdown(f->ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL) < 0) { 112 ret = -EIO; 113 } 114 115 return ret; 116 } 117 118 bool qemu_file_mode_is_not_valid(const char *mode) 119 { 120 if (mode == NULL || 121 (mode[0] != 'r' && mode[0] != 'w') || 122 mode[1] != 'b' || mode[2] != 0) { 123 fprintf(stderr, "qemu_fopen: Argument validity check failed\n"); 124 return true; 125 } 126 127 return false; 128 } 129 130 static QEMUFile *qemu_file_new_impl(QIOChannel *ioc, bool is_writable) 131 { 132 QEMUFile *f; 133 134 f = g_new0(QEMUFile, 1); 135 136 object_ref(ioc); 137 f->ioc = ioc; 138 f->is_writable = is_writable; 139 140 return f; 141 } 142 143 /* 144 * Result: QEMUFile* for a 'return path' for comms in the opposite direction 145 * NULL if not available 146 */ 147 QEMUFile *qemu_file_get_return_path(QEMUFile *f) 148 { 149 return qemu_file_new_impl(f->ioc, !f->is_writable); 150 } 151 152 QEMUFile *qemu_file_new_output(QIOChannel *ioc) 153 { 154 return qemu_file_new_impl(ioc, true); 155 } 156 157 QEMUFile *qemu_file_new_input(QIOChannel *ioc) 158 { 159 return qemu_file_new_impl(ioc, false); 160 } 161 162 void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks) 163 { 164 f->hooks = hooks; 165 } 166 167 /* 168 * Get last error for stream f with optional Error* 169 * 170 * Return negative error value if there has been an error on previous 171 * operations, return 0 if no error happened. 172 * Optional, it returns Error* in errp, but it may be NULL even if return value 173 * is not 0. 174 * 175 */ 176 int qemu_file_get_error_obj(QEMUFile *f, Error **errp) 177 { 178 if (errp) { 179 *errp = f->last_error_obj ? error_copy(f->last_error_obj) : NULL; 180 } 181 return f->last_error; 182 } 183 184 /* 185 * Get last error for either stream f1 or f2 with optional Error*. 186 * The error returned (non-zero) can be either from f1 or f2. 187 * 188 * If any of the qemufile* is NULL, then skip the check on that file. 189 * 190 * When there is no error on both qemufile, zero is returned. 191 */ 192 int qemu_file_get_error_obj_any(QEMUFile *f1, QEMUFile *f2, Error **errp) 193 { 194 int ret = 0; 195 196 if (f1) { 197 ret = qemu_file_get_error_obj(f1, errp); 198 /* If there's already error detected, return */ 199 if (ret) { 200 return ret; 201 } 202 } 203 204 if (f2) { 205 ret = qemu_file_get_error_obj(f2, errp); 206 } 207 208 return ret; 209 } 210 211 /* 212 * Set the last error for stream f with optional Error* 213 */ 214 void qemu_file_set_error_obj(QEMUFile *f, int ret, Error *err) 215 { 216 if (f->last_error == 0 && ret) { 217 f->last_error = ret; 218 error_propagate(&f->last_error_obj, err); 219 } else if (err) { 220 error_report_err(err); 221 } 222 } 223 224 /* 225 * Get last error for stream f 226 * 227 * Return negative error value if there has been an error on previous 228 * operations, return 0 if no error happened. 229 * 230 */ 231 int qemu_file_get_error(QEMUFile *f) 232 { 233 return qemu_file_get_error_obj(f, NULL); 234 } 235 236 /* 237 * Set the last error for stream f 238 */ 239 void qemu_file_set_error(QEMUFile *f, int ret) 240 { 241 qemu_file_set_error_obj(f, ret, NULL); 242 } 243 244 bool qemu_file_is_writable(QEMUFile *f) 245 { 246 return f->is_writable; 247 } 248 249 static void qemu_iovec_release_ram(QEMUFile *f) 250 { 251 struct iovec iov; 252 unsigned long idx; 253 254 /* Find and release all the contiguous memory ranges marked as may_free. */ 255 idx = find_next_bit(f->may_free, f->iovcnt, 0); 256 if (idx >= f->iovcnt) { 257 return; 258 } 259 iov = f->iov[idx]; 260 261 /* The madvise() in the loop is called for iov within a continuous range and 262 * then reinitialize the iov. And in the end, madvise() is called for the 263 * last iov. 264 */ 265 while ((idx = find_next_bit(f->may_free, f->iovcnt, idx + 1)) < f->iovcnt) { 266 /* check for adjacent buffer and coalesce them */ 267 if (iov.iov_base + iov.iov_len == f->iov[idx].iov_base) { 268 iov.iov_len += f->iov[idx].iov_len; 269 continue; 270 } 271 if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < 0) { 272 error_report("migrate: madvise DONTNEED failed %p %zd: %s", 273 iov.iov_base, iov.iov_len, strerror(errno)); 274 } 275 iov = f->iov[idx]; 276 } 277 if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < 0) { 278 error_report("migrate: madvise DONTNEED failed %p %zd: %s", 279 iov.iov_base, iov.iov_len, strerror(errno)); 280 } 281 memset(f->may_free, 0, sizeof(f->may_free)); 282 } 283 284 285 /** 286 * Flushes QEMUFile buffer 287 * 288 * This will flush all pending data. If data was only partially flushed, it 289 * will set an error state. 290 */ 291 void qemu_fflush(QEMUFile *f) 292 { 293 if (!qemu_file_is_writable(f)) { 294 return; 295 } 296 297 if (f->shutdown) { 298 return; 299 } 300 if (f->iovcnt > 0) { 301 Error *local_error = NULL; 302 if (qio_channel_writev_all(f->ioc, 303 f->iov, f->iovcnt, 304 &local_error) < 0) { 305 qemu_file_set_error_obj(f, -EIO, local_error); 306 } else { 307 f->total_transferred += iov_size(f->iov, f->iovcnt); 308 } 309 310 qemu_iovec_release_ram(f); 311 } 312 313 f->buf_index = 0; 314 f->iovcnt = 0; 315 } 316 317 void ram_control_before_iterate(QEMUFile *f, uint64_t flags) 318 { 319 int ret = 0; 320 321 if (f->hooks && f->hooks->before_ram_iterate) { 322 ret = f->hooks->before_ram_iterate(f, flags, NULL); 323 if (ret < 0) { 324 qemu_file_set_error(f, ret); 325 } 326 } 327 } 328 329 void ram_control_after_iterate(QEMUFile *f, uint64_t flags) 330 { 331 int ret = 0; 332 333 if (f->hooks && f->hooks->after_ram_iterate) { 334 ret = f->hooks->after_ram_iterate(f, flags, NULL); 335 if (ret < 0) { 336 qemu_file_set_error(f, ret); 337 } 338 } 339 } 340 341 void ram_control_load_hook(QEMUFile *f, uint64_t flags, void *data) 342 { 343 int ret = -EINVAL; 344 345 if (f->hooks && f->hooks->hook_ram_load) { 346 ret = f->hooks->hook_ram_load(f, flags, data); 347 if (ret < 0) { 348 qemu_file_set_error(f, ret); 349 } 350 } else { 351 /* 352 * Hook is a hook specifically requested by the source sending a flag 353 * that expects there to be a hook on the destination. 354 */ 355 if (flags == RAM_CONTROL_HOOK) { 356 qemu_file_set_error(f, ret); 357 } 358 } 359 } 360 361 size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, 362 ram_addr_t offset, size_t size, 363 uint64_t *bytes_sent) 364 { 365 if (f->hooks && f->hooks->save_page) { 366 int ret = f->hooks->save_page(f, block_offset, 367 offset, size, bytes_sent); 368 if (ret != RAM_SAVE_CONTROL_NOT_SUPP) { 369 f->rate_limit_used += size; 370 } 371 372 if (ret != RAM_SAVE_CONTROL_DELAYED && 373 ret != RAM_SAVE_CONTROL_NOT_SUPP) { 374 if (bytes_sent && *bytes_sent > 0) { 375 qemu_file_credit_transfer(f, *bytes_sent); 376 } else if (ret < 0) { 377 qemu_file_set_error(f, ret); 378 } 379 } 380 381 return ret; 382 } 383 384 return RAM_SAVE_CONTROL_NOT_SUPP; 385 } 386 387 /* 388 * Attempt to fill the buffer from the underlying file 389 * Returns the number of bytes read, or negative value for an error. 390 * 391 * Note that it can return a partially full buffer even in a not error/not EOF 392 * case if the underlying file descriptor gives a short read, and that can 393 * happen even on a blocking fd. 394 */ 395 static ssize_t coroutine_mixed_fn qemu_fill_buffer(QEMUFile *f) 396 { 397 int len; 398 int pending; 399 Error *local_error = NULL; 400 401 assert(!qemu_file_is_writable(f)); 402 403 pending = f->buf_size - f->buf_index; 404 if (pending > 0) { 405 memmove(f->buf, f->buf + f->buf_index, pending); 406 } 407 f->buf_index = 0; 408 f->buf_size = pending; 409 410 if (f->shutdown) { 411 return 0; 412 } 413 414 do { 415 len = qio_channel_read(f->ioc, 416 (char *)f->buf + pending, 417 IO_BUF_SIZE - pending, 418 &local_error); 419 if (len == QIO_CHANNEL_ERR_BLOCK) { 420 if (qemu_in_coroutine()) { 421 qio_channel_yield(f->ioc, G_IO_IN); 422 } else { 423 qio_channel_wait(f->ioc, G_IO_IN); 424 } 425 } else if (len < 0) { 426 len = -EIO; 427 } 428 } while (len == QIO_CHANNEL_ERR_BLOCK); 429 430 if (len > 0) { 431 f->buf_size += len; 432 f->total_transferred += len; 433 } else if (len == 0) { 434 qemu_file_set_error_obj(f, -EIO, local_error); 435 } else { 436 qemu_file_set_error_obj(f, len, local_error); 437 } 438 439 return len; 440 } 441 442 void qemu_file_credit_transfer(QEMUFile *f, size_t size) 443 { 444 f->total_transferred += size; 445 } 446 447 /** Closes the file 448 * 449 * Returns negative error value if any error happened on previous operations or 450 * while closing the file. Returns 0 or positive number on success. 451 * 452 * The meaning of return value on success depends on the specific backend 453 * being used. 454 */ 455 int qemu_fclose(QEMUFile *f) 456 { 457 int ret, ret2; 458 qemu_fflush(f); 459 ret = qemu_file_get_error(f); 460 461 ret2 = qio_channel_close(f->ioc, NULL); 462 if (ret >= 0) { 463 ret = ret2; 464 } 465 g_clear_pointer(&f->ioc, object_unref); 466 467 /* If any error was spotted before closing, we should report it 468 * instead of the close() return value. 469 */ 470 if (f->last_error) { 471 ret = f->last_error; 472 } 473 error_free(f->last_error_obj); 474 g_free(f); 475 trace_qemu_file_fclose(); 476 return ret; 477 } 478 479 /* 480 * Add buf to iovec. Do flush if iovec is full. 481 * 482 * Return values: 483 * 1 iovec is full and flushed 484 * 0 iovec is not flushed 485 * 486 */ 487 static int add_to_iovec(QEMUFile *f, const uint8_t *buf, size_t size, 488 bool may_free) 489 { 490 /* check for adjacent buffer and coalesce them */ 491 if (f->iovcnt > 0 && buf == f->iov[f->iovcnt - 1].iov_base + 492 f->iov[f->iovcnt - 1].iov_len && 493 may_free == test_bit(f->iovcnt - 1, f->may_free)) 494 { 495 f->iov[f->iovcnt - 1].iov_len += size; 496 } else { 497 if (f->iovcnt >= MAX_IOV_SIZE) { 498 /* Should only happen if a previous fflush failed */ 499 assert(f->shutdown || !qemu_file_is_writable(f)); 500 return 1; 501 } 502 if (may_free) { 503 set_bit(f->iovcnt, f->may_free); 504 } 505 f->iov[f->iovcnt].iov_base = (uint8_t *)buf; 506 f->iov[f->iovcnt++].iov_len = size; 507 } 508 509 if (f->iovcnt >= MAX_IOV_SIZE) { 510 qemu_fflush(f); 511 return 1; 512 } 513 514 return 0; 515 } 516 517 static void add_buf_to_iovec(QEMUFile *f, size_t len) 518 { 519 if (!add_to_iovec(f, f->buf + f->buf_index, len, false)) { 520 f->buf_index += len; 521 if (f->buf_index == IO_BUF_SIZE) { 522 qemu_fflush(f); 523 } 524 } 525 } 526 527 void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size, 528 bool may_free) 529 { 530 if (f->last_error) { 531 return; 532 } 533 534 f->rate_limit_used += size; 535 add_to_iovec(f, buf, size, may_free); 536 } 537 538 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size) 539 { 540 size_t l; 541 542 if (f->last_error) { 543 return; 544 } 545 546 while (size > 0) { 547 l = IO_BUF_SIZE - f->buf_index; 548 if (l > size) { 549 l = size; 550 } 551 memcpy(f->buf + f->buf_index, buf, l); 552 f->rate_limit_used += l; 553 add_buf_to_iovec(f, l); 554 if (qemu_file_get_error(f)) { 555 break; 556 } 557 buf += l; 558 size -= l; 559 } 560 } 561 562 void qemu_put_byte(QEMUFile *f, int v) 563 { 564 if (f->last_error) { 565 return; 566 } 567 568 f->buf[f->buf_index] = v; 569 f->rate_limit_used++; 570 add_buf_to_iovec(f, 1); 571 } 572 573 void qemu_file_skip(QEMUFile *f, int size) 574 { 575 if (f->buf_index + size <= f->buf_size) { 576 f->buf_index += size; 577 } 578 } 579 580 /* 581 * Read 'size' bytes from file (at 'offset') without moving the 582 * pointer and set 'buf' to point to that data. 583 * 584 * It will return size bytes unless there was an error, in which case it will 585 * return as many as it managed to read (assuming blocking fd's which 586 * all current QEMUFile are) 587 */ 588 size_t coroutine_mixed_fn qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t size, size_t offset) 589 { 590 ssize_t pending; 591 size_t index; 592 593 assert(!qemu_file_is_writable(f)); 594 assert(offset < IO_BUF_SIZE); 595 assert(size <= IO_BUF_SIZE - offset); 596 597 /* The 1st byte to read from */ 598 index = f->buf_index + offset; 599 /* The number of available bytes starting at index */ 600 pending = f->buf_size - index; 601 602 /* 603 * qemu_fill_buffer might return just a few bytes, even when there isn't 604 * an error, so loop collecting them until we get enough. 605 */ 606 while (pending < size) { 607 int received = qemu_fill_buffer(f); 608 609 if (received <= 0) { 610 break; 611 } 612 613 index = f->buf_index + offset; 614 pending = f->buf_size - index; 615 } 616 617 if (pending <= 0) { 618 return 0; 619 } 620 if (size > pending) { 621 size = pending; 622 } 623 624 *buf = f->buf + index; 625 return size; 626 } 627 628 /* 629 * Read 'size' bytes of data from the file into buf. 630 * 'size' can be larger than the internal buffer. 631 * 632 * It will return size bytes unless there was an error, in which case it will 633 * return as many as it managed to read (assuming blocking fd's which 634 * all current QEMUFile are) 635 */ 636 size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size) 637 { 638 size_t pending = size; 639 size_t done = 0; 640 641 while (pending > 0) { 642 size_t res; 643 uint8_t *src; 644 645 res = qemu_peek_buffer(f, &src, MIN(pending, IO_BUF_SIZE), 0); 646 if (res == 0) { 647 return done; 648 } 649 memcpy(buf, src, res); 650 qemu_file_skip(f, res); 651 buf += res; 652 pending -= res; 653 done += res; 654 } 655 return done; 656 } 657 658 /* 659 * Read 'size' bytes of data from the file. 660 * 'size' can be larger than the internal buffer. 661 * 662 * The data: 663 * may be held on an internal buffer (in which case *buf is updated 664 * to point to it) that is valid until the next qemu_file operation. 665 * OR 666 * will be copied to the *buf that was passed in. 667 * 668 * The code tries to avoid the copy if possible. 669 * 670 * It will return size bytes unless there was an error, in which case it will 671 * return as many as it managed to read (assuming blocking fd's which 672 * all current QEMUFile are) 673 * 674 * Note: Since **buf may get changed, the caller should take care to 675 * keep a pointer to the original buffer if it needs to deallocate it. 676 */ 677 size_t coroutine_mixed_fn qemu_get_buffer_in_place(QEMUFile *f, uint8_t **buf, size_t size) 678 { 679 if (size < IO_BUF_SIZE) { 680 size_t res; 681 uint8_t *src = NULL; 682 683 res = qemu_peek_buffer(f, &src, size, 0); 684 685 if (res == size) { 686 qemu_file_skip(f, res); 687 *buf = src; 688 return res; 689 } 690 } 691 692 return qemu_get_buffer(f, *buf, size); 693 } 694 695 /* 696 * Peeks a single byte from the buffer; this isn't guaranteed to work if 697 * offset leaves a gap after the previous read/peeked data. 698 */ 699 int coroutine_mixed_fn qemu_peek_byte(QEMUFile *f, int offset) 700 { 701 int index = f->buf_index + offset; 702 703 assert(!qemu_file_is_writable(f)); 704 assert(offset < IO_BUF_SIZE); 705 706 if (index >= f->buf_size) { 707 qemu_fill_buffer(f); 708 index = f->buf_index + offset; 709 if (index >= f->buf_size) { 710 return 0; 711 } 712 } 713 return f->buf[index]; 714 } 715 716 int coroutine_mixed_fn qemu_get_byte(QEMUFile *f) 717 { 718 int result; 719 720 result = qemu_peek_byte(f, 0); 721 qemu_file_skip(f, 1); 722 return result; 723 } 724 725 int64_t qemu_file_total_transferred_fast(QEMUFile *f) 726 { 727 int64_t ret = f->total_transferred; 728 int i; 729 730 for (i = 0; i < f->iovcnt; i++) { 731 ret += f->iov[i].iov_len; 732 } 733 734 return ret; 735 } 736 737 int64_t qemu_file_total_transferred(QEMUFile *f) 738 { 739 qemu_fflush(f); 740 return f->total_transferred; 741 } 742 743 int qemu_file_rate_limit(QEMUFile *f) 744 { 745 if (f->shutdown) { 746 return 1; 747 } 748 if (qemu_file_get_error(f)) { 749 return 1; 750 } 751 if (f->rate_limit_max > 0 && f->rate_limit_used > f->rate_limit_max) { 752 return 1; 753 } 754 return 0; 755 } 756 757 int64_t qemu_file_get_rate_limit(QEMUFile *f) 758 { 759 return f->rate_limit_max; 760 } 761 762 void qemu_file_set_rate_limit(QEMUFile *f, int64_t limit) 763 { 764 f->rate_limit_max = limit; 765 } 766 767 void qemu_file_reset_rate_limit(QEMUFile *f) 768 { 769 f->rate_limit_used = 0; 770 } 771 772 void qemu_file_acct_rate_limit(QEMUFile *f, int64_t len) 773 { 774 f->rate_limit_used += len; 775 } 776 777 void qemu_put_be16(QEMUFile *f, unsigned int v) 778 { 779 qemu_put_byte(f, v >> 8); 780 qemu_put_byte(f, v); 781 } 782 783 void qemu_put_be32(QEMUFile *f, unsigned int v) 784 { 785 qemu_put_byte(f, v >> 24); 786 qemu_put_byte(f, v >> 16); 787 qemu_put_byte(f, v >> 8); 788 qemu_put_byte(f, v); 789 } 790 791 void qemu_put_be64(QEMUFile *f, uint64_t v) 792 { 793 qemu_put_be32(f, v >> 32); 794 qemu_put_be32(f, v); 795 } 796 797 unsigned int qemu_get_be16(QEMUFile *f) 798 { 799 unsigned int v; 800 v = qemu_get_byte(f) << 8; 801 v |= qemu_get_byte(f); 802 return v; 803 } 804 805 unsigned int qemu_get_be32(QEMUFile *f) 806 { 807 unsigned int v; 808 v = (unsigned int)qemu_get_byte(f) << 24; 809 v |= qemu_get_byte(f) << 16; 810 v |= qemu_get_byte(f) << 8; 811 v |= qemu_get_byte(f); 812 return v; 813 } 814 815 uint64_t qemu_get_be64(QEMUFile *f) 816 { 817 uint64_t v; 818 v = (uint64_t)qemu_get_be32(f) << 32; 819 v |= qemu_get_be32(f); 820 return v; 821 } 822 823 /* return the size after compression, or negative value on error */ 824 static int qemu_compress_data(z_stream *stream, uint8_t *dest, size_t dest_len, 825 const uint8_t *source, size_t source_len) 826 { 827 int err; 828 829 err = deflateReset(stream); 830 if (err != Z_OK) { 831 return -1; 832 } 833 834 stream->avail_in = source_len; 835 stream->next_in = (uint8_t *)source; 836 stream->avail_out = dest_len; 837 stream->next_out = dest; 838 839 err = deflate(stream, Z_FINISH); 840 if (err != Z_STREAM_END) { 841 return -1; 842 } 843 844 return stream->next_out - dest; 845 } 846 847 /* Compress size bytes of data start at p and store the compressed 848 * data to the buffer of f. 849 * 850 * Since the file is dummy file with empty_ops, return -1 if f has no space to 851 * save the compressed data. 852 */ 853 ssize_t qemu_put_compression_data(QEMUFile *f, z_stream *stream, 854 const uint8_t *p, size_t size) 855 { 856 ssize_t blen = IO_BUF_SIZE - f->buf_index - sizeof(int32_t); 857 858 if (blen < compressBound(size)) { 859 return -1; 860 } 861 862 blen = qemu_compress_data(stream, f->buf + f->buf_index + sizeof(int32_t), 863 blen, p, size); 864 if (blen < 0) { 865 return -1; 866 } 867 868 qemu_put_be32(f, blen); 869 add_buf_to_iovec(f, blen); 870 return blen + sizeof(int32_t); 871 } 872 873 /* Put the data in the buffer of f_src to the buffer of f_des, and 874 * then reset the buf_index of f_src to 0. 875 */ 876 877 int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_src) 878 { 879 int len = 0; 880 881 if (f_src->buf_index > 0) { 882 len = f_src->buf_index; 883 qemu_put_buffer(f_des, f_src->buf, f_src->buf_index); 884 f_src->buf_index = 0; 885 f_src->iovcnt = 0; 886 } 887 return len; 888 } 889 890 /* 891 * Get a string whose length is determined by a single preceding byte 892 * A preallocated 256 byte buffer must be passed in. 893 * Returns: len on success and a 0 terminated string in the buffer 894 * else 0 895 * (Note a 0 length string will return 0 either way) 896 */ 897 size_t coroutine_fn qemu_get_counted_string(QEMUFile *f, char buf[256]) 898 { 899 size_t len = qemu_get_byte(f); 900 size_t res = qemu_get_buffer(f, (uint8_t *)buf, len); 901 902 buf[res] = 0; 903 904 return res == len ? res : 0; 905 } 906 907 /* 908 * Put a string with one preceding byte containing its length. The length of 909 * the string should be less than 256. 910 */ 911 void qemu_put_counted_string(QEMUFile *f, const char *str) 912 { 913 size_t len = strlen(str); 914 915 assert(len < 256); 916 qemu_put_byte(f, len); 917 qemu_put_buffer(f, (const uint8_t *)str, len); 918 } 919 920 /* 921 * Set the blocking state of the QEMUFile. 922 * Note: On some transports the OS only keeps a single blocking state for 923 * both directions, and thus changing the blocking on the main 924 * QEMUFile can also affect the return path. 925 */ 926 void qemu_file_set_blocking(QEMUFile *f, bool block) 927 { 928 qio_channel_set_blocking(f->ioc, block, NULL); 929 } 930 931 /* 932 * qemu_file_get_ioc: 933 * 934 * Get the ioc object for the file, without incrementing 935 * the reference count. 936 * 937 * Returns: the ioc object 938 */ 939 QIOChannel *qemu_file_get_ioc(QEMUFile *file) 940 { 941 return file->ioc; 942 } 943 944 /* 945 * Read size bytes from QEMUFile f and write them to fd. 946 */ 947 int qemu_file_get_to_fd(QEMUFile *f, int fd, size_t size) 948 { 949 while (size) { 950 size_t pending = f->buf_size - f->buf_index; 951 ssize_t rc; 952 953 if (!pending) { 954 rc = qemu_fill_buffer(f); 955 if (rc < 0) { 956 return rc; 957 } 958 if (rc == 0) { 959 return -EIO; 960 } 961 continue; 962 } 963 964 rc = write(fd, f->buf + f->buf_index, MIN(pending, size)); 965 if (rc < 0) { 966 return -errno; 967 } 968 if (rc == 0) { 969 return -EIO; 970 } 971 f->buf_index += rc; 972 size -= rc; 973 } 974 975 return 0; 976 } 977