Revision 6a8dc042 block/raw-win32.c
b/block/raw-win32.c | ||
---|---|---|
77 | 77 |
NULL, 0, NULL, 0, &returned, NULL); |
78 | 78 |
} |
79 | 79 |
|
80 |
static void raw_parse_flags(int flags, int *access_flags, DWORD *overlapped) |
|
81 |
{ |
|
82 |
assert(access_flags != NULL); |
|
83 |
assert(overlapped != NULL); |
|
84 |
|
|
85 |
if (flags & BDRV_O_RDWR) { |
|
86 |
*access_flags = GENERIC_READ | GENERIC_WRITE; |
|
87 |
} else { |
|
88 |
*access_flags = GENERIC_READ; |
|
89 |
} |
|
90 |
|
|
91 |
*overlapped = FILE_ATTRIBUTE_NORMAL; |
|
92 |
if (flags & BDRV_O_NOCACHE) { |
|
93 |
*overlapped |= FILE_FLAG_NO_BUFFERING; |
|
94 |
} |
|
95 |
if (!(flags & BDRV_O_CACHE_WB)) { |
|
96 |
*overlapped |= FILE_FLAG_WRITE_THROUGH; |
|
97 |
} |
|
98 |
} |
|
99 |
|
|
80 | 100 |
static int raw_open(BlockDriverState *bs, const char *filename, int flags) |
81 | 101 |
{ |
82 | 102 |
BDRVRawState *s = bs->opaque; |
... | ... | |
85 | 105 |
|
86 | 106 |
s->type = FTYPE_FILE; |
87 | 107 |
|
88 |
if (flags & BDRV_O_RDWR) { |
|
89 |
access_flags = GENERIC_READ | GENERIC_WRITE; |
|
90 |
} else { |
|
91 |
access_flags = GENERIC_READ; |
|
92 |
} |
|
108 |
raw_parse_flags(flags, &access_flags, &overlapped); |
|
93 | 109 |
|
94 |
overlapped = FILE_ATTRIBUTE_NORMAL; |
|
95 |
if (flags & BDRV_O_NOCACHE) |
|
96 |
overlapped |= FILE_FLAG_NO_BUFFERING; |
|
97 |
if (!(flags & BDRV_O_CACHE_WB)) |
|
98 |
overlapped |= FILE_FLAG_WRITE_THROUGH; |
|
99 | 110 |
s->hfile = CreateFile(filename, access_flags, |
100 | 111 |
FILE_SHARE_READ, NULL, |
101 | 112 |
OPEN_EXISTING, overlapped, NULL); |
... | ... | |
374 | 385 |
} |
375 | 386 |
s->type = find_device_type(bs, filename); |
376 | 387 |
|
377 |
if (flags & BDRV_O_RDWR) { |
|
378 |
access_flags = GENERIC_READ | GENERIC_WRITE; |
|
379 |
} else { |
|
380 |
access_flags = GENERIC_READ; |
|
381 |
} |
|
388 |
raw_parse_flags(flags, &access_flags, &overlapped); |
|
389 |
|
|
382 | 390 |
create_flags = OPEN_EXISTING; |
383 | 391 |
|
384 |
overlapped = FILE_ATTRIBUTE_NORMAL; |
|
385 |
if (flags & BDRV_O_NOCACHE) |
|
386 |
overlapped |= FILE_FLAG_NO_BUFFERING; |
|
387 |
if (!(flags & BDRV_O_CACHE_WB)) |
|
388 |
overlapped |= FILE_FLAG_WRITE_THROUGH; |
|
389 | 392 |
s->hfile = CreateFile(filename, access_flags, |
390 | 393 |
FILE_SHARE_READ, NULL, |
391 | 394 |
create_flags, overlapped, NULL); |
Also available in: Unified diff