qemu/tools/virtiofsd/fuse_misc.h
<<
>>
Prefs
   1/*
   2 * FUSE: Filesystem in Userspace
   3 * Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
   4 *
   5 * This program can be distributed under the terms of the GNU LGPLv2.
   6 * See the file COPYING.LIB
   7 */
   8
   9#include <pthread.h>
  10
  11/*
  12 * Versioned symbols cannot be used in some cases because it
  13 *   - confuse the dynamic linker in uClibc
  14 *   - not supported on MacOSX (in MachO binary format)
  15 */
  16#if (!defined(__UCLIBC__) && !defined(__APPLE__))
  17#define FUSE_SYMVER(x) __asm__(x)
  18#else
  19#define FUSE_SYMVER(x)
  20#endif
  21
  22#ifndef USE_UCLIBC
  23#define fuse_mutex_init(mut) pthread_mutex_init(mut, NULL)
  24#else
  25/* Is this hack still needed? */
  26static inline void fuse_mutex_init(pthread_mutex_t *mut)
  27{
  28    pthread_mutexattr_t attr;
  29    pthread_mutexattr_init(&attr);
  30    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
  31    pthread_mutex_init(mut, &attr);
  32    pthread_mutexattr_destroy(&attr);
  33}
  34#endif
  35
  36#ifdef HAVE_STRUCT_STAT_ST_ATIM
  37/* Linux */
  38#define ST_ATIM_NSEC(stbuf) ((stbuf)->st_atim.tv_nsec)
  39#define ST_CTIM_NSEC(stbuf) ((stbuf)->st_ctim.tv_nsec)
  40#define ST_MTIM_NSEC(stbuf) ((stbuf)->st_mtim.tv_nsec)
  41#define ST_ATIM_NSEC_SET(stbuf, val) (stbuf)->st_atim.tv_nsec = (val)
  42#define ST_CTIM_NSEC_SET(stbuf, val) (stbuf)->st_ctim.tv_nsec = (val)
  43#define ST_MTIM_NSEC_SET(stbuf, val) (stbuf)->st_mtim.tv_nsec = (val)
  44#elif defined(HAVE_STRUCT_STAT_ST_ATIMESPEC)
  45/* FreeBSD */
  46#define ST_ATIM_NSEC(stbuf) ((stbuf)->st_atimespec.tv_nsec)
  47#define ST_CTIM_NSEC(stbuf) ((stbuf)->st_ctimespec.tv_nsec)
  48#define ST_MTIM_NSEC(stbuf) ((stbuf)->st_mtimespec.tv_nsec)
  49#define ST_ATIM_NSEC_SET(stbuf, val) (stbuf)->st_atimespec.tv_nsec = (val)
  50#define ST_CTIM_NSEC_SET(stbuf, val) (stbuf)->st_ctimespec.tv_nsec = (val)
  51#define ST_MTIM_NSEC_SET(stbuf, val) (stbuf)->st_mtimespec.tv_nsec = (val)
  52#else
  53#define ST_ATIM_NSEC(stbuf) 0
  54#define ST_CTIM_NSEC(stbuf) 0
  55#define ST_MTIM_NSEC(stbuf) 0
  56#define ST_ATIM_NSEC_SET(stbuf, val) do { } while (0)
  57#define ST_CTIM_NSEC_SET(stbuf, val) do { } while (0)
  58#define ST_MTIM_NSEC_SET(stbuf, val) do { } while (0)
  59#endif
  60