From ea1936a594d7e4e656731223b76d355fc5431ef9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 11 Dec 2011 22:11:22 +0000 Subject: Move all #ifdef gunk to serd_internal.h. Centralise file open and buffer allocation to localize platform tweaks. git-svn-id: http://svn.drobilla.net/serd/trunk@244 490d8e77-9747-427b-9fa3-0b8f29cee8a0 --- src/serd_internal.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/serd_internal.h') diff --git a/src/serd_internal.h b/src/serd_internal.h index f5f0f3b4..bf1f630f 100644 --- a/src/serd_internal.h +++ b/src/serd_internal.h @@ -17,13 +17,49 @@ #ifndef SERD_INTERNAL_H #define SERD_INTERNAL_H +#define _POSIX_C_SOURCE 201112L /* for posix_memalign and posix_fadvise */ + #include +#include +#include #include +#include #include "serd/serd.h" +#include "serd-config.h" + +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) +# include +#endif #define SERD_PAGE_SIZE 4096 +static inline FILE* +serd_fopen(const char* path, const char* mode) +{ + FILE* fd = fopen((const char*)path, mode); + if (!fd) { + fprintf(stderr, "Error opening file %s (%s)\n", path, strerror(errno)); + return NULL; + } +#if defined(HAVE_POSIX_FADVISE) && defined(HAVE_FILENO) + posix_fadvise(fileno(fd), 0, 0, POSIX_FADV_SEQUENTIAL); +#endif + return fd; +} + +static inline void* +serd_bufalloc(size_t size) +{ +#ifdef HAVE_POSIX_MEMALIGN + void* ptr; + posix_memalign(&ptr, SERD_PAGE_SIZE, size); + return ptr; +#else + return malloc(size); +#endif +} + /** A dynamic stack in memory. */ typedef struct { uint8_t* buf; ///< Stack memory -- cgit v1.2.1