some file fixes
This commit is contained in:
@@ -158,12 +158,16 @@ namespace libtorrent
|
|||||||
{GENERIC_WRITE, FILE_SHARE_READ, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS},
|
{GENERIC_WRITE, FILE_SHARE_READ, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS},
|
||||||
// read_write
|
// read_write
|
||||||
{GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS},
|
{GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS},
|
||||||
|
// invalid option
|
||||||
|
{0,0,0,0},
|
||||||
// read_only no_buffer
|
// read_only no_buffer
|
||||||
{GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
{GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
||||||
// write_only no_buffer
|
// write_only no_buffer
|
||||||
{GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
{GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
||||||
// read_write no_buffer
|
// read_write no_buffer
|
||||||
{GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
{GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING },
|
||||||
|
// invalid option
|
||||||
|
{0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const static DWORD attrib_array[] =
|
const static DWORD attrib_array[] =
|
||||||
@@ -180,6 +184,7 @@ namespace libtorrent
|
|||||||
m_path = utf8_native(path.external_file_string());
|
m_path = utf8_native(path.external_file_string());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
TORRENT_ASSERT((mode & mode_mask) < sizeof(mode_array)/sizeof(mode_array[0]));
|
||||||
open_mode_t const& m = mode_array[mode & mode_mask];
|
open_mode_t const& m = mode_array[mode & mode_mask];
|
||||||
DWORD a = attrib_array[(mode & attribute_mask) >> 12];
|
DWORD a = attrib_array[(mode & attribute_mask) >> 12];
|
||||||
|
|
||||||
@@ -747,7 +752,7 @@ namespace libtorrent
|
|||||||
ec = error_code(GetLastError(), get_system_category());
|
ec = error_code(GetLastError(), get_system_category());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ((mode & sparse) == 0)
|
if ((m_open_mode & sparse) == 0)
|
||||||
{
|
{
|
||||||
// if the user has permissions, avoid filling
|
// if the user has permissions, avoid filling
|
||||||
// the file with zeroes, but just fill it with
|
// the file with zeroes, but just fill it with
|
||||||
|
@@ -90,7 +90,7 @@ namespace libtorrent
|
|||||||
e.mode = m;
|
e.mode = m;
|
||||||
}
|
}
|
||||||
pt.replace(i, e);
|
pt.replace(i, e);
|
||||||
TORRENT_ASSERT((e.mode & ~file::rw_mask) == (m & ~file::rw_mask));
|
TORRENT_ASSERT((e.mode & file::no_buffer) == (m & file::no_buffer));
|
||||||
return e.file_ptr;
|
return e.file_ptr;
|
||||||
}
|
}
|
||||||
// the file is not in our cache
|
// the file is not in our cache
|
||||||
|
Reference in New Issue
Block a user