blob: 23331f5dad426cac997bff59c8e8fef8048cb98b [file] [log] [blame]
/*
* fontconfig/src/fcwindows.h
*
* Copyright © 2013 Google, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the author(s) not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. The authors make no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, 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.
*
* Google Author(s): Behdad Esfahbod
*/
#ifndef _FCWINDOWS_H_
#define _FCWINDOWS_H_
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef _WIN32
/* Request Windows Vista for building. This is required to
* get MemoryBarrier on mingw32... */
# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
# undef _WIN32_WINNT
# endif
# ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0600
# endif
# define WIN32_LEAN_AND_MEAN
# define WIN32_EXTRA_LEAN
# define STRICT
# include <windows.h>
# include <io.h>
#if defined(_MSC_VER)
#include <BaseTsd.h>
typedef SSIZE_T ssize_t;
#endif
#define FC_UINT64_FORMAT "I64u"
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#ifndef S_ISDIR
#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
#endif
#ifndef F_OK
#define F_OK 0
#endif
#ifndef X_OK
#define X_OK 0 /* no execute bit on windows */
#endif
#ifndef W_OK
#define W_OK 2
#endif
#ifndef R_OK
#define R_OK 4
#endif
/* MingW provides dirent.h / openddir(), but MSVC does not */
#ifndef HAVE_DIRENT_H
#define HAVE_STRUCT_DIRENT_D_TYPE 1
typedef struct DIR DIR;
typedef enum {
DT_UNKNOWN = 0,
DT_DIR,
DT_REG,
} DIR_TYPE;
typedef struct dirent {
const char *d_name;
DIR_TYPE d_type;
} dirent;
#define opendir(dirname) FcCompatOpendirWin32(dirname)
#define closedir(d) FcCompatClosedirWin32(d)
#define readdir(d) FcCompatReaddirWin32(d)
DIR * FcCompatOpendirWin32 (const char *dirname);
struct dirent * FcCompatReaddirWin32 (DIR *dir);
int FcCompatClosedirWin32 (DIR *dir);
#endif /* HAVE_DIRENT_H */
#endif /* _WIN32 */
#endif /* _FCWINDOWS_H_ */