diff --git a/setup.py b/setup.py index 95c31fe02..dd42245af 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ except ImportError: multiprocessing = None from setuptools.command.build_ext import build_ext -from setuptools import setup, find_packages, Extension, Command +from setuptools import setup, find_namespace_packages, Extension, Command from setuptools.command.sdist import sdist try: @@ -292,7 +292,7 @@ setup( 'Topic :: Security :: Cryptography', 'Topic :: System :: Archiving :: Backup', ], - packages=find_packages('src'), + packages=find_namespace_packages('src'), package_dir={'': 'src'}, zip_safe=False, entry_points={ diff --git a/src/borg/_chunker.c b/src/borg/_chunker.c index 75599c5b1..dd141e87b 100644 --- a/src/borg/_chunker.c +++ b/src/borg/_chunker.c @@ -154,8 +154,6 @@ static int chunker_fill(Chunker *c) { ssize_t n; - off_t offset, length; - int overshoot; PyObject *data; PyThreadState *thread_state; @@ -169,7 +167,10 @@ chunker_fill(Chunker *c) if(c->fh >= 0) { thread_state = PyEval_SaveThread(); - offset = c->bytes_read; + #if ( ( _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L ) && defined(POSIX_FADV_DONTNEED) ) + off_t offset = c->bytes_read; + #endif + // if we have a os-level file descriptor, use os-level API n = read(c->fh, c->data + c->position + c->remaining, n); if(n > 0) { @@ -186,8 +187,8 @@ chunker_fill(Chunker *c) PyErr_SetFromErrno(PyExc_OSError); return 0; } - length = c->bytes_read - offset; #if ( ( _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L ) && defined(POSIX_FADV_DONTNEED) ) + off_t length = c->bytes_read - offset; // Only do it once per run. if (pagemask == 0) @@ -200,6 +201,7 @@ chunker_fill(Chunker *c) // for the OS or other processes. // We rollback the initial offset back to the start of the page, // to avoid it not being truncated as a partial page request. + int overshoot; if (length > 0) { // All Linux kernels (at least up to and including 4.6(.0)) have a bug where // they truncate last partial page of POSIX_FADV_DONTNEED request, so we need