Commit e8445331b61e3d253665e03d0b376e464216806f
1 parent
8f447cc7
show real allocated disk image size on Windows (Frediano Ziglio)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1973 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
16 additions
and
0 deletions
qemu-img.c
| ... | ... | @@ -23,6 +23,10 @@ |
| 23 | 23 | */ |
| 24 | 24 | #include "vl.h" |
| 25 | 25 | |
| 26 | +#ifdef _WIN32 | |
| 27 | +#include <windows.h> | |
| 28 | +#endif | |
| 29 | + | |
| 26 | 30 | void *get_mmap_addr(unsigned long size) |
| 27 | 31 | { |
| 28 | 32 | return NULL; |
| ... | ... | @@ -598,7 +602,19 @@ static int img_convert(int argc, char **argv) |
| 598 | 602 | #ifdef _WIN32 |
| 599 | 603 | static int64_t get_allocated_file_size(const char *filename) |
| 600 | 604 | { |
| 605 | + typedef DWORD (WINAPI * get_compressed_t)(const char *filename, DWORD *high); | |
| 606 | + get_compressed_t get_compressed; | |
| 601 | 607 | struct _stati64 st; |
| 608 | + | |
| 609 | + /* WinNT support GetCompressedFileSize to determine allocate size */ | |
| 610 | + get_compressed = (get_compressed_t) GetProcAddress(GetModuleHandle("kernel32"), "GetCompressedFileSizeA"); | |
| 611 | + if (get_compressed) { | |
| 612 | + DWORD high, low; | |
| 613 | + low = get_compressed(filename, &high); | |
| 614 | + if (low != 0xFFFFFFFFlu || GetLastError() == NO_ERROR) | |
| 615 | + return (((int64_t) high) << 32) + low; | |
| 616 | + } | |
| 617 | + | |
| 602 | 618 | if (_stati64(filename, &st) < 0) |
| 603 | 619 | return -1; |
| 604 | 620 | return st.st_size; | ... | ... |