Mercurial > dovecot > core-2.2
annotate src/lib/compat.h @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | abfa9d470305 |
children | b50c55023f08 |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5782
diff
changeset
|
1 #ifndef COMPAT_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5782
diff
changeset
|
2 #define COMPAT_H |
0 | 3 |
13021 | 4 #if defined (HAVE_INTTYPES_H) && (defined(__osf__) || defined(_HPUX_SOURCE)) |
3671
77135b9e26b5
Include inttypes.h with Tru64 to get uint32_t etc. types defined.
Timo Sirainen <tss@iki.fi>
parents:
3623
diff
changeset
|
5 # include <inttypes.h> |
77135b9e26b5
Include inttypes.h with Tru64 to get uint32_t etc. types defined.
Timo Sirainen <tss@iki.fi>
parents:
3623
diff
changeset
|
6 #endif |
77135b9e26b5
Include inttypes.h with Tru64 to get uint32_t etc. types defined.
Timo Sirainen <tss@iki.fi>
parents:
3623
diff
changeset
|
7 |
56 | 8 /* well, this is obviously wrong since it assumes it's 64bit, but older |
9 GCCs don't define it and we really want it. */ | |
10 #ifndef LLONG_MAX | |
11 # define LLONG_MAX 9223372036854775807LL | |
12 #endif | |
13 | |
21910
0bcfd58922bd
lib: Add a common HAVE_TYPE_CHECKS
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21490
diff
changeset
|
14 #if ((__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)) && \ |
0bcfd58922bd
lib: Add a common HAVE_TYPE_CHECKS
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21490
diff
changeset
|
15 defined(HAVE_TYPEOF)) && !defined(__cplusplus) |
0bcfd58922bd
lib: Add a common HAVE_TYPE_CHECKS
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21490
diff
changeset
|
16 # define HAVE_TYPE_CHECKS |
0bcfd58922bd
lib: Add a common HAVE_TYPE_CHECKS
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21490
diff
changeset
|
17 #endif |
0bcfd58922bd
lib: Add a common HAVE_TYPE_CHECKS
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21490
diff
changeset
|
18 |
21490
a2cca53d71d2
lib: Make sure NULL is defined to be ((void *)0)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19038
diff
changeset
|
19 /* We really want NULL to be a pointer, since we have various type-checks |
21911
abfa9d470305
lib: Redefine NULL only if HAVE_TYPE_CHECKS is set
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21910
diff
changeset
|
20 that may result in compiler warnings/errors if it's not. Do this only when |
abfa9d470305
lib: Redefine NULL only if HAVE_TYPE_CHECKS is set
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21910
diff
changeset
|
21 type checking is used - it's not otherwise needed and causes compiling |
abfa9d470305
lib: Redefine NULL only if HAVE_TYPE_CHECKS is set
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21910
diff
changeset
|
22 problems with e.g. Sun C compiler. */ |
abfa9d470305
lib: Redefine NULL only if HAVE_TYPE_CHECKS is set
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21910
diff
changeset
|
23 #ifdef HAVE_TYPE_CHECKS |
21490
a2cca53d71d2
lib: Make sure NULL is defined to be ((void *)0)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19038
diff
changeset
|
24 # undef NULL |
a2cca53d71d2
lib: Make sure NULL is defined to be ((void *)0)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19038
diff
changeset
|
25 # define NULL ((void *)0) |
a2cca53d71d2
lib: Make sure NULL is defined to be ((void *)0)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19038
diff
changeset
|
26 #endif |
a2cca53d71d2
lib: Make sure NULL is defined to be ((void *)0)
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19038
diff
changeset
|
27 |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
28 #ifndef __cplusplus |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
29 #ifdef HAVE__BOOL |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
30 typedef _Bool bool; |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
31 #else |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
32 typedef int bool; |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
33 #endif |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
34 #endif |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3672
diff
changeset
|
35 |
3929
49a1a979959e
If uoff_t type already exists, use it (UnixWare has it).
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
36 #if defined (HAVE_UOFF_T) |
49a1a979959e
If uoff_t type already exists, use it (UnixWare has it).
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
37 /* native support */ |
49a1a979959e
If uoff_t type already exists, use it (UnixWare has it).
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
38 #elif defined (UOFF_T_INT) |
179
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
39 typedef unsigned int uoff_t; |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
40 #elif defined (UOFF_T_LONG) |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
41 typedef unsigned long uoff_t; |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
42 #elif defined (UOFF_T_LONG_LONG) |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
43 typedef unsigned long long uoff_t; |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
44 #else |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
45 # error uoff_t size not set |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
46 #endif |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
47 |
678
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
48 #ifndef HAVE_UINTMAX_T |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
49 # if SIZEOF_LONG_LONG > 0 |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
50 typedef unsigned long long uintmax_t; |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
51 # else |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
52 typedef unsigned long uintmax_t; |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
53 # endif |
908
bc55266563cd
Use separate check for uint_fast32_t.
Timo Sirainen <tss@iki.fi>
parents:
903
diff
changeset
|
54 #endif |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
55 |
908
bc55266563cd
Use separate check for uint_fast32_t.
Timo Sirainen <tss@iki.fi>
parents:
903
diff
changeset
|
56 #ifndef HAVE_UINT_FAST32_T |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
57 # if SIZEOF_INT >= 4 |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
58 typedef unsigned int uint_fast32_t; |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
59 # else |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
60 typedef unsigned long uint_fast32_t; |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
61 # endif |
678
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
62 #endif |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
63 |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
64 #ifndef HAVE_SOCKLEN_T |
1e5c655bad25
Renamed largest_t to uintmax_t which already exists in C99.
Timo Sirainen <tss@iki.fi>
parents:
572
diff
changeset
|
65 typedef int socklen_t; |
179
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
66 #endif |
0ffecd4e7e1a
added dec2str() function and largest_t type, removed itoa() and ltoa()
Timo Sirainen <tss@iki.fi>
parents:
56
diff
changeset
|
67 |
692
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
68 #ifdef HAVE_SYS_SYSMACROS_H |
693
21233287e9c1
And the missing sys/sysmacros.h include..
Timo Sirainen <tss@iki.fi>
parents:
692
diff
changeset
|
69 # include <sys/sysmacros.h> |
3932
b079a386a2f7
Include sys/mkdev.h with UnixWare for major() and minor()
Timo Sirainen <tss@iki.fi>
parents:
3929
diff
changeset
|
70 # ifdef HAVE_SYS_MKDEV_H |
b079a386a2f7
Include sys/mkdev.h with UnixWare for major() and minor()
Timo Sirainen <tss@iki.fi>
parents:
3929
diff
changeset
|
71 # include <sys/mkdev.h> /* UnixWare */ |
b079a386a2f7
Include sys/mkdev.h with UnixWare for major() and minor()
Timo Sirainen <tss@iki.fi>
parents:
3929
diff
changeset
|
72 # endif |
692
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
73 # define CMP_DEV_T(a, b) (major(a) == major(b) && minor(a) == minor(b)) |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
74 #elif !defined (DEV_T_STRUCT) |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
75 # define CMP_DEV_T(a, b) ((a) == (b)) |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
76 #else |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
77 # error I do not know how to compare dev_t |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
78 #endif |
359f73bf84b5
Added CMP_DEV_T macro which uses major()/minor() if possible but fallbacks
Timo Sirainen <tss@iki.fi>
parents:
678
diff
changeset
|
79 |
7526
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
80 #ifdef HAVE_STAT_XTIM |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
81 # define HAVE_ST_NSECS |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
82 # define ST_ATIME_NSEC(st) ((unsigned long)(st).st_atim.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
83 # define ST_MTIME_NSEC(st) ((unsigned long)(st).st_mtim.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
84 # define ST_CTIME_NSEC(st) ((unsigned long)(st).st_ctim.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
85 #elif defined (HAVE_STAT_XTIMESPEC) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
86 # define HAVE_ST_NSECS |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
87 # define ST_ATIME_NSEC(st) ((unsigned long)(st).st_atimespec.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
88 # define ST_MTIME_NSEC(st) ((unsigned long)(st).st_mtimespec.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
89 # define ST_CTIME_NSEC(st) ((unsigned long)(st).st_ctimespec.tv_nsec) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
90 #else |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
91 # define ST_ATIME_NSEC(st) 0UL |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
92 # define ST_MTIME_NSEC(st) 0UL |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
93 # define ST_CTIME_NSEC(st) 0UL |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
94 #endif |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
95 |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
96 #ifdef HAVE_ST_NSECS |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
97 /* TRUE if a nanosecond timestamp from struct stat matches another nanosecond. |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
98 If nanoseconds aren't supported in struct stat, returns always TRUE (useful |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
99 with NFS if some hosts support nanoseconds and others don't). */ |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
100 # define ST_NTIMES_EQUAL(ns1, ns2) ((ns1) == (ns2)) |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
101 #else |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
102 # define ST_NTIMES_EQUAL(ns1, ns2) TRUE |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
103 #endif |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
104 |
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
105 #define CMP_ST_MTIME(st1, st2) \ |
5782
2e6a977b1d6a
Added CMP_ST_MTIME() and CMP_ST_CTIME() macros that compare also nanoseconds
Timo Sirainen <tss@iki.fi>
parents:
4909
diff
changeset
|
106 ((st1)->st_mtime == (st2)->st_mtime && \ |
7577
0d842b055838
Fixed compiling in BSD systems.
Timo Sirainen <tss@iki.fi>
parents:
7526
diff
changeset
|
107 ST_NTIMES_EQUAL(ST_MTIME_NSEC(*(st1)), ST_MTIME_NSEC(*(st2)))) |
7526
a957567706ec
Replaced HAVE_ST_NSEC macro checks with more generic ST_?TIME_NSEC() macros
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
108 #define CMP_ST_CTIME(st1, st2) \ |
5782
2e6a977b1d6a
Added CMP_ST_MTIME() and CMP_ST_CTIME() macros that compare also nanoseconds
Timo Sirainen <tss@iki.fi>
parents:
4909
diff
changeset
|
109 ((st1)->st_ctime == (st2)->st_ctime && \ |
7578
5766890f1275
Previous fix broke CMP_ST_CTIME() nsec checks.
Timo Sirainen <tss@iki.fi>
parents:
7577
diff
changeset
|
110 ST_NTIMES_EQUAL(ST_CTIME_NSEC(*(st1)), ST_CTIME_NSEC(*(st2)))) |
5782
2e6a977b1d6a
Added CMP_ST_MTIME() and CMP_ST_CTIME() macros that compare also nanoseconds
Timo Sirainen <tss@iki.fi>
parents:
4909
diff
changeset
|
111 |
0 | 112 /* strcasecmp(), strncasecmp() */ |
113 #ifndef HAVE_STRCASECMP | |
114 # ifdef HAVE_STRICMP | |
115 # define strcasecmp stricmp | |
116 # define strncasecmp strnicmp | |
117 # else | |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
118 # define strcasecmp i_my_strcasecmp |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
119 # define strncasecmp i_my_strncasecmp |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
120 int i_my_strcasecmp(const char *s1, const char *s2); |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
121 int i_my_strncasecmp(const char *s1, const char *s2, size_t max_chars); |
0 | 122 # endif |
123 #endif | |
124 | |
125 #ifndef HAVE_INET_ATON | |
126 # include <sys/socket.h> | |
127 # include <netinet/in.h> | |
128 # include <arpa/inet.h> | |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
129 # define inet_aton i_my_inet_aton |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
130 int i_my_inet_aton(const char *cp, struct in_addr *inp); |
0 | 131 #endif |
132 | |
133 #ifndef HAVE_VSYSLOG | |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
134 # define vsyslog i_my_vsyslog |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
135 void i_my_vsyslog(int priority, const char *format, va_list args); |
0 | 136 #endif |
137 | |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
138 #ifndef HAVE_GETPAGESIZE |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
139 # define getpagesize i_my_getpagesize |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
140 int i_my_getpagesize(void); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
141 #endif |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
142 |
494
83d4617e1dca
Check fdatasync() from -lrt if it's not in libc (solaris). Also fallback to
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
143 #ifndef HAVE_FDATASYNC |
83d4617e1dca
Check fdatasync() from -lrt if it's not in libc (solaris). Also fallback to
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
144 # define fdatasync fsync |
83d4617e1dca
Check fdatasync() from -lrt if it's not in libc (solaris). Also fallback to
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
145 #endif |
83d4617e1dca
Check fdatasync() from -lrt if it's not in libc (solaris). Also fallback to
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
146 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1852
diff
changeset
|
147 struct const_iovec { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1852
diff
changeset
|
148 const void *iov_base; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1852
diff
changeset
|
149 size_t iov_len; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1852
diff
changeset
|
150 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
1852
diff
changeset
|
151 |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
152 #ifndef HAVE_STRUCT_IOVEC |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
153 struct iovec { |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
154 void *iov_base; |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
155 size_t iov_len; |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
156 }; |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
157 #endif |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
158 |
3623
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
159 /* IOV_MAX should be in limits.h nowadays. Linux still (2005) requires |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
160 defining _XOPEN_SOURCE to get that value. UIO_MAXIOV works with it though, |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
161 so use it instead. 16 is the lowest acceptable value for all OSes. */ |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
162 #ifndef IOV_MAX |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
163 # include <sys/uio.h> |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
164 # ifdef UIO_MAXIOV |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
165 # define IOV_MAX UIO_MAXIOV |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
166 # else |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
167 # define IOV_MAX 16 |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
168 # endif |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
169 #endif |
085ebc6e341c
Use IOV_MAX instead of UIO_MAXIOV when available.
Timo Sirainen <tss@iki.fi>
parents:
3237
diff
changeset
|
170 |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
171 #ifndef HAVE_WRITEV |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
172 # define writev i_my_writev |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
173 struct iovec; |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
174 ssize_t i_my_writev(int fd, const struct iovec *iov, int iov_len); |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
175 #endif |
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
204
diff
changeset
|
176 |
7822
5abe05d7d093
HP-UX: pread() and pwrite() are broken, use our own implementation.
Timo Sirainen <tss@iki.fi>
parents:
7578
diff
changeset
|
177 #if !defined(HAVE_PREAD) || defined(PREAD_WRAPPERS) || defined(PREAD_BROKEN) |
1852
29729fa90bb2
more kludgeing to get pread/pwrite working
Timo Sirainen <tss@iki.fi>
parents:
1849
diff
changeset
|
178 # ifndef IN_COMPAT_C |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
179 # define pread i_my_pread |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
180 # define pwrite i_my_pwrite |
1852
29729fa90bb2
more kludgeing to get pread/pwrite working
Timo Sirainen <tss@iki.fi>
parents:
1849
diff
changeset
|
181 # endif |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
182 ssize_t i_my_pread(int fd, void *buf, size_t count, off_t offset); |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
183 ssize_t i_my_pwrite(int fd, const void *buf, size_t count, off_t offset); |
1669 | 184 #endif |
185 | |
2705
20dcf58cc05c
Add seteuid() wrapper for HP-UX
Timo Sirainen <tss@iki.fi>
parents:
1915
diff
changeset
|
186 #ifndef HAVE_SETEUID |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
187 # define seteuid i_my_seteuid |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
188 int i_my_seteuid(uid_t euid); |
2705
20dcf58cc05c
Add seteuid() wrapper for HP-UX
Timo Sirainen <tss@iki.fi>
parents:
1915
diff
changeset
|
189 #endif |
20dcf58cc05c
Add seteuid() wrapper for HP-UX
Timo Sirainen <tss@iki.fi>
parents:
1915
diff
changeset
|
190 |
3237
2f57438d9542
Added setegid() emulation for HP-UX.
Timo Sirainen <tss@iki.fi>
parents:
3002
diff
changeset
|
191 #ifndef HAVE_SETEGID |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
192 # define setegid i_my_setegid |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
193 int i_my_setegid(gid_t egid); |
3237
2f57438d9542
Added setegid() emulation for HP-UX.
Timo Sirainen <tss@iki.fi>
parents:
3002
diff
changeset
|
194 #endif |
2f57438d9542
Added setegid() emulation for HP-UX.
Timo Sirainen <tss@iki.fi>
parents:
3002
diff
changeset
|
195 |
2872
c0e2a38b7647
Check for libgen.h and if it's not found, use my_basename(). Also
Timo Sirainen <tss@iki.fi>
parents:
2705
diff
changeset
|
196 #ifndef HAVE_LIBGEN_H |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
197 # define basename i_my_basename |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
198 char *i_my_basename(char *path); |
2872
c0e2a38b7647
Check for libgen.h and if it's not found, use my_basename(). Also
Timo Sirainen <tss@iki.fi>
parents:
2705
diff
changeset
|
199 #endif |
c0e2a38b7647
Check for libgen.h and if it's not found, use my_basename(). Also
Timo Sirainen <tss@iki.fi>
parents:
2705
diff
changeset
|
200 |
7850
7f9f7fc02359
Support systems with non-C99 vsnprintf().
Timo Sirainen <tss@iki.fi>
parents:
7847
diff
changeset
|
201 #ifdef HAVE_OLD_VSNPRINTF |
7f9f7fc02359
Support systems with non-C99 vsnprintf().
Timo Sirainen <tss@iki.fi>
parents:
7847
diff
changeset
|
202 # include <stdio.h> |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
203 # define vsnprintf i_my_vsnprintf |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
204 int i_my_vsnprintf(char *str, size_t size, const char *format, va_list ap); |
7850
7f9f7fc02359
Support systems with non-C99 vsnprintf().
Timo Sirainen <tss@iki.fi>
parents:
7847
diff
changeset
|
205 #endif |
7f9f7fc02359
Support systems with non-C99 vsnprintf().
Timo Sirainen <tss@iki.fi>
parents:
7847
diff
changeset
|
206 |
8076
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
207 #ifndef HAVE_CLOCK_GETTIME |
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
208 # include <time.h> |
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
209 # undef CLOCK_REALTIME |
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
210 # define CLOCK_REALTIME 1 |
10005
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
211 # define clock_gettime i_my_clock_gettime |
910059d94bbc
compat: Renamed all my_*() fallback functions to i_my_*().
Timo Sirainen <tss@iki.fi>
parents:
8076
diff
changeset
|
212 int i_my_clock_gettime(int clk_id, struct timespec *tp); |
8076
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
213 #endif |
bbfbc84f795c
Added clock_gettime() compatibility function for systems without it.
Timo Sirainen <tss@iki.fi>
parents:
7850
diff
changeset
|
214 |
0 | 215 /* ctype.h isn't safe with signed chars, |
216 use our own instead if really needed */ | |
696
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
217 #define i_toupper(x) ((char) toupper((int) (unsigned char) (x))) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
218 #define i_tolower(x) ((char) tolower((int) (unsigned char) (x))) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
219 #define i_isalnum(x) isalnum((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
220 #define i_isalpha(x) isalpha((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
221 #define i_isascii(x) isascii((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
222 #define i_isblank(x) isblank((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
223 #define i_iscntrl(x) iscntrl((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
224 #define i_isdigit(x) isdigit((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
225 #define i_isgraph(x) isgraph((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
226 #define i_islower(x) islower((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
227 #define i_isprint(x) isprint((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
228 #define i_ispunct(x) ispunct((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
229 #define i_isspace(x) isspace((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
230 #define i_isupper(x) isupper((int) (unsigned char) (x)) |
c7f42a8e7176
Reverted back the isdigit()/etc. They're defined to get int argument, so we
Timo Sirainen <tss@iki.fi>
parents:
694
diff
changeset
|
231 #define i_isxdigit(x) isxdigit((int) (unsigned char) (x)) |
0 | 232 |
572
3c6a0cb061c6
EOVERFLOW doesn't exist everywhere, fallback it to EINVAL.
Timo Sirainen <tss@iki.fi>
parents:
494
diff
changeset
|
233 #ifndef EOVERFLOW |
16805
d064c57a601d
If EOVERFLOW errno isn't defined by system, fallback to ERANGE instead of EINVAL.
Timo Sirainen <tss@iki.fi>
parents:
15286
diff
changeset
|
234 # define EOVERFLOW ERANGE |
0 | 235 #endif |
572
3c6a0cb061c6
EOVERFLOW doesn't exist everywhere, fallback it to EINVAL.
Timo Sirainen <tss@iki.fi>
parents:
494
diff
changeset
|
236 |
1325
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
237 #ifdef EDQUOT |
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
238 # define ENOSPACE(errno) ((errno) == ENOSPC || (errno) == EDQUOT) |
17716
286da24ada43
Handle "out of disk space" and "out of user quota" as separate cases.
Timo Sirainen <tss@iki.fi>
parents:
16805
diff
changeset
|
239 # define ENOQUOTA(errno) ((errno) == EDQUOT) |
1325
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
240 #else |
17716
286da24ada43
Handle "out of disk space" and "out of user quota" as separate cases.
Timo Sirainen <tss@iki.fi>
parents:
16805
diff
changeset
|
241 /* probably all modern OSes have EDQUOT, but just in case one doesn't assume |
286da24ada43
Handle "out of disk space" and "out of user quota" as separate cases.
Timo Sirainen <tss@iki.fi>
parents:
16805
diff
changeset
|
242 that ENOSPC is the same as "over quota". */ |
1325
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
243 # define ENOSPACE(errno) ((errno) == ENOSPC) |
17716
286da24ada43
Handle "out of disk space" and "out of user quota" as separate cases.
Timo Sirainen <tss@iki.fi>
parents:
16805
diff
changeset
|
244 # define ENOQUOTA(errno) ((errno) == ENOSPC) |
572
3c6a0cb061c6
EOVERFLOW doesn't exist everywhere, fallback it to EINVAL.
Timo Sirainen <tss@iki.fi>
parents:
494
diff
changeset
|
245 #endif |
1325
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
246 |
1483
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
247 /* EPERM is returned sometimes if device doesn't support such modification */ |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
248 #ifdef EROFS |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
249 # define ENOACCESS(errno) \ |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
250 ((errno) == EACCES || (errno) == EROFS || (errno) == EPERM) |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
251 #else |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
252 # define ENOACCESS(errno) ((errno) == EACCES || (errno) == EPERM) |
1325
e026f8e4d241
Handle EDQUOT errno as "not enough disk space" like ENOSPC.
Timo Sirainen <tss@iki.fi>
parents:
908
diff
changeset
|
253 #endif |
1483
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
254 |
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
255 #define ENOTFOUND(errno) \ |
14332
37d6dd0f053b
lib-storage: Don't log errors if trying to open a mailbox with too long name.
Timo Sirainen <tss@iki.fi>
parents:
13021
diff
changeset
|
256 ((errno) == ENOENT || (errno) == ENOTDIR || \ |
37d6dd0f053b
lib-storage: Don't log errors if trying to open a mailbox with too long name.
Timo Sirainen <tss@iki.fi>
parents:
13021
diff
changeset
|
257 (errno) == ELOOP || (errno) == ENAMETOOLONG) |
1483
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
258 |
4404
76e2177be0bf
Handle EMLINK and EPERM errors the same way as EXDEV when handling hardlink
Timo Sirainen <tss@iki.fi>
parents:
3932
diff
changeset
|
259 #define ECANTLINK(errno) \ |
76e2177be0bf
Handle EMLINK and EPERM errors the same way as EXDEV when handling hardlink
Timo Sirainen <tss@iki.fi>
parents:
3932
diff
changeset
|
260 ((errno) == EXDEV || (errno) == EMLINK || (errno) == EPERM) |
76e2177be0bf
Handle EMLINK and EPERM errors the same way as EXDEV when handling hardlink
Timo Sirainen <tss@iki.fi>
parents:
3932
diff
changeset
|
261 |
17756
0ff8d85a6893
Added UNLINK_EISDIR() helper macro.
Timo Sirainen <tss@iki.fi>
parents:
17716
diff
changeset
|
262 /* Returns TRUE if unlink() failed because it attempted to delete a directory */ |
0ff8d85a6893
Added UNLINK_EISDIR() helper macro.
Timo Sirainen <tss@iki.fi>
parents:
17716
diff
changeset
|
263 #define UNLINK_EISDIR(errno) \ |
0ff8d85a6893
Added UNLINK_EISDIR() helper macro.
Timo Sirainen <tss@iki.fi>
parents:
17716
diff
changeset
|
264 ((errno) == EPERM || /* POSIX */ \ |
0ff8d85a6893
Added UNLINK_EISDIR() helper macro.
Timo Sirainen <tss@iki.fi>
parents:
17716
diff
changeset
|
265 (errno) == EISDIR) /* Linux */ |
0ff8d85a6893
Added UNLINK_EISDIR() helper macro.
Timo Sirainen <tss@iki.fi>
parents:
17716
diff
changeset
|
266 |
4909
5ea3e08af1e2
Added EDESTDIREXISTS() macro, and changed rename() calls to use it.
Timo Sirainen <tss@iki.fi>
parents:
4404
diff
changeset
|
267 /* EBUSY is given by some NFS implementations */ |
5ea3e08af1e2
Added EDESTDIREXISTS() macro, and changed rename() calls to use it.
Timo Sirainen <tss@iki.fi>
parents:
4404
diff
changeset
|
268 #define EDESTDIREXISTS(errno) \ |
5ea3e08af1e2
Added EDESTDIREXISTS() macro, and changed rename() calls to use it.
Timo Sirainen <tss@iki.fi>
parents:
4404
diff
changeset
|
269 ((errno) == EEXIST || (errno) == ENOTEMPTY || (errno) == EBUSY) |
5ea3e08af1e2
Added EDESTDIREXISTS() macro, and changed rename() calls to use it.
Timo Sirainen <tss@iki.fi>
parents:
4404
diff
changeset
|
270 |
12936
d14b0fd0a423
Linux NFS: fstat() may return ENOENT instead of ESTALE in some kernel versions.
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
271 /* fstat() returns ENOENT instead of ESTALE with some Linux versions */ |
d14b0fd0a423
Linux NFS: fstat() may return ENOENT instead of ESTALE in some kernel versions.
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
272 #define ESTALE_FSTAT(errno) \ |
d14b0fd0a423
Linux NFS: fstat() may return ENOENT instead of ESTALE in some kernel versions.
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
273 ((errno) == ESTALE || (errno) == ENOENT) |
d14b0fd0a423
Linux NFS: fstat() may return ENOENT instead of ESTALE in some kernel versions.
Timo Sirainen <tss@iki.fi>
parents:
11309
diff
changeset
|
274 |
10383
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
275 #if !defined(_POSIX_SYNCHRONIZED_IO) && \ |
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
276 defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ |
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
277 (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060) |
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
278 /* OS X Snow Leopard has fdatasync(), but no prototype for it. */ |
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
279 int fdatasync(int); |
1483
836c952e17ec
More robust error handling for mbox.
Timo Sirainen <tss@iki.fi>
parents:
1325
diff
changeset
|
280 #endif |
10383
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
281 |
11309
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10579
diff
changeset
|
282 /* Try to keep IO operations at least this size */ |
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10579
diff
changeset
|
283 #ifndef IO_BLOCK_SIZE |
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10579
diff
changeset
|
284 # define IO_BLOCK_SIZE 8192 |
10383
940212bda6ea
OS X: Fixed compiler warning about missing fdatasync() prototypes.
Timo Sirainen <tss@iki.fi>
parents:
10372
diff
changeset
|
285 #endif |
11309
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10579
diff
changeset
|
286 |
15286 | 287 #if !defined(PIPE_BUF) && defined(_POSIX_PIPE_BUF) |
288 # define PIPE_BUF (8 * _POSIX_PIPE_BUF) /* for HURD */ | |
11309
88d7a36c7fa5
Use IO_BLOCK_SIZE macro to specify how large read/write syscalls to use.
Timo Sirainen <tss@iki.fi>
parents:
10579
diff
changeset
|
289 #endif |
15286 | 290 |
291 #endif |