1 /*
2  * Copyright (c) 2005-2006 Atheme Development Group
3  * Rights to this code are as documented in doc/LICENSE.
4  *
5  * Defines needed by multiple header files.
6  *
7  */
8 
9 #ifndef COMMON_H
10 #define COMMON_H
11 
12 /* D E F I N E S */
13 typedef enum {
14 	PATH_LOCALE,
15 	PATH_MODULE,
16 	PATH_SHARE,
17 	PATH_CONFIG,
18 	PATH_LOG,
19 	PATH_RUN,
20 	PATH_DATA,
21 	PATH_VEC_SIZE,
22 } path_vec_t;
23 
24 /*
25  * XXX: this is very nieve.
26  * We assume that %zu works if we're not on Windows; we know this is a lie.
27  * Oh well...
28  */
29 #ifndef _WIN32
30 # define SIZE_T_FORMAT	"%zu"
31 #else
32 # ifndef _WIN64
33 #  define SIZE_T_FORMAT "%lu"
34 # else
35 #  define SIZE_T_FORMAT "%llu"
36 # endif
37 #endif
38 
39 #define BUFSIZE			1024		/* maximum size of a buffer */
40 #define MAXMODES		4
41 #define MAX_IRC_OUTPUT_LINES	2000
42 
43 /* lengths of buffers (string length is 1 less) */
44 #define HOSTLEN			64		/* seems good enough */
45 #define NICKLEN			32
46 #define PASSLEN			289		/* 32 bytes salt + 1024 bits digest + null */
47 #define IDLEN			10
48 #define CHANNELLEN		201
49 #define USERLEN			12
50 #define HOSTIPLEN		54
51 #define GECOSLEN		51
52 #define KEYLEN			24
53 #define EMAILLEN		120
54 #define MEMOLEN			300
55 
56 #define MAXMSIGNORES		40
57 
58 #undef DEBUG_BALLOC
59 
60 #ifdef LARGE_NETWORK
61 #define HEAP_NODE		1024
62 #define HEAP_CHANNEL		1024
63 #define HEAP_CHANUSER		1024
64 #define HEAP_USER		1024
65 #define HEAP_SERVER		16
66 #define HEAP_CHANACS		1024
67 #define HASH_USER		65535
68 #define HASH_CHANNEL		32768
69 #define HASH_SERVER		128
70 #else
71 #define HEAP_NODE		1024
72 #define HEAP_CHANNEL		64
73 #define HEAP_CHANUSER		128
74 #define HEAP_USER		128
75 #define HEAP_SERVER		8
76 #define HEAP_CHANACS		128
77 #define HASH_USER		1024
78 #define HASH_CHANNEL		512
79 #define HASH_SERVER		32
80 #endif
81 
82 #ifndef TIME_FORMAT
83 #define TIME_FORMAT		"%b %d %H:%M:%S %Y %z"
84 #endif
85 
86 #define HASH_COMMAND		256
87 #define HASH_SMALL		32
88 #define HASH_ITRANS		128
89 #define HASH_TRANS		2048
90 
91 #define CACHEFILE_HEAP_SIZE	32
92 #define CACHELINE_HEAP_SIZE	64
93 
94 /* Make it possible to use pointers to these types everywhere
95  * (for structures used in multiple header files) */
96 typedef struct user_ user_t;
97 
98 typedef struct server_ server_t;
99 
100 typedef struct channel_ channel_t;
101 typedef struct chanuser_ chanuser_t;
102 typedef struct chanban_ chanban_t;
103 
104 typedef struct operclass_ operclass_t;
105 typedef struct soper_ soper_t;
106 typedef struct myuser_ myuser_t;
107 typedef struct mynick_ mynick_t;
108 typedef struct mychan_ mychan_t;
109 
110 typedef struct service_ service_t;
111 
112 typedef struct sourceinfo_ sourceinfo_t;
113 
114 enum faultcode_
115 {
116 	fault_needmoreparams	= 1,
117 	fault_badparams		= 2,
118 	fault_nosuch_source	= 3,
119 	fault_nosuch_target	= 4,
120 	fault_authfail		= 5,
121 	fault_noprivs		= 6,
122 	fault_nosuch_key	= 7,
123 	fault_alreadyexists	= 8,
124 	fault_toomany		= 9,
125 	fault_emailfail		= 10,
126 	fault_notverified	= 11,
127 	fault_nochange		= 12,
128 	fault_already_authed	= 13,
129 	fault_unimplemented	= 14,
130 	fault_badauthcookie	= 15
131 };
132 
133 typedef enum faultcode_ cmd_faultcode_t;
134 
135 #if defined(__GNUC__) || defined(__INTEL_COMPILER)
136 #define PRINTFLIKE(fmtarg, firstvararg) \
137 	__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
138 #define SCANFLIKE(fmtarg, firstvararg) \
139 	__attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
140 #define DEPRECATED \
141 	__attribute__((deprecated))
142 #else
143 #define PRINTFLIKE(fmtarg, firstvararg)
144 #define SCANFLIKE(fmtarg, firstvararg)
145 #define DEPRECATED
146 #endif /* defined(__INTEL_COMPILER) || defined(__GNUC__) */
147 
148 /* Causes a warning if value is not of type (or compatible), returning value. */
149 #define ENSURE_TYPE(value, type) (true ? (value) : (type)0)
150 
151 /* Returns the size of an array. */
152 #define ARRAY_SIZE(array) sizeof((array)) / sizeof(*(array))
153 
154 /* Continue if an assertion fails. */
155 #define	continue_if_fail(x)						\
156 	if (!(x)) { 							\
157 		mowgli_log("critical: Assertion '%s' failed.", #x);	\
158 		continue;						\
159 	}
160 
161 /* strshare.c - stringref management */
162 typedef const char *stringref;
163 
164 void strshare_init(void);
165 stringref strshare_get(const char *str);
166 stringref strshare_ref(stringref str);
167 void strshare_unref(stringref str);
168 
169 #endif
170 
171 /* vim:cinoptions=>s,e0,n0,f0,{0,}0,^0,=s,ps,t0,c3,+s,(2s,us,)20,*30,gs,hs ts=8 sw=8 noexpandtab
172  */
173