1/*
2 * Copyright 2007-2009, Ingo Weinhold, bonefish@cs.tu-berlin.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _FSSH_DEFS_H
6#define _FSSH_DEFS_H
7
8
9#include "fssh_types.h"
10
11
12// 32/64 bitness
13#ifdef HAIKU_HOST_PLATFORM_64_BIT
14#	define FSSH_B_HAIKU_64_BIT			1
15#else
16#	define FSSH_B_HAIKU_32_BIT			1
17#endif
18
19// Limits
20#define FSSH_B_DEV_NAME_LENGTH		128
21#define FSSH_B_FILE_NAME_LENGTH		256
22#define FSSH_B_PATH_NAME_LENGTH 	1024
23#define FSSH_B_ATTR_NAME_LENGTH		(FSSH_B_FILE_NAME_LENGTH-1)
24#define FSSH_B_MIME_TYPE_LENGTH		(FSSH_B_ATTR_NAME_LENGTH - 15)
25#define FSSH_B_MAX_SYMLINKS			16
26
27// Open Modes
28#define FSSH_B_READ_ONLY 		FSSH_O_RDONLY	// read only
29#define FSSH_B_WRITE_ONLY 		FSSH_O_WRONLY 	// write only
30#define FSSH_B_READ_WRITE		FSSH_O_RDWR   	// read and write
31
32#define	FSSH_B_FAIL_IF_EXISTS	FSSH_O_EXCL		// exclusive create
33#define FSSH_B_CREATE_FILE		FSSH_O_CREAT	// create the file
34#define FSSH_B_ERASE_FILE		FSSH_O_TRUNC	// erase the file's data
35#define FSSH_B_OPEN_AT_END	   	FSSH_O_APPEND	// point to the end of the data
36
37// Node Flavors
38enum fssh_node_flavor {
39  FSSH_B_FILE_NODE		= 0x01,
40  FSSH_B_SYMLINK_NODE	= 0x02,
41  FSSH_B_DIRECTORY_NODE	= 0x04,
42  FSSH_B_ANY_NODE		= 0x07
43};
44
45
46#if defined(__GNUC__) && __GNUC__ > 3
47#define fssh_offsetof(type,member)   __builtin_offsetof(type, member)
48#else
49#define fssh_offsetof(type,member) ((size_t)&((type*)0)->member)
50#endif
51
52#define fssh_alignof(type)   __alignof__(type)
53
54#define fssh_min_c(a,b) ((a)>(b)?(b):(a))
55#define fssh_max_c(a,b) ((a)>(b)?(a):(b))
56
57#define _FSSH_PACKED	__attribute__((packed))
58
59
60#endif	// _FSSH_DEFS_H
61