diff options
author | David Robillard <d@drobilla.net> | 2011-12-11 21:37:05 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-12-11 21:37:05 +0000 |
commit | e08decb5992d6511e6896939a4cd9ad157831b78 (patch) | |
tree | 5c2cfb7089e7dca124840d703a71e3bff92f2ab1 | |
parent | 6e4a3a9ea93155e74da4b00fd7cf1b88b2d08f5f (diff) | |
download | serd-e08decb5992d6511e6896939a4cd9ad157831b78.tar.gz serd-e08decb5992d6511e6896939a4cd9ad157831b78.tar.bz2 serd-e08decb5992d6511e6896939a4cd9ad157831b78.zip |
Use posix_fadvise to advise about sequential file access.
git-svn-id: http://svn.drobilla.net/serd/trunk@243 490d8e77-9747-427b-9fa3-0b8f29cee8a0
-rw-r--r-- | src/reader.c | 9 | ||||
-rw-r--r-- | src/serdi.c | 9 | ||||
-rw-r--r-- | wscript | 14 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/reader.c b/src/reader.c index 42c5093f..68b5446d 100644 --- a/src/reader.c +++ b/src/reader.c @@ -25,6 +25,10 @@ #include <stdlib.h> #include <string.h> +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) +# include <fcntl.h> +#endif + #include "serd_internal.h" #include "serd-config.h" @@ -1485,7 +1489,6 @@ serd_reader_get_handle(const SerdReader* reader) { return reader->handle; } - SERD_API void serd_reader_add_blank_prefix(SerdReader* reader, @@ -1518,6 +1521,10 @@ serd_reader_read_file(SerdReader* reader, fprintf(stderr, "Error opening file %s (%s)\n", path, strerror(errno)); return SERD_ERR_UNKNOWN; } +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) + posix_fadvise(fileno(fd), 0, 0, POSIX_FADV_SEQUENTIAL); +#endif + SerdStatus ret = serd_reader_read_file_handle(reader, fd, path); fclose(fd); return ret; diff --git a/src/serdi.c b/src/serdi.c index c8bb9242..b3261eac 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -14,11 +14,17 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#define _POSIX_C_SOURCE 201112L /* for posix_memalign */ + #include <assert.h> #include <errno.h> #include <stdlib.h> #include <string.h> +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) +# include <fcntl.h> +#endif + #include "serd/serd.h" #include "serd-config.h" @@ -176,6 +182,9 @@ main(int argc, char** argv) input, strerror(errno)); return 1; } +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) + posix_fadvise(fileno(in_fd), 0, 0, POSIX_FADV_SEQUENTIAL); +#endif } } @@ -66,6 +66,20 @@ def configure(conf): cflags='-D_POSIX_C_SOURCE=201112L', mandatory=False) + # Check for posix_fadvise + conf.check(function_name='posix_fadvise', + header_name='fcntl.h', + define_name='HAVE_POSIX_FADVISE', + cflags='-D_POSIX_C_SOURCE=201112L', + mandatory=False) + + # Check for fileno + conf.check(function_name='fileno', + header_name='stdio.h', + define_name='HAVE_FILENO', + cflags='-D_POSIX_C_SOURCE=201112L', + mandatory=False) + autowaf.define(conf, 'SERD_VERSION', SERD_VERSION) conf.write_config_header('serd-config.h', remove=False) |