From 1513c92cbc7ee75c1947bab0aba6c0403b4a9c7f Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Tue, 13 Sep 2016 17:36:28 -0400 Subject: [PATCH] abstract posix_fadvise --- src/fs_clonefile.cpp | 5 ++-- src/fs_fadvise.cpp | 23 ++++++++++++++ src/fs_fadvise.hpp | 53 +++++++++++++++++++++++++++++++++ src/fs_fadvise_posix.icpp | 29 ++++++++++++++++++ src/fs_fadvise_unsupported.icpp | 29 ++++++++++++++++++ 5 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 src/fs_fadvise.cpp create mode 100644 src/fs_fadvise.hpp create mode 100644 src/fs_fadvise_posix.icpp create mode 100644 src/fs_fadvise_unsupported.icpp diff --git a/src/fs_clonefile.cpp b/src/fs_clonefile.cpp index 8180f325..d23554ee 100644 --- a/src/fs_clonefile.cpp +++ b/src/fs_clonefile.cpp @@ -25,6 +25,7 @@ #include #include "fs_attr.hpp" +#include "fs_fadvise.hpp" #include "fs_fallocate.hpp" #include "fs_sendfile.hpp" #include "fs_time.hpp" @@ -109,8 +110,8 @@ namespace fs { int rv; - ::posix_fadvise(fdin,0,count,POSIX_FADV_WILLNEED); - ::posix_fadvise(fdin,0,count,POSIX_FADV_SEQUENTIAL); + fs::fadvise(fdin,0,count,POSIX_FADV_WILLNEED); + fs::fadvise(fdin,0,count,POSIX_FADV_SEQUENTIAL); fs::fallocate(fdout,0,0,count); diff --git a/src/fs_fadvise.cpp b/src/fs_fadvise.cpp new file mode 100644 index 00000000..e0ddb265 --- /dev/null +++ b/src/fs_fadvise.cpp @@ -0,0 +1,23 @@ +/* + Copyright (c) 2016, Antonio SJ Musumeci + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include + +#if _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L +# include "fs_fadvise_posix.icpp" +#else +# include "fs_fadvise_unsupported.icpp" +#endif diff --git a/src/fs_fadvise.hpp b/src/fs_fadvise.hpp new file mode 100644 index 00000000..c89cd14e --- /dev/null +++ b/src/fs_fadvise.hpp @@ -0,0 +1,53 @@ +/* + Copyright (c) 2016, Antonio SJ Musumeci + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef __FS_FADVISE_HPP__ +#define __FS_FADVISE_HPP__ + +#ifndef POSIX_FADV_NORMAL +# define POSIX_FADV_NORMAL 0 +#endif + +#ifndef POSIX_FADV_RANDOM +# define POSIX_FADV_NORMAL 1 +#endif + +#ifndef POSIX_FADV_SEQUENTIAL +# define POSIX_FADV_SEQUENTIAL 2 +#endif + +#ifndef POSIX_FADV_WILLNEED +# define POSIX_FADV_WILLNEED 3 +#endif + +#ifndef POSIX_FADV_DONTNEED +# define POSIX_FADV_DONTNEED 4 +#endif + +#ifndef POSIX_FADV_NOREUSE +# define POSIX_FADV_NOREUSE 5 +#endif + +namespace fs +{ + int + fadvise(const int fd, + const off_t offset, + const off_t len, + const int advice); +} + +#endif // __FS_FADVISE_HPP__ diff --git a/src/fs_fadvise_posix.icpp b/src/fs_fadvise_posix.icpp new file mode 100644 index 00000000..c2585daf --- /dev/null +++ b/src/fs_fadvise_posix.icpp @@ -0,0 +1,29 @@ +/* + Copyright (c) 2016, Antonio SJ Musumeci + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include + +namespace fs +{ + int + fadvise(const int fd, + const off_t offset, + const off_t len, + const int advice) + { + return ::posix_fadvise(fd,offset,len,advice); + } +} diff --git a/src/fs_fadvise_unsupported.icpp b/src/fs_fadvise_unsupported.icpp new file mode 100644 index 00000000..c36ab5e8 --- /dev/null +++ b/src/fs_fadvise_unsupported.icpp @@ -0,0 +1,29 @@ +/* + Copyright (c) 2016, Antonio SJ Musumeci + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include + +namespace fs +{ + int + fadvise(const int fd, + const off_t offset, + const off_t len, + const int advice) + { + return (errno=EOPNOTSUPP,-1); + } +}