forked from premiere/premiere-libtorrent
improved fallocate support
This commit is contained in:
parent
8c60c75547
commit
55aea5b863
|
@ -93,6 +93,7 @@
|
||||||
* only keeps one outstanding duplicate request per peer
|
* only keeps one outstanding duplicate request per peer
|
||||||
reduces waste download, specifically when streaming
|
reduces waste download, specifically when streaming
|
||||||
* added support for storing per-peer rate limits across reconnects
|
* added support for storing per-peer rate limits across reconnects
|
||||||
|
* improved fallocate support
|
||||||
|
|
||||||
* disabled feature to drop requests after having been skipped too many times
|
* disabled feature to drop requests after having been skipped too many times
|
||||||
* fixed range request bug for files larger than 2 GB in web seeds
|
* fixed range request bug for files larger than 2 GB in web seeds
|
||||||
|
|
16
src/file.cpp
16
src/file.cpp
|
@ -76,6 +76,15 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <linux/fiemap.h>
|
#include <linux/fiemap.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <linux/falloc.h>
|
||||||
|
#include <asm/unistd_64.h> // For __NR_fallocate
|
||||||
|
|
||||||
|
// circumvent the lack of support in glibc
|
||||||
|
static int fallocate(int fd, int mode, loff_t offset, loff_t len)
|
||||||
|
{
|
||||||
|
return syscall(__NR_fallocate, fd, mode, offset, len);
|
||||||
|
}
|
||||||
|
|
||||||
#elif defined __APPLE__ && defined __MACH__
|
#elif defined __APPLE__ && defined __MACH__
|
||||||
// mac specifics
|
// mac specifics
|
||||||
|
|
||||||
|
@ -1439,6 +1448,13 @@ namespace libtorrent
|
||||||
ec.assign(errno, get_posix_category());
|
ec.assign(errno, get_posix_category());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#elif defined TORRENT_LINUX
|
||||||
|
int ret = fallocate(m_fd, FALLOC_FL_KEEP_SIZE, 0, s);
|
||||||
|
if (ret != 0 && ret != EOPNOTSUPP && errno != ENOSYS)
|
||||||
|
{
|
||||||
|
ec.assign(ret, get_posix_category());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#elif TORRENT_HAS_FALLOCATE
|
#elif TORRENT_HAS_FALLOCATE
|
||||||
int ret = posix_fallocate(m_fd, 0, s);
|
int ret = posix_fallocate(m_fd, 0, s);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
|
|
Loading…
Reference in New Issue