X-Git-Url: http://git.maemo.org/git/?p=qemu;a=blobdiff_plain;f=qemu%2Fqemu-img.c;h=c5a8e1a61ca19e09d94f34fbf79584d05de6dc4d;hp=3a18c93254ed9662e49da75477a72424720004ac;hb=534292fea694c0ce3060be20fbd715d0d6bfe3f0;hpb=06633c6c121db6ca47f43199688e590f3932ce41 diff --git a/qemu/qemu-img.c b/qemu/qemu-img.c index 3a18c93..c5a8e1a 100644 --- a/qemu/qemu-img.c +++ b/qemu/qemu-img.c @@ -23,6 +23,10 @@ */ #include "vl.h" +#ifdef _WIN32 +#include +#endif + void *get_mmap_addr(unsigned long size) { return NULL; @@ -160,12 +164,12 @@ void help(void) static void get_human_readable_size(char *buf, int buf_size, int64_t size) { - char suffixes[NB_SUFFIXES] = "KMGT"; + static const char suffixes[NB_SUFFIXES] = "KMGT"; int64_t base; int i; if (size <= 999) { - snprintf(buf, buf_size, "%lld", (long long) size); + snprintf(buf, buf_size, "%" PRId64, size); } else { base = 1024; for(i = 0; i < NB_SUFFIXES; i++) { @@ -175,8 +179,8 @@ static void get_human_readable_size(char *buf, int buf_size, int64_t size) suffixes[i]); break; } else if (size < (1000 * base) || i == (NB_SUFFIXES - 1)) { - snprintf(buf, buf_size, "%lld%c", - (long long) ((size + (base >> 1)) / base), + snprintf(buf, buf_size, "%" PRId64 "%c", + ((size + (base >> 1)) / base), suffixes[i]); break; } @@ -369,7 +373,7 @@ static int img_create(int argc, char **argv) printf(", backing_file=%s", base_filename); } - printf(", size=%lld kB\n", (long long) (size / 1024)); + printf(", size=%" PRId64 " kB\n", (int64_t) (size / 1024)); ret = bdrv_create(drv, filename, size / 512, base_filename, encrypted); if (ret < 0) { if (ret == -ENOTSUP) { @@ -559,7 +563,8 @@ static int img_convert(int argc, char **argv) memset(buf + n * 512, 0, cluster_size - n * 512); if (is_not_zero(buf, cluster_size)) { if (qcow_compress_cluster(out_bs, sector_num, buf) != 0) - error("error while compressing sector %lld", sector_num); + error("error while compressing sector %" PRId64, + sector_num); } sector_num += n; } @@ -598,7 +603,19 @@ static int img_convert(int argc, char **argv) #ifdef _WIN32 static int64_t get_allocated_file_size(const char *filename) { + typedef DWORD (WINAPI * get_compressed_t)(const char *filename, DWORD *high); + get_compressed_t get_compressed; struct _stati64 st; + + /* WinNT support GetCompressedFileSize to determine allocate size */ + get_compressed = (get_compressed_t) GetProcAddress(GetModuleHandle("kernel32"), "GetCompressedFileSizeA"); + if (get_compressed) { + DWORD high, low; + low = get_compressed(filename, &high); + if (low != 0xFFFFFFFFlu || GetLastError() == NO_ERROR) + return (((int64_t) high) << 32) + low; + } + if (_stati64(filename, &st) < 0) return -1; return st.st_size; @@ -664,10 +681,10 @@ static int img_info(int argc, char **argv) allocated_size); printf("image: %s\n" "file format: %s\n" - "virtual size: %s (%lld bytes)\n" + "virtual size: %s (%" PRId64 " bytes)\n" "disk size: %s\n", filename, fmt_name, size_buf, - (long long) (total_sectors * 512), + (total_sectors * 512), dsize_buf); if (bdrv_is_encrypted(bs)) printf("encrypted: yes\n");