Commit 3b9f94e1a8757ac223a51c662e4278aab738f0cd

Authored by bellard
1 parent f5e25d70

win32 block device fixes (initial patch by kazu)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2305 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 40 additions and 16 deletions
block-raw.c
... ... @@ -906,13 +906,13 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags)
906 906 create_flags = OPEN_EXISTING;
907 907 }
908 908 #ifdef QEMU_TOOL
909   - overlapped = 0;
  909 + overlapped = FILE_ATTRIBUTE_NORMAL;
910 910 #else
911 911 overlapped = FILE_FLAG_OVERLAPPED;
912 912 #endif
913 913 s->hfile = CreateFile(filename, access_flags,
914 914 FILE_SHARE_READ, NULL,
915   - create_flags, overlapped, 0);
  915 + create_flags, overlapped, NULL);
916 916 if (s->hfile == INVALID_HANDLE_VALUE)
917 917 return -1;
918 918 return 0;
... ... @@ -962,6 +962,7 @@ static int raw_pwrite(BlockDriverState *bs, int64_t offset,
962 962 return ret_count;
963 963 }
964 964  
  965 +#if 0
965 966 #ifndef QEMU_TOOL
966 967 static void raw_aio_cb(void *opaque)
967 968 {
... ... @@ -1064,10 +1065,12 @@ static void raw_aio_cancel(BlockDriverAIOCB *blockacb)
1064 1065 qemu_aio_release(acb);
1065 1066 #endif
1066 1067 }
  1068 +#endif /* #if 0 */
1067 1069  
1068 1070 static void raw_flush(BlockDriverState *bs)
1069 1071 {
1070   - /* XXX: add it */
  1072 + BDRVRawState *s = bs->opaque;
  1073 + FlushFileBuffers(s->hfile);
1071 1074 }
1072 1075  
1073 1076 static void raw_close(BlockDriverState *bs)
... ... @@ -1143,6 +1146,10 @@ void qemu_aio_flush(void)
1143 1146 {
1144 1147 }
1145 1148  
  1149 +void qemu_aio_flush(void)
  1150 +{
  1151 +}
  1152 +
1146 1153 void qemu_aio_wait_start(void)
1147 1154 {
1148 1155 }
... ... @@ -1254,13 +1261,13 @@ static int hdev_open(BlockDriverState *bs, const char *filename, int flags)
1254 1261 create_flags = OPEN_EXISTING;
1255 1262  
1256 1263 #ifdef QEMU_TOOL
1257   - overlapped = 0;
  1264 + overlapped = FILE_ATTRIBUTE_NORMAL;
1258 1265 #else
1259 1266 overlapped = FILE_FLAG_OVERLAPPED;
1260 1267 #endif
1261 1268 s->hfile = CreateFile(filename, access_flags,
1262 1269 FILE_SHARE_READ, NULL,
1263   - create_flags, overlapped, 0);
  1270 + create_flags, overlapped, NULL);
1264 1271 if (s->hfile == INVALID_HANDLE_VALUE)
1265 1272 return -1;
1266 1273 return 0;
... ...
... ... @@ -56,12 +56,6 @@ static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num,
56 56 static BlockDriverState *bdrv_first;
57 57 static BlockDriver *first_drv;
58 58  
59   -#ifdef _WIN32
60   -#define PATH_SEP '\\'
61   -#else
62   -#define PATH_SEP '/'
63   -#endif
64   -
65 59 int path_is_absolute(const char *path)
66 60 {
67 61 const char *p;
... ... @@ -70,7 +64,11 @@ int path_is_absolute(const char *path)
70 64 p++;
71 65 else
72 66 p = path;
73   - return (*p == PATH_SEP);
  67 +#ifdef _WIN32
  68 + return (*p == '/' || *p == '\\');
  69 +#else
  70 + return (*p == '/');
  71 +#endif
74 72 }
75 73  
76 74 /* if filename is absolute, just copy it to dest. Otherwise, build a
... ... @@ -93,7 +91,15 @@ void path_combine(char *dest, int dest_size,
93 91 p++;
94 92 else
95 93 p = base_path;
96   - p1 = strrchr(base_path, PATH_SEP);
  94 + p1 = strrchr(base_path, '/');
  95 +#ifdef _WIN32
  96 + {
  97 + const char *p2;
  98 + p2 = strrchr(base_path, '\\');
  99 + if (!p1 || p2 > p1)
  100 + p1 = p2;
  101 + }
  102 +#endif
97 103 if (p1)
98 104 p1++;
99 105 else
... ... @@ -168,7 +174,10 @@ int bdrv_create(BlockDriver *drv,
168 174 #ifdef _WIN32
169 175 void get_tmp_filename(char *filename, int size)
170 176 {
171   - tmpnam(filename);
  177 + char temp_dir[MAX_PATH];
  178 +
  179 + GetTempPath(MAX_PATH, temp_dir);
  180 + GetTempFileName(temp_dir, "qem", 0, filename);
172 181 }
173 182 #else
174 183 void get_tmp_filename(char *filename, int size)
... ... @@ -996,7 +1005,11 @@ char *get_human_readable_size(char *buf, int buf_size, int64_t size)
996 1005 char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn)
997 1006 {
998 1007 char buf1[128], date_buf[128], clock_buf[128];
  1008 +#ifdef _WIN32
  1009 + struct tm *ptm;
  1010 +#else
999 1011 struct tm tm;
  1012 +#endif
1000 1013 time_t ti;
1001 1014 int64_t secs;
1002 1015  
... ... @@ -1006,11 +1019,15 @@ char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn)
1006 1019 "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK");
1007 1020 } else {
1008 1021 ti = sn->date_sec;
1009   -#ifndef _WIN32
  1022 +#ifdef _WIN32
  1023 + ptm = localtime(&ti);
  1024 + strftime(date_buf, sizeof(date_buf),
  1025 + "%Y-%m-%d %H:%M:%S", ptm);
  1026 +#else
1010 1027 localtime_r(&ti, &tm);
1011   -#endif
1012 1028 strftime(date_buf, sizeof(date_buf),
1013 1029 "%Y-%m-%d %H:%M:%S", &tm);
  1030 +#endif
1014 1031 secs = sn->vm_clock_nsec / 1000000000;
1015 1032 snprintf(clock_buf, sizeof(clock_buf),
1016 1033 "%02d:%02d:%02d.%03d",
... ...