/*
 * Copyright (C) the libgit2 contributors. All rights reserved.
 *
 * This file is part of libgit2, distributed under the GNU GPL v2 with
 * a Linking Exception. For full terms see the included COPYING file.
 */
#ifndef INCLUDE_map_h__
#define INCLUDE_map_h__

#include "common.h"


/* p_mmap() prot values */
#define GIT_PROT_NONE 0x0
#define GIT_PROT_READ 0x1
#define GIT_PROT_WRITE 0x2
#define GIT_PROT_EXEC 0x4

/* git__mmmap() flags values */
#define GIT_MAP_FILE	0
#define GIT_MAP_SHARED 1
#define GIT_MAP_PRIVATE 2
#define GIT_MAP_TYPE	0xf
#define GIT_MAP_FIXED	0x10

#ifdef __amigaos4__
#define MAP_FAILED 0
#endif

typedef struct { /* memory mapped buffer	*/
	void *data; /* data bytes			*/
	size_t len; /* data length			*/
#ifdef GIT_WIN32
	HANDLE fmh; /* file mapping handle */
#endif
} git_map;

#define GIT_MMAP_VALIDATE(out, len, prot, flags) do { \
	assert(out != NULL && len > 0); \
	assert((prot & GIT_PROT_WRITE) || (prot & GIT_PROT_READ)); \
	assert((flags & GIT_MAP_FIXED) == 0); } while (0)

extern int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset);
extern int p_munmap(git_map *map);

#endif /* INCLUDE_map_h__ */
