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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
13021
39389620ace4 Compile fix for HP-UX
Timo Sirainen <tss@iki.fi>
parents: 12936
diff changeset
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
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
8 /* well, this is obviously wrong since it assumes it's 64bit, but older
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
9 GCCs don't define it and we really want it. */
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
10 #ifndef LLONG_MAX
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
11 # define LLONG_MAX 9223372036854775807LL
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
12 #endif
62fc6c729962 64bit off_t fixes
Timo Sirainen <tss@iki.fi>
parents: 5
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 /* strcasecmp(), strncasecmp() */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 #ifndef HAVE_STRCASECMP
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 # ifdef HAVE_STRICMP
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 # define strcasecmp stricmp
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 # define strncasecmp strnicmp
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 # endif
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 #endif
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 #ifndef HAVE_INET_ATON
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 # include <sys/socket.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 # include <netinet/in.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 #endif
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 #endif
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
a0dd52443420 Added pwrite() compatibility
Timo Sirainen <tss@iki.fi>
parents: 1483
diff changeset
184 #endif
a0dd52443420 Added pwrite() compatibility
Timo Sirainen <tss@iki.fi>
parents: 1483
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
215 /* ctype.h isn't safe with signed chars,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
6cac808c4bd8 Compiling fix for HURD
Timo Sirainen <tss@iki.fi>
parents: 14332
diff changeset
287 #if !defined(PIPE_BUF) && defined(_POSIX_PIPE_BUF)
6cac808c4bd8 Compiling fix for HURD
Timo Sirainen <tss@iki.fi>
parents: 14332
diff changeset
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
6cac808c4bd8 Compiling fix for HURD
Timo Sirainen <tss@iki.fi>
parents: 14332
diff changeset
290
6cac808c4bd8 Compiling fix for HURD
Timo Sirainen <tss@iki.fi>
parents: 14332
diff changeset
291 #endif