Coverage Report

Created: 2023-03-26 06:54

/src/util-linux/include/c.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Fundamental C definitions.
3
 *
4
 * No copyright is claimed.  This code is in the public domain; do with
5
 * it what you wish.
6
 */
7
#ifndef UTIL_LINUX_C_H
8
#define UTIL_LINUX_C_H
9
10
#include <limits.h>
11
#include <stddef.h>
12
#include <stdint.h>
13
#include <stdio.h>
14
#include <unistd.h>
15
#include <stdarg.h>
16
#include <stdlib.h>
17
#include <string.h>
18
#include <errno.h>
19
#include <sys/types.h>
20
#include <grp.h>
21
22
#include <assert.h>
23
24
#ifdef HAVE_ERR_H
25
# include <err.h>
26
#endif
27
28
#ifdef HAVE_SYS_SYSMACROS_H
29
# include <sys/sysmacros.h>     /* for major, minor */
30
#endif
31
32
#ifndef LOGIN_NAME_MAX
33
# define LOGIN_NAME_MAX 256
34
#endif
35
36
#ifndef NAME_MAX
37
# define NAME_MAX PATH_MAX
38
#endif
39
40
/*
41
 * __GNUC_PREREQ is deprecated in favour of __has_attribute() and
42
 * __has_feature(). The __has macros are supported by clang and gcc>=5.
43
 */
44
#ifndef __GNUC_PREREQ
45
# if defined __GNUC__ && defined __GNUC_MINOR__
46
#  define __GNUC_PREREQ(maj, min) \
47
  ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
48
# else
49
#  define __GNUC_PREREQ(maj, min) 0
50
# endif
51
#endif
52
53
#ifdef __GNUC__
54
55
/* &a[0] degrades to a pointer: a different type from an array */
56
# define __must_be_array(a) \
57
308k
  UL_BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(__typeof__(a), __typeof__(&a[0])))
58
59
0
# define ignore_result(x) __extension__ ({ \
60
0
  __typeof__(x) __dummy __attribute__((__unused__)) = (x); (void) __dummy; \
61
0
})
62
63
#else /* !__GNUC__ */
64
# define __must_be_array(a) 0
65
# define __attribute__(_arg_)
66
# define ignore_result(x) ((void) (x))
67
#endif /* !__GNUC__ */
68
69
70
/* "restrict" keyword fallback */
71
#if __STDC__ != 1
72
# define restrict __restrict /* use implementation __ format */
73
#else
74
# ifndef __STDC_VERSION__
75
#  define restrict __restrict /* use implementation __ format */
76
# else
77
#  if __STDC_VERSION__ < 199901L
78
#   define restrict __restrict /* use implementation __ format */
79
#  endif
80
# endif
81
#endif
82
83
84
/*
85
 * It evaluates to 1 if the attribute/feature is supported by the current
86
 * compilation target. Fallback for old compilers.
87
 */
88
#ifndef __has_attribute
89
  #define __has_attribute(x) 0
90
#endif
91
92
#ifndef __has_feature
93
  #define __has_feature(x) 0
94
#endif
95
96
/*
97
 * Function attributes
98
 */
99
#ifndef __ul_alloc_size
100
# if (__has_attribute(alloc_size) && __has_attribute(warn_unused_result)) || __GNUC_PREREQ (4, 3)
101
#  define __ul_alloc_size(s) __attribute__((alloc_size(s), warn_unused_result))
102
# else
103
#  define __ul_alloc_size(s)
104
# endif
105
#endif
106
107
#ifndef __ul_calloc_size
108
# if (__has_attribute(alloc_size) && __has_attribute(warn_unused_result)) || __GNUC_PREREQ (4, 3)
109
#  define __ul_calloc_size(n, s) __attribute__((alloc_size(n, s), warn_unused_result))
110
# else
111
#  define __ul_calloc_size(n, s)
112
# endif
113
#endif
114
115
#if __has_attribute(returns_nonnull) || __GNUC_PREREQ (4, 9)
116
# define __ul_returns_nonnull __attribute__((returns_nonnull))
117
#else
118
# define __ul_returns_nonnull
119
#endif
120
121
/*
122
 * Force a compilation error if condition is true, but also produce a
123
 * result (of value 0 and type size_t), so the expression can be used
124
 * e.g. in a structure initializer (or wherever else comma expressions
125
 * aren't permitted).
126
 */
127
308k
#define UL_BUILD_BUG_ON_ZERO(e) __extension__ (sizeof(struct { int:-!!(e); }))
128
#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))
129
130
#ifndef ARRAY_SIZE
131
308k
# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
132
#endif
133
134
#ifndef PATH_MAX
135
# define PATH_MAX 4096
136
#endif
137
138
#ifndef TRUE
139
0
# define TRUE 1
140
#endif
141
142
#ifndef FALSE
143
0
# define FALSE 0
144
#endif
145
146
#ifndef min
147
0
# define min(x, y) __extension__ ({    \
148
0
  __typeof__(x) _min1 = (x);    \
149
0
  __typeof__(y) _min2 = (y);    \
150
0
  (void) (&_min1 == &_min2);    \
151
0
  _min1 < _min2 ? _min1 : _min2; })
152
#endif
153
154
#ifndef max
155
0
# define max(x, y) __extension__ ({    \
156
0
  __typeof__(x) _max1 = (x);    \
157
0
  __typeof__(y) _max2 = (y);    \
158
0
  (void) (&_max1 == &_max2);    \
159
0
  _max1 > _max2 ? _max1 : _max2; })
160
#endif
161
162
#ifndef abs_diff
163
# define abs_diff(x, y) __extension__ ({        \
164
  __typeof__(x) _a = (x);     \
165
  __typeof__(y) _b = (y);     \
166
  (void) (&_a == &_b);      \
167
  _a > _b ? _a - _b : _b - _a; })
168
#endif
169
170
#ifndef cmp_numbers
171
0
# define cmp_numbers(x, y) __extension__ ({  \
172
0
  __typeof__(x) _a = (x);     \
173
0
  __typeof__(y) _b = (y);     \
174
0
  (void) (&_a == &_b);      \
175
0
  _a == _b ? 0 : _a > _b ? 1 : -1; })
176
#endif
177
178
179
#ifndef cmp_timespec
180
# define cmp_timespec(a, b, CMP)    \
181
  (((a)->tv_sec == (b)->tv_sec)   \
182
  ? ((a)->tv_nsec CMP (b)->tv_nsec) \
183
  : ((a)->tv_sec CMP (b)->tv_sec))
184
#endif
185
186
187
#ifndef cmp_stat_mtime
188
# ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
189
#  define cmp_stat_mtime(_a, _b, CMP) cmp_timespec(&(_a)->st_mtim, &(_b)->st_mtim, CMP)
190
# else
191
#  define cmp_stat_mtime(_a, _b, CMP) ((_a)->st_mtime CMP (_b)->st_mtime)
192
# endif
193
#endif
194
195
196
#ifndef offsetof
197
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
198
#endif
199
200
#ifndef sizeof_member
201
#define sizeof_member(TYPE, MEMBER) sizeof(((TYPE *)0)->MEMBER)
202
#endif
203
204
/*
205
 * container_of - cast a member of a structure out to the containing structure
206
 * @ptr:  the pointer to the member.
207
 * @type: the type of the container struct this is embedded in.
208
 * @member: the name of the member within the struct.
209
 */
210
#ifndef container_of
211
41.0k
#define container_of(ptr, type, member) __extension__ ({  \
212
41.0k
  const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
213
41.0k
  (type *)( (char *)__mptr - offsetof(type,member) );})
214
#endif
215
216
#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
217
# ifdef HAVE___PROGNAME
218
extern char *__progname;
219
#  define program_invocation_short_name __progname
220
# else
221
#  ifdef HAVE_GETEXECNAME
222
#   define program_invocation_short_name \
223
    prog_inv_sh_nm_from_file(getexecname(), 0)
224
#  else
225
#   define program_invocation_short_name \
226
    prog_inv_sh_nm_from_file(__FILE__, 1)
227
#  endif
228
static char prog_inv_sh_nm_buf[256];
229
static inline char *
230
prog_inv_sh_nm_from_file(char *f, char stripext)
231
{
232
  char *t;
233
234
  if ((t = strrchr(f, '/')) != NULL)
235
    t++;
236
  else
237
    t = f;
238
239
  strncpy(prog_inv_sh_nm_buf, t, sizeof(prog_inv_sh_nm_buf) - 1);
240
  prog_inv_sh_nm_buf[sizeof(prog_inv_sh_nm_buf) - 1] = '\0';
241
242
  if (stripext && (t = strrchr(prog_inv_sh_nm_buf, '.')) != NULL)
243
    *t = '\0';
244
245
  return prog_inv_sh_nm_buf;
246
}
247
# endif
248
#endif
249
250
251
#ifndef HAVE_ERR_H
252
static inline void __attribute__ ((__format__ (__printf__, 4, 5)))
253
errmsg(char doexit, int excode, char adderr, const char *fmt, ...)
254
{
255
  fprintf(stderr, "%s: ", program_invocation_short_name);
256
  if (fmt != NULL) {
257
    va_list argp;
258
    va_start(argp, fmt);
259
    vfprintf(stderr, fmt, argp);
260
    va_end(argp);
261
    if (adderr)
262
      fprintf(stderr, ": ");
263
  }
264
  if (adderr)
265
    fprintf(stderr, "%m");
266
  fprintf(stderr, "\n");
267
  if (doexit)
268
    exit(excode);
269
}
270
271
#ifndef HAVE_ERR
272
# define err(E, FMT...) errmsg(1, E, 1, FMT)
273
#endif
274
275
#ifndef HAVE_ERRX
276
# define errx(E, FMT...) errmsg(1, E, 0, FMT)
277
#endif
278
279
#ifndef HAVE_WARN
280
# define warn(FMT...) errmsg(0, 0, 1, FMT)
281
#endif
282
283
#ifndef HAVE_WARNX
284
# define warnx(FMT...) errmsg(0, 0, 0, FMT)
285
#endif
286
#endif /* !HAVE_ERR_H */
287
288
289
static inline
290
__attribute__((__noreturn__))
291
void __err_oom(const char *file, unsigned int line)
292
0
{
293
0
  err(EXIT_FAILURE, "%s: %u: cannot allocate memory", file, line);
294
0
}
Unexecuted instantiation: script.c:__err_oom
Unexecuted instantiation: fileutils.c:__err_oom
Unexecuted instantiation: jsonwrt.c:__err_oom
Unexecuted instantiation: mangle.c:__err_oom
Unexecuted instantiation: strutils.c:__err_oom
Unexecuted instantiation: init.c:__err_oom
Unexecuted instantiation: ask.c:__err_oom
Unexecuted instantiation: alignment.c:__err_oom
Unexecuted instantiation: label.c:__err_oom
Unexecuted instantiation: utils.c:__err_oom
Unexecuted instantiation: context.c:__err_oom
Unexecuted instantiation: parttype.c:__err_oom
Unexecuted instantiation: partition.c:__err_oom
Unexecuted instantiation: table.c:__err_oom
Unexecuted instantiation: iter.c:__err_oom
Unexecuted instantiation: version.c:__err_oom
Unexecuted instantiation: wipe.c:__err_oom
Unexecuted instantiation: sun.c:__err_oom
Unexecuted instantiation: sgi.c:__err_oom
Unexecuted instantiation: dos.c:__err_oom
Unexecuted instantiation: bsd.c:__err_oom
Unexecuted instantiation: gpt.c:__err_oom
Unexecuted instantiation: blkdev.c:__err_oom
Unexecuted instantiation: canonicalize.c:__err_oom
Unexecuted instantiation: encode.c:__err_oom
Unexecuted instantiation: path.c:__err_oom
Unexecuted instantiation: randutils.c:__err_oom
Unexecuted instantiation: sysfs.c:__err_oom
Unexecuted instantiation: item.c:__err_oom
Unexecuted instantiation: buffer.c:__err_oom
Unexecuted instantiation: cpuset.c:__err_oom
Unexecuted instantiation: mbsalign.c:__err_oom
Unexecuted instantiation: gen_uuid.c:__err_oom
Unexecuted instantiation: parse.c:__err_oom
Unexecuted instantiation: unparse.c:__err_oom
Unexecuted instantiation: probe.c:__err_oom
Unexecuted instantiation: tag.c:__err_oom
Unexecuted instantiation: verify.c:__err_oom
Unexecuted instantiation: partitions.c:__err_oom
Unexecuted instantiation: solaris_x86.c:__err_oom
Unexecuted instantiation: ultrix.c:__err_oom
Unexecuted instantiation: unixware.c:__err_oom
Unexecuted instantiation: superblocks.c:__err_oom
Unexecuted instantiation: swap.c:__err_oom
Unexecuted instantiation: sysv.c:__err_oom
Unexecuted instantiation: ubi.c:__err_oom
Unexecuted instantiation: ubifs.c:__err_oom
Unexecuted instantiation: udf.c:__err_oom
Unexecuted instantiation: ufs.c:__err_oom
Unexecuted instantiation: vdo.c:__err_oom
Unexecuted instantiation: vfat.c:__err_oom
Unexecuted instantiation: via_raid.c:__err_oom
Unexecuted instantiation: vmfs.c:__err_oom
Unexecuted instantiation: vxfs.c:__err_oom
Unexecuted instantiation: xfs.c:__err_oom
Unexecuted instantiation: zfs.c:__err_oom
Unexecuted instantiation: zonefs.c:__err_oom
Unexecuted instantiation: erofs.c:__err_oom
Unexecuted instantiation: topology.c:__err_oom
Unexecuted instantiation: dm.c:__err_oom
Unexecuted instantiation: evms.c:__err_oom
Unexecuted instantiation: ioctl.c:__err_oom
Unexecuted instantiation: lvm.c:__err_oom
Unexecuted instantiation: md.c:__err_oom
Unexecuted instantiation: dev.c:__err_oom
Unexecuted instantiation: devname.c:__err_oom
Unexecuted instantiation: devno.c:__err_oom
Unexecuted instantiation: read.c:__err_oom
Unexecuted instantiation: save.c:__err_oom
Unexecuted instantiation: aix.c:__err_oom
Unexecuted instantiation: atari.c:__err_oom
Unexecuted instantiation: mac.c:__err_oom
Unexecuted instantiation: minix.c:__err_oom
Unexecuted instantiation: adaptec_raid.c:__err_oom
Unexecuted instantiation: apfs.c:__err_oom
Unexecuted instantiation: bcache.c:__err_oom
Unexecuted instantiation: befs.c:__err_oom
Unexecuted instantiation: bfs.c:__err_oom
Unexecuted instantiation: bitlocker.c:__err_oom
Unexecuted instantiation: bluestore.c:__err_oom
Unexecuted instantiation: btrfs.c:__err_oom
Unexecuted instantiation: cs_fvault2.c:__err_oom
Unexecuted instantiation: cramfs.c:__err_oom
Unexecuted instantiation: ddf_raid.c:__err_oom
Unexecuted instantiation: drbd.c:__err_oom
Unexecuted instantiation: drbdproxy_datalog.c:__err_oom
Unexecuted instantiation: drbdmanage.c:__err_oom
Unexecuted instantiation: exfat.c:__err_oom
Unexecuted instantiation: exfs.c:__err_oom
Unexecuted instantiation: ext.c:__err_oom
Unexecuted instantiation: f2fs.c:__err_oom
Unexecuted instantiation: gfs.c:__err_oom
Unexecuted instantiation: hfs.c:__err_oom
Unexecuted instantiation: highpoint_raid.c:__err_oom
Unexecuted instantiation: hpfs.c:__err_oom
Unexecuted instantiation: iso9660.c:__err_oom
Unexecuted instantiation: isw_raid.c:__err_oom
Unexecuted instantiation: jfs.c:__err_oom
Unexecuted instantiation: jmicron_raid.c:__err_oom
Unexecuted instantiation: linux_raid.c:__err_oom
Unexecuted instantiation: lsi_raid.c:__err_oom
Unexecuted instantiation: luks.c:__err_oom
Unexecuted instantiation: mpool.c:__err_oom
Unexecuted instantiation: netware.c:__err_oom
Unexecuted instantiation: nilfs.c:__err_oom
Unexecuted instantiation: ntfs.c:__err_oom
Unexecuted instantiation: refs.c:__err_oom
Unexecuted instantiation: nvidia_raid.c:__err_oom
Unexecuted instantiation: ocfs.c:__err_oom
Unexecuted instantiation: promise_raid.c:__err_oom
Unexecuted instantiation: reiserfs.c:__err_oom
Unexecuted instantiation: romfs.c:__err_oom
Unexecuted instantiation: silicon_raid.c:__err_oom
Unexecuted instantiation: squashfs.c:__err_oom
Unexecuted instantiation: stratis.c:__err_oom
Unexecuted instantiation: cache.c:__err_oom
Unexecuted instantiation: config.c:__err_oom
Unexecuted instantiation: env.c:__err_oom
295
#define err_oom() __err_oom(__FILE__, __LINE__)
296
297
298
/* Don't use inline function to avoid '#include "nls.h"' in c.h
299
 */
300
#define errtryhelp(eval) __extension__ ({ \
301
  fprintf(stderr, _("Try '%s --help' for more information.\n"), \
302
      program_invocation_short_name); \
303
  exit(eval); \
304
})
305
306
/* After failed execvp() */
307
#define EX_EXEC_FAILED    126 /* Program located, but not usable. */
308
#define EX_EXEC_ENOENT    127 /* Could not find program to exec.  */
309
#define errexec(name) err(errno == ENOENT ? EX_EXEC_ENOENT : EX_EXEC_FAILED, \
310
      _("failed to execute %s"), name)
311
312
static inline __attribute__((const)) int is_power_of_2(unsigned long num)
313
0
{
314
0
  return (num != 0 && ((num & (num - 1)) == 0));
315
0
}
Unexecuted instantiation: script.c:is_power_of_2
Unexecuted instantiation: fileutils.c:is_power_of_2
Unexecuted instantiation: jsonwrt.c:is_power_of_2
Unexecuted instantiation: mangle.c:is_power_of_2
Unexecuted instantiation: strutils.c:is_power_of_2
Unexecuted instantiation: init.c:is_power_of_2
Unexecuted instantiation: ask.c:is_power_of_2
Unexecuted instantiation: alignment.c:is_power_of_2
Unexecuted instantiation: label.c:is_power_of_2
Unexecuted instantiation: utils.c:is_power_of_2
Unexecuted instantiation: context.c:is_power_of_2
Unexecuted instantiation: parttype.c:is_power_of_2
Unexecuted instantiation: partition.c:is_power_of_2
Unexecuted instantiation: table.c:is_power_of_2
Unexecuted instantiation: iter.c:is_power_of_2
Unexecuted instantiation: version.c:is_power_of_2
Unexecuted instantiation: wipe.c:is_power_of_2
Unexecuted instantiation: sun.c:is_power_of_2
Unexecuted instantiation: sgi.c:is_power_of_2
Unexecuted instantiation: dos.c:is_power_of_2
Unexecuted instantiation: bsd.c:is_power_of_2
Unexecuted instantiation: gpt.c:is_power_of_2
Unexecuted instantiation: blkdev.c:is_power_of_2
Unexecuted instantiation: canonicalize.c:is_power_of_2
Unexecuted instantiation: encode.c:is_power_of_2
Unexecuted instantiation: path.c:is_power_of_2
Unexecuted instantiation: randutils.c:is_power_of_2
Unexecuted instantiation: sysfs.c:is_power_of_2
Unexecuted instantiation: item.c:is_power_of_2
Unexecuted instantiation: buffer.c:is_power_of_2
Unexecuted instantiation: cpuset.c:is_power_of_2
Unexecuted instantiation: mbsalign.c:is_power_of_2
Unexecuted instantiation: gen_uuid.c:is_power_of_2
Unexecuted instantiation: parse.c:is_power_of_2
Unexecuted instantiation: unparse.c:is_power_of_2
Unexecuted instantiation: probe.c:is_power_of_2
Unexecuted instantiation: tag.c:is_power_of_2
Unexecuted instantiation: verify.c:is_power_of_2
Unexecuted instantiation: partitions.c:is_power_of_2
Unexecuted instantiation: solaris_x86.c:is_power_of_2
Unexecuted instantiation: ultrix.c:is_power_of_2
Unexecuted instantiation: unixware.c:is_power_of_2
Unexecuted instantiation: superblocks.c:is_power_of_2
Unexecuted instantiation: swap.c:is_power_of_2
Unexecuted instantiation: sysv.c:is_power_of_2
Unexecuted instantiation: ubi.c:is_power_of_2
Unexecuted instantiation: ubifs.c:is_power_of_2
Unexecuted instantiation: udf.c:is_power_of_2
Unexecuted instantiation: ufs.c:is_power_of_2
Unexecuted instantiation: vdo.c:is_power_of_2
Unexecuted instantiation: vfat.c:is_power_of_2
Unexecuted instantiation: via_raid.c:is_power_of_2
Unexecuted instantiation: vmfs.c:is_power_of_2
Unexecuted instantiation: vxfs.c:is_power_of_2
Unexecuted instantiation: xfs.c:is_power_of_2
Unexecuted instantiation: zfs.c:is_power_of_2
Unexecuted instantiation: zonefs.c:is_power_of_2
Unexecuted instantiation: erofs.c:is_power_of_2
Unexecuted instantiation: topology.c:is_power_of_2
Unexecuted instantiation: dm.c:is_power_of_2
Unexecuted instantiation: evms.c:is_power_of_2
Unexecuted instantiation: ioctl.c:is_power_of_2
Unexecuted instantiation: lvm.c:is_power_of_2
Unexecuted instantiation: md.c:is_power_of_2
Unexecuted instantiation: dev.c:is_power_of_2
Unexecuted instantiation: devname.c:is_power_of_2
Unexecuted instantiation: devno.c:is_power_of_2
Unexecuted instantiation: read.c:is_power_of_2
Unexecuted instantiation: save.c:is_power_of_2
Unexecuted instantiation: aix.c:is_power_of_2
Unexecuted instantiation: atari.c:is_power_of_2
Unexecuted instantiation: mac.c:is_power_of_2
Unexecuted instantiation: minix.c:is_power_of_2
Unexecuted instantiation: adaptec_raid.c:is_power_of_2
Unexecuted instantiation: apfs.c:is_power_of_2
Unexecuted instantiation: bcache.c:is_power_of_2
Unexecuted instantiation: befs.c:is_power_of_2
Unexecuted instantiation: bfs.c:is_power_of_2
Unexecuted instantiation: bitlocker.c:is_power_of_2
Unexecuted instantiation: bluestore.c:is_power_of_2
Unexecuted instantiation: btrfs.c:is_power_of_2
Unexecuted instantiation: cs_fvault2.c:is_power_of_2
Unexecuted instantiation: cramfs.c:is_power_of_2
Unexecuted instantiation: ddf_raid.c:is_power_of_2
Unexecuted instantiation: drbd.c:is_power_of_2
Unexecuted instantiation: drbdproxy_datalog.c:is_power_of_2
Unexecuted instantiation: drbdmanage.c:is_power_of_2
Unexecuted instantiation: exfat.c:is_power_of_2
Unexecuted instantiation: exfs.c:is_power_of_2
Unexecuted instantiation: ext.c:is_power_of_2
Unexecuted instantiation: f2fs.c:is_power_of_2
Unexecuted instantiation: gfs.c:is_power_of_2
Unexecuted instantiation: hfs.c:is_power_of_2
Unexecuted instantiation: highpoint_raid.c:is_power_of_2
Unexecuted instantiation: hpfs.c:is_power_of_2
Unexecuted instantiation: iso9660.c:is_power_of_2
Unexecuted instantiation: isw_raid.c:is_power_of_2
Unexecuted instantiation: jfs.c:is_power_of_2
Unexecuted instantiation: jmicron_raid.c:is_power_of_2
Unexecuted instantiation: linux_raid.c:is_power_of_2
Unexecuted instantiation: lsi_raid.c:is_power_of_2
Unexecuted instantiation: luks.c:is_power_of_2
Unexecuted instantiation: mpool.c:is_power_of_2
Unexecuted instantiation: netware.c:is_power_of_2
Unexecuted instantiation: nilfs.c:is_power_of_2
Unexecuted instantiation: ntfs.c:is_power_of_2
Unexecuted instantiation: refs.c:is_power_of_2
Unexecuted instantiation: nvidia_raid.c:is_power_of_2
Unexecuted instantiation: ocfs.c:is_power_of_2
Unexecuted instantiation: promise_raid.c:is_power_of_2
Unexecuted instantiation: reiserfs.c:is_power_of_2
Unexecuted instantiation: romfs.c:is_power_of_2
Unexecuted instantiation: silicon_raid.c:is_power_of_2
Unexecuted instantiation: squashfs.c:is_power_of_2
Unexecuted instantiation: stratis.c:is_power_of_2
Unexecuted instantiation: cache.c:is_power_of_2
Unexecuted instantiation: config.c:is_power_of_2
Unexecuted instantiation: env.c:is_power_of_2
316
317
#ifndef HAVE_LOFF_T
318
typedef int64_t loff_t;
319
#endif
320
321
#if !defined(HAVE_DIRFD) \
322
    && (!defined(HAVE_DECL_DIRFD) || HAVE_DECL_DIRFD == 0) \
323
    && defined(HAVE_DIR_DD_FD)
324
#include <dirent.h>
325
static inline int dirfd(DIR *d)
326
{
327
  return d->dd_fd;
328
}
329
#endif
330
331
/*
332
 * Fallback defines for old versions of glibc
333
 */
334
#include <fcntl.h>
335
336
#ifdef O_CLOEXEC
337
2.04k
#define UL_CLOEXECSTR "e"
338
#else
339
#define UL_CLOEXECSTR ""
340
#endif
341
342
#ifndef O_CLOEXEC
343
#define O_CLOEXEC 0
344
#endif
345
346
#ifdef __FreeBSD_kernel__
347
#ifndef F_DUPFD_CLOEXEC
348
#define F_DUPFD_CLOEXEC 17  /* Like F_DUPFD, but FD_CLOEXEC is set */
349
#endif
350
#endif
351
352
353
#ifndef AI_ADDRCONFIG
354
#define AI_ADDRCONFIG 0x0020
355
#endif
356
357
#ifndef IUTF8
358
#define IUTF8 0040000
359
#endif
360
361
/*
362
 * MAXHOSTNAMELEN replacement
363
 */
364
static inline size_t get_hostname_max(void)
365
0
{
366
0
  long len = sysconf(_SC_HOST_NAME_MAX);
367
0
368
0
  if (0 < len)
369
0
    return len;
370
0
371
0
#ifdef MAXHOSTNAMELEN
372
0
  return MAXHOSTNAMELEN;
373
0
#elif HOST_NAME_MAX
374
0
  return HOST_NAME_MAX;
375
0
#endif
376
0
  return 64;
377
0
}
Unexecuted instantiation: script.c:get_hostname_max
Unexecuted instantiation: fileutils.c:get_hostname_max
Unexecuted instantiation: jsonwrt.c:get_hostname_max
Unexecuted instantiation: mangle.c:get_hostname_max
Unexecuted instantiation: strutils.c:get_hostname_max
Unexecuted instantiation: init.c:get_hostname_max
Unexecuted instantiation: ask.c:get_hostname_max
Unexecuted instantiation: alignment.c:get_hostname_max
Unexecuted instantiation: label.c:get_hostname_max
Unexecuted instantiation: utils.c:get_hostname_max
Unexecuted instantiation: context.c:get_hostname_max
Unexecuted instantiation: parttype.c:get_hostname_max
Unexecuted instantiation: partition.c:get_hostname_max
Unexecuted instantiation: table.c:get_hostname_max
Unexecuted instantiation: iter.c:get_hostname_max
Unexecuted instantiation: version.c:get_hostname_max
Unexecuted instantiation: wipe.c:get_hostname_max
Unexecuted instantiation: sun.c:get_hostname_max
Unexecuted instantiation: sgi.c:get_hostname_max
Unexecuted instantiation: dos.c:get_hostname_max
Unexecuted instantiation: bsd.c:get_hostname_max
Unexecuted instantiation: gpt.c:get_hostname_max
Unexecuted instantiation: blkdev.c:get_hostname_max
Unexecuted instantiation: canonicalize.c:get_hostname_max
Unexecuted instantiation: encode.c:get_hostname_max
Unexecuted instantiation: path.c:get_hostname_max
Unexecuted instantiation: randutils.c:get_hostname_max
Unexecuted instantiation: sysfs.c:get_hostname_max
Unexecuted instantiation: item.c:get_hostname_max
Unexecuted instantiation: buffer.c:get_hostname_max
Unexecuted instantiation: cpuset.c:get_hostname_max
Unexecuted instantiation: mbsalign.c:get_hostname_max
Unexecuted instantiation: gen_uuid.c:get_hostname_max
Unexecuted instantiation: parse.c:get_hostname_max
Unexecuted instantiation: unparse.c:get_hostname_max
Unexecuted instantiation: probe.c:get_hostname_max
Unexecuted instantiation: tag.c:get_hostname_max
Unexecuted instantiation: verify.c:get_hostname_max
Unexecuted instantiation: partitions.c:get_hostname_max
Unexecuted instantiation: solaris_x86.c:get_hostname_max
Unexecuted instantiation: ultrix.c:get_hostname_max
Unexecuted instantiation: unixware.c:get_hostname_max
Unexecuted instantiation: superblocks.c:get_hostname_max
Unexecuted instantiation: swap.c:get_hostname_max
Unexecuted instantiation: sysv.c:get_hostname_max
Unexecuted instantiation: ubi.c:get_hostname_max
Unexecuted instantiation: ubifs.c:get_hostname_max
Unexecuted instantiation: udf.c:get_hostname_max
Unexecuted instantiation: ufs.c:get_hostname_max
Unexecuted instantiation: vdo.c:get_hostname_max
Unexecuted instantiation: vfat.c:get_hostname_max
Unexecuted instantiation: via_raid.c:get_hostname_max
Unexecuted instantiation: vmfs.c:get_hostname_max
Unexecuted instantiation: vxfs.c:get_hostname_max
Unexecuted instantiation: xfs.c:get_hostname_max
Unexecuted instantiation: zfs.c:get_hostname_max
Unexecuted instantiation: zonefs.c:get_hostname_max
Unexecuted instantiation: erofs.c:get_hostname_max
Unexecuted instantiation: topology.c:get_hostname_max
Unexecuted instantiation: dm.c:get_hostname_max
Unexecuted instantiation: evms.c:get_hostname_max
Unexecuted instantiation: ioctl.c:get_hostname_max
Unexecuted instantiation: lvm.c:get_hostname_max
Unexecuted instantiation: md.c:get_hostname_max
Unexecuted instantiation: dev.c:get_hostname_max
Unexecuted instantiation: devname.c:get_hostname_max
Unexecuted instantiation: devno.c:get_hostname_max
Unexecuted instantiation: read.c:get_hostname_max
Unexecuted instantiation: save.c:get_hostname_max
Unexecuted instantiation: aix.c:get_hostname_max
Unexecuted instantiation: atari.c:get_hostname_max
Unexecuted instantiation: mac.c:get_hostname_max
Unexecuted instantiation: minix.c:get_hostname_max
Unexecuted instantiation: adaptec_raid.c:get_hostname_max
Unexecuted instantiation: apfs.c:get_hostname_max
Unexecuted instantiation: bcache.c:get_hostname_max
Unexecuted instantiation: befs.c:get_hostname_max
Unexecuted instantiation: bfs.c:get_hostname_max
Unexecuted instantiation: bitlocker.c:get_hostname_max
Unexecuted instantiation: bluestore.c:get_hostname_max
Unexecuted instantiation: btrfs.c:get_hostname_max
Unexecuted instantiation: cs_fvault2.c:get_hostname_max
Unexecuted instantiation: cramfs.c:get_hostname_max
Unexecuted instantiation: ddf_raid.c:get_hostname_max
Unexecuted instantiation: drbd.c:get_hostname_max
Unexecuted instantiation: drbdproxy_datalog.c:get_hostname_max
Unexecuted instantiation: drbdmanage.c:get_hostname_max
Unexecuted instantiation: exfat.c:get_hostname_max
Unexecuted instantiation: exfs.c:get_hostname_max
Unexecuted instantiation: ext.c:get_hostname_max
Unexecuted instantiation: f2fs.c:get_hostname_max
Unexecuted instantiation: gfs.c:get_hostname_max
Unexecuted instantiation: hfs.c:get_hostname_max
Unexecuted instantiation: highpoint_raid.c:get_hostname_max
Unexecuted instantiation: hpfs.c:get_hostname_max
Unexecuted instantiation: iso9660.c:get_hostname_max
Unexecuted instantiation: isw_raid.c:get_hostname_max
Unexecuted instantiation: jfs.c:get_hostname_max
Unexecuted instantiation: jmicron_raid.c:get_hostname_max
Unexecuted instantiation: linux_raid.c:get_hostname_max
Unexecuted instantiation: lsi_raid.c:get_hostname_max
Unexecuted instantiation: luks.c:get_hostname_max
Unexecuted instantiation: mpool.c:get_hostname_max
Unexecuted instantiation: netware.c:get_hostname_max
Unexecuted instantiation: nilfs.c:get_hostname_max
Unexecuted instantiation: ntfs.c:get_hostname_max
Unexecuted instantiation: refs.c:get_hostname_max
Unexecuted instantiation: nvidia_raid.c:get_hostname_max
Unexecuted instantiation: ocfs.c:get_hostname_max
Unexecuted instantiation: promise_raid.c:get_hostname_max
Unexecuted instantiation: reiserfs.c:get_hostname_max
Unexecuted instantiation: romfs.c:get_hostname_max
Unexecuted instantiation: silicon_raid.c:get_hostname_max
Unexecuted instantiation: squashfs.c:get_hostname_max
Unexecuted instantiation: stratis.c:get_hostname_max
Unexecuted instantiation: cache.c:get_hostname_max
Unexecuted instantiation: config.c:get_hostname_max
Unexecuted instantiation: env.c:get_hostname_max
378
379
380
static inline int drop_permissions(void)
381
0
{
382
0
  errno = 0;
383
384
  /* drop GID */
385
0
  if (setgid(getgid()) < 0)
386
0
    goto fail;
387
388
  /* drop UID */
389
0
  if (setuid(getuid()) < 0)
390
0
    goto fail;
391
392
0
  return 0;
393
0
fail:
394
0
  return errno ? -errno : -1;
395
0
}
Unexecuted instantiation: script.c:drop_permissions
Unexecuted instantiation: fileutils.c:drop_permissions
Unexecuted instantiation: jsonwrt.c:drop_permissions
Unexecuted instantiation: mangle.c:drop_permissions
Unexecuted instantiation: strutils.c:drop_permissions
Unexecuted instantiation: init.c:drop_permissions
Unexecuted instantiation: ask.c:drop_permissions
Unexecuted instantiation: alignment.c:drop_permissions
Unexecuted instantiation: label.c:drop_permissions
Unexecuted instantiation: utils.c:drop_permissions
Unexecuted instantiation: context.c:drop_permissions
Unexecuted instantiation: parttype.c:drop_permissions
Unexecuted instantiation: partition.c:drop_permissions
Unexecuted instantiation: table.c:drop_permissions
Unexecuted instantiation: iter.c:drop_permissions
Unexecuted instantiation: version.c:drop_permissions
Unexecuted instantiation: wipe.c:drop_permissions
Unexecuted instantiation: sun.c:drop_permissions
Unexecuted instantiation: sgi.c:drop_permissions
Unexecuted instantiation: dos.c:drop_permissions
Unexecuted instantiation: bsd.c:drop_permissions
Unexecuted instantiation: gpt.c:drop_permissions
Unexecuted instantiation: blkdev.c:drop_permissions
Unexecuted instantiation: canonicalize.c:drop_permissions
Unexecuted instantiation: encode.c:drop_permissions
Unexecuted instantiation: path.c:drop_permissions
Unexecuted instantiation: randutils.c:drop_permissions
Unexecuted instantiation: sysfs.c:drop_permissions
Unexecuted instantiation: item.c:drop_permissions
Unexecuted instantiation: buffer.c:drop_permissions
Unexecuted instantiation: cpuset.c:drop_permissions
Unexecuted instantiation: mbsalign.c:drop_permissions
Unexecuted instantiation: gen_uuid.c:drop_permissions
Unexecuted instantiation: parse.c:drop_permissions
Unexecuted instantiation: unparse.c:drop_permissions
Unexecuted instantiation: probe.c:drop_permissions
Unexecuted instantiation: tag.c:drop_permissions
Unexecuted instantiation: verify.c:drop_permissions
Unexecuted instantiation: partitions.c:drop_permissions
Unexecuted instantiation: solaris_x86.c:drop_permissions
Unexecuted instantiation: ultrix.c:drop_permissions
Unexecuted instantiation: unixware.c:drop_permissions
Unexecuted instantiation: superblocks.c:drop_permissions
Unexecuted instantiation: swap.c:drop_permissions
Unexecuted instantiation: sysv.c:drop_permissions
Unexecuted instantiation: ubi.c:drop_permissions
Unexecuted instantiation: ubifs.c:drop_permissions
Unexecuted instantiation: udf.c:drop_permissions
Unexecuted instantiation: ufs.c:drop_permissions
Unexecuted instantiation: vdo.c:drop_permissions
Unexecuted instantiation: vfat.c:drop_permissions
Unexecuted instantiation: via_raid.c:drop_permissions
Unexecuted instantiation: vmfs.c:drop_permissions
Unexecuted instantiation: vxfs.c:drop_permissions
Unexecuted instantiation: xfs.c:drop_permissions
Unexecuted instantiation: zfs.c:drop_permissions
Unexecuted instantiation: zonefs.c:drop_permissions
Unexecuted instantiation: erofs.c:drop_permissions
Unexecuted instantiation: topology.c:drop_permissions
Unexecuted instantiation: dm.c:drop_permissions
Unexecuted instantiation: evms.c:drop_permissions
Unexecuted instantiation: ioctl.c:drop_permissions
Unexecuted instantiation: lvm.c:drop_permissions
Unexecuted instantiation: md.c:drop_permissions
Unexecuted instantiation: dev.c:drop_permissions
Unexecuted instantiation: devname.c:drop_permissions
Unexecuted instantiation: devno.c:drop_permissions
Unexecuted instantiation: read.c:drop_permissions
Unexecuted instantiation: save.c:drop_permissions
Unexecuted instantiation: aix.c:drop_permissions
Unexecuted instantiation: atari.c:drop_permissions
Unexecuted instantiation: mac.c:drop_permissions
Unexecuted instantiation: minix.c:drop_permissions
Unexecuted instantiation: adaptec_raid.c:drop_permissions
Unexecuted instantiation: apfs.c:drop_permissions
Unexecuted instantiation: bcache.c:drop_permissions
Unexecuted instantiation: befs.c:drop_permissions
Unexecuted instantiation: bfs.c:drop_permissions
Unexecuted instantiation: bitlocker.c:drop_permissions
Unexecuted instantiation: bluestore.c:drop_permissions
Unexecuted instantiation: btrfs.c:drop_permissions
Unexecuted instantiation: cs_fvault2.c:drop_permissions
Unexecuted instantiation: cramfs.c:drop_permissions
Unexecuted instantiation: ddf_raid.c:drop_permissions
Unexecuted instantiation: drbd.c:drop_permissions
Unexecuted instantiation: drbdproxy_datalog.c:drop_permissions
Unexecuted instantiation: drbdmanage.c:drop_permissions
Unexecuted instantiation: exfat.c:drop_permissions
Unexecuted instantiation: exfs.c:drop_permissions
Unexecuted instantiation: ext.c:drop_permissions
Unexecuted instantiation: f2fs.c:drop_permissions
Unexecuted instantiation: gfs.c:drop_permissions
Unexecuted instantiation: hfs.c:drop_permissions
Unexecuted instantiation: highpoint_raid.c:drop_permissions
Unexecuted instantiation: hpfs.c:drop_permissions
Unexecuted instantiation: iso9660.c:drop_permissions
Unexecuted instantiation: isw_raid.c:drop_permissions
Unexecuted instantiation: jfs.c:drop_permissions
Unexecuted instantiation: jmicron_raid.c:drop_permissions
Unexecuted instantiation: linux_raid.c:drop_permissions
Unexecuted instantiation: lsi_raid.c:drop_permissions
Unexecuted instantiation: luks.c:drop_permissions
Unexecuted instantiation: mpool.c:drop_permissions
Unexecuted instantiation: netware.c:drop_permissions
Unexecuted instantiation: nilfs.c:drop_permissions
Unexecuted instantiation: ntfs.c:drop_permissions
Unexecuted instantiation: refs.c:drop_permissions
Unexecuted instantiation: nvidia_raid.c:drop_permissions
Unexecuted instantiation: ocfs.c:drop_permissions
Unexecuted instantiation: promise_raid.c:drop_permissions
Unexecuted instantiation: reiserfs.c:drop_permissions
Unexecuted instantiation: romfs.c:drop_permissions
Unexecuted instantiation: silicon_raid.c:drop_permissions
Unexecuted instantiation: squashfs.c:drop_permissions
Unexecuted instantiation: stratis.c:drop_permissions
Unexecuted instantiation: cache.c:drop_permissions
Unexecuted instantiation: config.c:drop_permissions
Unexecuted instantiation: env.c:drop_permissions
396
397
/*
398
 * The usleep function was marked obsolete in POSIX.1-2001 and was removed
399
 * in POSIX.1-2008.  It was replaced with nanosleep() that provides more
400
 * advantages (like no interaction with signals and other timer functions).
401
 */
402
#include <time.h>
403
404
static inline int xusleep(useconds_t usec)
405
0
{
406
0
#ifdef HAVE_NANOSLEEP
407
0
  struct timespec waittime = {
408
0
    .tv_sec   =  usec / 1000000L,
409
0
    .tv_nsec  = (usec % 1000000L) * 1000
410
0
  };
411
0
  return nanosleep(&waittime, NULL);
412
#elif defined(HAVE_USLEEP)
413
  return usleep(usec);
414
#else
415
# error "System with usleep() or nanosleep() required!"
416
#endif
417
0
}
Unexecuted instantiation: script.c:xusleep
Unexecuted instantiation: fileutils.c:xusleep
Unexecuted instantiation: jsonwrt.c:xusleep
Unexecuted instantiation: mangle.c:xusleep
Unexecuted instantiation: strutils.c:xusleep
Unexecuted instantiation: init.c:xusleep
Unexecuted instantiation: ask.c:xusleep
Unexecuted instantiation: alignment.c:xusleep
Unexecuted instantiation: label.c:xusleep
Unexecuted instantiation: utils.c:xusleep
Unexecuted instantiation: context.c:xusleep
Unexecuted instantiation: parttype.c:xusleep
Unexecuted instantiation: partition.c:xusleep
Unexecuted instantiation: table.c:xusleep
Unexecuted instantiation: iter.c:xusleep
Unexecuted instantiation: version.c:xusleep
Unexecuted instantiation: wipe.c:xusleep
Unexecuted instantiation: sun.c:xusleep
Unexecuted instantiation: sgi.c:xusleep
Unexecuted instantiation: dos.c:xusleep
Unexecuted instantiation: bsd.c:xusleep
Unexecuted instantiation: gpt.c:xusleep
Unexecuted instantiation: blkdev.c:xusleep
Unexecuted instantiation: canonicalize.c:xusleep
Unexecuted instantiation: encode.c:xusleep
Unexecuted instantiation: path.c:xusleep
Unexecuted instantiation: randutils.c:xusleep
Unexecuted instantiation: sysfs.c:xusleep
Unexecuted instantiation: item.c:xusleep
Unexecuted instantiation: buffer.c:xusleep
Unexecuted instantiation: cpuset.c:xusleep
Unexecuted instantiation: mbsalign.c:xusleep
Unexecuted instantiation: gen_uuid.c:xusleep
Unexecuted instantiation: parse.c:xusleep
Unexecuted instantiation: unparse.c:xusleep
Unexecuted instantiation: probe.c:xusleep
Unexecuted instantiation: tag.c:xusleep
Unexecuted instantiation: verify.c:xusleep
Unexecuted instantiation: partitions.c:xusleep
Unexecuted instantiation: solaris_x86.c:xusleep
Unexecuted instantiation: ultrix.c:xusleep
Unexecuted instantiation: unixware.c:xusleep
Unexecuted instantiation: superblocks.c:xusleep
Unexecuted instantiation: swap.c:xusleep
Unexecuted instantiation: sysv.c:xusleep
Unexecuted instantiation: ubi.c:xusleep
Unexecuted instantiation: ubifs.c:xusleep
Unexecuted instantiation: udf.c:xusleep
Unexecuted instantiation: ufs.c:xusleep
Unexecuted instantiation: vdo.c:xusleep
Unexecuted instantiation: vfat.c:xusleep
Unexecuted instantiation: via_raid.c:xusleep
Unexecuted instantiation: vmfs.c:xusleep
Unexecuted instantiation: vxfs.c:xusleep
Unexecuted instantiation: xfs.c:xusleep
Unexecuted instantiation: zfs.c:xusleep
Unexecuted instantiation: zonefs.c:xusleep
Unexecuted instantiation: erofs.c:xusleep
Unexecuted instantiation: topology.c:xusleep
Unexecuted instantiation: dm.c:xusleep
Unexecuted instantiation: evms.c:xusleep
Unexecuted instantiation: ioctl.c:xusleep
Unexecuted instantiation: lvm.c:xusleep
Unexecuted instantiation: md.c:xusleep
Unexecuted instantiation: dev.c:xusleep
Unexecuted instantiation: devname.c:xusleep
Unexecuted instantiation: devno.c:xusleep
Unexecuted instantiation: read.c:xusleep
Unexecuted instantiation: save.c:xusleep
Unexecuted instantiation: aix.c:xusleep
Unexecuted instantiation: atari.c:xusleep
Unexecuted instantiation: mac.c:xusleep
Unexecuted instantiation: minix.c:xusleep
Unexecuted instantiation: adaptec_raid.c:xusleep
Unexecuted instantiation: apfs.c:xusleep
Unexecuted instantiation: bcache.c:xusleep
Unexecuted instantiation: befs.c:xusleep
Unexecuted instantiation: bfs.c:xusleep
Unexecuted instantiation: bitlocker.c:xusleep
Unexecuted instantiation: bluestore.c:xusleep
Unexecuted instantiation: btrfs.c:xusleep
Unexecuted instantiation: cs_fvault2.c:xusleep
Unexecuted instantiation: cramfs.c:xusleep
Unexecuted instantiation: ddf_raid.c:xusleep
Unexecuted instantiation: drbd.c:xusleep
Unexecuted instantiation: drbdproxy_datalog.c:xusleep
Unexecuted instantiation: drbdmanage.c:xusleep
Unexecuted instantiation: exfat.c:xusleep
Unexecuted instantiation: exfs.c:xusleep
Unexecuted instantiation: ext.c:xusleep
Unexecuted instantiation: f2fs.c:xusleep
Unexecuted instantiation: gfs.c:xusleep
Unexecuted instantiation: hfs.c:xusleep
Unexecuted instantiation: highpoint_raid.c:xusleep
Unexecuted instantiation: hpfs.c:xusleep
Unexecuted instantiation: iso9660.c:xusleep
Unexecuted instantiation: isw_raid.c:xusleep
Unexecuted instantiation: jfs.c:xusleep
Unexecuted instantiation: jmicron_raid.c:xusleep
Unexecuted instantiation: linux_raid.c:xusleep
Unexecuted instantiation: lsi_raid.c:xusleep
Unexecuted instantiation: luks.c:xusleep
Unexecuted instantiation: mpool.c:xusleep
Unexecuted instantiation: netware.c:xusleep
Unexecuted instantiation: nilfs.c:xusleep
Unexecuted instantiation: ntfs.c:xusleep
Unexecuted instantiation: refs.c:xusleep
Unexecuted instantiation: nvidia_raid.c:xusleep
Unexecuted instantiation: ocfs.c:xusleep
Unexecuted instantiation: promise_raid.c:xusleep
Unexecuted instantiation: reiserfs.c:xusleep
Unexecuted instantiation: romfs.c:xusleep
Unexecuted instantiation: silicon_raid.c:xusleep
Unexecuted instantiation: squashfs.c:xusleep
Unexecuted instantiation: stratis.c:xusleep
Unexecuted instantiation: cache.c:xusleep
Unexecuted instantiation: config.c:xusleep
Unexecuted instantiation: env.c:xusleep
418
419
420
#define ul_err_write(_m) ignore_result( write(STDERR_FILENO, _m, strlen(_m)) )
421
422
/*
423
 * warn() for signal handlers
424
 */
425
static inline void ul_sig_warn(const char *mesg)
426
0
{
427
0
  ul_err_write(program_invocation_short_name);
428
0
  ul_err_write(": ");
429
0
  ul_err_write(mesg);
430
0
  ul_err_write("\n");
431
0
}
Unexecuted instantiation: script.c:ul_sig_warn
Unexecuted instantiation: fileutils.c:ul_sig_warn
Unexecuted instantiation: jsonwrt.c:ul_sig_warn
Unexecuted instantiation: mangle.c:ul_sig_warn
Unexecuted instantiation: strutils.c:ul_sig_warn
Unexecuted instantiation: init.c:ul_sig_warn
Unexecuted instantiation: ask.c:ul_sig_warn
Unexecuted instantiation: alignment.c:ul_sig_warn
Unexecuted instantiation: label.c:ul_sig_warn
Unexecuted instantiation: utils.c:ul_sig_warn
Unexecuted instantiation: context.c:ul_sig_warn
Unexecuted instantiation: parttype.c:ul_sig_warn
Unexecuted instantiation: partition.c:ul_sig_warn
Unexecuted instantiation: table.c:ul_sig_warn
Unexecuted instantiation: iter.c:ul_sig_warn
Unexecuted instantiation: version.c:ul_sig_warn
Unexecuted instantiation: wipe.c:ul_sig_warn
Unexecuted instantiation: sun.c:ul_sig_warn
Unexecuted instantiation: sgi.c:ul_sig_warn
Unexecuted instantiation: dos.c:ul_sig_warn
Unexecuted instantiation: bsd.c:ul_sig_warn
Unexecuted instantiation: gpt.c:ul_sig_warn
Unexecuted instantiation: blkdev.c:ul_sig_warn
Unexecuted instantiation: canonicalize.c:ul_sig_warn
Unexecuted instantiation: encode.c:ul_sig_warn
Unexecuted instantiation: path.c:ul_sig_warn
Unexecuted instantiation: randutils.c:ul_sig_warn
Unexecuted instantiation: sysfs.c:ul_sig_warn
Unexecuted instantiation: item.c:ul_sig_warn
Unexecuted instantiation: buffer.c:ul_sig_warn
Unexecuted instantiation: cpuset.c:ul_sig_warn
Unexecuted instantiation: mbsalign.c:ul_sig_warn
Unexecuted instantiation: gen_uuid.c:ul_sig_warn
Unexecuted instantiation: parse.c:ul_sig_warn
Unexecuted instantiation: unparse.c:ul_sig_warn
Unexecuted instantiation: probe.c:ul_sig_warn
Unexecuted instantiation: tag.c:ul_sig_warn
Unexecuted instantiation: verify.c:ul_sig_warn
Unexecuted instantiation: partitions.c:ul_sig_warn
Unexecuted instantiation: solaris_x86.c:ul_sig_warn
Unexecuted instantiation: ultrix.c:ul_sig_warn
Unexecuted instantiation: unixware.c:ul_sig_warn
Unexecuted instantiation: superblocks.c:ul_sig_warn
Unexecuted instantiation: swap.c:ul_sig_warn
Unexecuted instantiation: sysv.c:ul_sig_warn
Unexecuted instantiation: ubi.c:ul_sig_warn
Unexecuted instantiation: ubifs.c:ul_sig_warn
Unexecuted instantiation: udf.c:ul_sig_warn
Unexecuted instantiation: ufs.c:ul_sig_warn
Unexecuted instantiation: vdo.c:ul_sig_warn
Unexecuted instantiation: vfat.c:ul_sig_warn
Unexecuted instantiation: via_raid.c:ul_sig_warn
Unexecuted instantiation: vmfs.c:ul_sig_warn
Unexecuted instantiation: vxfs.c:ul_sig_warn
Unexecuted instantiation: xfs.c:ul_sig_warn
Unexecuted instantiation: zfs.c:ul_sig_warn
Unexecuted instantiation: zonefs.c:ul_sig_warn
Unexecuted instantiation: erofs.c:ul_sig_warn
Unexecuted instantiation: topology.c:ul_sig_warn
Unexecuted instantiation: dm.c:ul_sig_warn
Unexecuted instantiation: evms.c:ul_sig_warn
Unexecuted instantiation: ioctl.c:ul_sig_warn
Unexecuted instantiation: lvm.c:ul_sig_warn
Unexecuted instantiation: md.c:ul_sig_warn
Unexecuted instantiation: dev.c:ul_sig_warn
Unexecuted instantiation: devname.c:ul_sig_warn
Unexecuted instantiation: devno.c:ul_sig_warn
Unexecuted instantiation: read.c:ul_sig_warn
Unexecuted instantiation: save.c:ul_sig_warn
Unexecuted instantiation: aix.c:ul_sig_warn
Unexecuted instantiation: atari.c:ul_sig_warn
Unexecuted instantiation: mac.c:ul_sig_warn
Unexecuted instantiation: minix.c:ul_sig_warn
Unexecuted instantiation: adaptec_raid.c:ul_sig_warn
Unexecuted instantiation: apfs.c:ul_sig_warn
Unexecuted instantiation: bcache.c:ul_sig_warn
Unexecuted instantiation: befs.c:ul_sig_warn
Unexecuted instantiation: bfs.c:ul_sig_warn
Unexecuted instantiation: bitlocker.c:ul_sig_warn
Unexecuted instantiation: bluestore.c:ul_sig_warn
Unexecuted instantiation: btrfs.c:ul_sig_warn
Unexecuted instantiation: cs_fvault2.c:ul_sig_warn
Unexecuted instantiation: cramfs.c:ul_sig_warn
Unexecuted instantiation: ddf_raid.c:ul_sig_warn
Unexecuted instantiation: drbd.c:ul_sig_warn
Unexecuted instantiation: drbdproxy_datalog.c:ul_sig_warn
Unexecuted instantiation: drbdmanage.c:ul_sig_warn
Unexecuted instantiation: exfat.c:ul_sig_warn
Unexecuted instantiation: exfs.c:ul_sig_warn
Unexecuted instantiation: ext.c:ul_sig_warn
Unexecuted instantiation: f2fs.c:ul_sig_warn
Unexecuted instantiation: gfs.c:ul_sig_warn
Unexecuted instantiation: hfs.c:ul_sig_warn
Unexecuted instantiation: highpoint_raid.c:ul_sig_warn
Unexecuted instantiation: hpfs.c:ul_sig_warn
Unexecuted instantiation: iso9660.c:ul_sig_warn
Unexecuted instantiation: isw_raid.c:ul_sig_warn
Unexecuted instantiation: jfs.c:ul_sig_warn
Unexecuted instantiation: jmicron_raid.c:ul_sig_warn
Unexecuted instantiation: linux_raid.c:ul_sig_warn
Unexecuted instantiation: lsi_raid.c:ul_sig_warn
Unexecuted instantiation: luks.c:ul_sig_warn
Unexecuted instantiation: mpool.c:ul_sig_warn
Unexecuted instantiation: netware.c:ul_sig_warn
Unexecuted instantiation: nilfs.c:ul_sig_warn
Unexecuted instantiation: ntfs.c:ul_sig_warn
Unexecuted instantiation: refs.c:ul_sig_warn
Unexecuted instantiation: nvidia_raid.c:ul_sig_warn
Unexecuted instantiation: ocfs.c:ul_sig_warn
Unexecuted instantiation: promise_raid.c:ul_sig_warn
Unexecuted instantiation: reiserfs.c:ul_sig_warn
Unexecuted instantiation: romfs.c:ul_sig_warn
Unexecuted instantiation: silicon_raid.c:ul_sig_warn
Unexecuted instantiation: squashfs.c:ul_sig_warn
Unexecuted instantiation: stratis.c:ul_sig_warn
Unexecuted instantiation: cache.c:ul_sig_warn
Unexecuted instantiation: config.c:ul_sig_warn
Unexecuted instantiation: env.c:ul_sig_warn
432
433
/*
434
 * err() for signal handlers
435
 */
436
static inline void __attribute__((__noreturn__)) ul_sig_err(int excode, const char *mesg)
437
0
{
438
0
  ul_sig_warn(mesg);
439
0
  _exit(excode);
440
0
}
Unexecuted instantiation: script.c:ul_sig_err
Unexecuted instantiation: fileutils.c:ul_sig_err
Unexecuted instantiation: jsonwrt.c:ul_sig_err
Unexecuted instantiation: mangle.c:ul_sig_err
Unexecuted instantiation: strutils.c:ul_sig_err
Unexecuted instantiation: init.c:ul_sig_err
Unexecuted instantiation: ask.c:ul_sig_err
Unexecuted instantiation: alignment.c:ul_sig_err
Unexecuted instantiation: label.c:ul_sig_err
Unexecuted instantiation: utils.c:ul_sig_err
Unexecuted instantiation: context.c:ul_sig_err
Unexecuted instantiation: parttype.c:ul_sig_err
Unexecuted instantiation: partition.c:ul_sig_err
Unexecuted instantiation: table.c:ul_sig_err
Unexecuted instantiation: iter.c:ul_sig_err
Unexecuted instantiation: version.c:ul_sig_err
Unexecuted instantiation: wipe.c:ul_sig_err
Unexecuted instantiation: sun.c:ul_sig_err
Unexecuted instantiation: sgi.c:ul_sig_err
Unexecuted instantiation: dos.c:ul_sig_err
Unexecuted instantiation: bsd.c:ul_sig_err
Unexecuted instantiation: gpt.c:ul_sig_err
Unexecuted instantiation: blkdev.c:ul_sig_err
Unexecuted instantiation: canonicalize.c:ul_sig_err
Unexecuted instantiation: encode.c:ul_sig_err
Unexecuted instantiation: path.c:ul_sig_err
Unexecuted instantiation: randutils.c:ul_sig_err
Unexecuted instantiation: sysfs.c:ul_sig_err
Unexecuted instantiation: item.c:ul_sig_err
Unexecuted instantiation: buffer.c:ul_sig_err
Unexecuted instantiation: cpuset.c:ul_sig_err
Unexecuted instantiation: mbsalign.c:ul_sig_err
Unexecuted instantiation: gen_uuid.c:ul_sig_err
Unexecuted instantiation: parse.c:ul_sig_err
Unexecuted instantiation: unparse.c:ul_sig_err
Unexecuted instantiation: probe.c:ul_sig_err
Unexecuted instantiation: tag.c:ul_sig_err
Unexecuted instantiation: verify.c:ul_sig_err
Unexecuted instantiation: partitions.c:ul_sig_err
Unexecuted instantiation: solaris_x86.c:ul_sig_err
Unexecuted instantiation: ultrix.c:ul_sig_err
Unexecuted instantiation: unixware.c:ul_sig_err
Unexecuted instantiation: superblocks.c:ul_sig_err
Unexecuted instantiation: swap.c:ul_sig_err
Unexecuted instantiation: sysv.c:ul_sig_err
Unexecuted instantiation: ubi.c:ul_sig_err
Unexecuted instantiation: ubifs.c:ul_sig_err
Unexecuted instantiation: udf.c:ul_sig_err
Unexecuted instantiation: ufs.c:ul_sig_err
Unexecuted instantiation: vdo.c:ul_sig_err
Unexecuted instantiation: vfat.c:ul_sig_err
Unexecuted instantiation: via_raid.c:ul_sig_err
Unexecuted instantiation: vmfs.c:ul_sig_err
Unexecuted instantiation: vxfs.c:ul_sig_err
Unexecuted instantiation: xfs.c:ul_sig_err
Unexecuted instantiation: zfs.c:ul_sig_err
Unexecuted instantiation: zonefs.c:ul_sig_err
Unexecuted instantiation: erofs.c:ul_sig_err
Unexecuted instantiation: topology.c:ul_sig_err
Unexecuted instantiation: dm.c:ul_sig_err
Unexecuted instantiation: evms.c:ul_sig_err
Unexecuted instantiation: ioctl.c:ul_sig_err
Unexecuted instantiation: lvm.c:ul_sig_err
Unexecuted instantiation: md.c:ul_sig_err
Unexecuted instantiation: dev.c:ul_sig_err
Unexecuted instantiation: devname.c:ul_sig_err
Unexecuted instantiation: devno.c:ul_sig_err
Unexecuted instantiation: read.c:ul_sig_err
Unexecuted instantiation: save.c:ul_sig_err
Unexecuted instantiation: aix.c:ul_sig_err
Unexecuted instantiation: atari.c:ul_sig_err
Unexecuted instantiation: mac.c:ul_sig_err
Unexecuted instantiation: minix.c:ul_sig_err
Unexecuted instantiation: adaptec_raid.c:ul_sig_err
Unexecuted instantiation: apfs.c:ul_sig_err
Unexecuted instantiation: bcache.c:ul_sig_err
Unexecuted instantiation: befs.c:ul_sig_err
Unexecuted instantiation: bfs.c:ul_sig_err
Unexecuted instantiation: bitlocker.c:ul_sig_err
Unexecuted instantiation: bluestore.c:ul_sig_err
Unexecuted instantiation: btrfs.c:ul_sig_err
Unexecuted instantiation: cs_fvault2.c:ul_sig_err
Unexecuted instantiation: cramfs.c:ul_sig_err
Unexecuted instantiation: ddf_raid.c:ul_sig_err
Unexecuted instantiation: drbd.c:ul_sig_err
Unexecuted instantiation: drbdproxy_datalog.c:ul_sig_err
Unexecuted instantiation: drbdmanage.c:ul_sig_err
Unexecuted instantiation: exfat.c:ul_sig_err
Unexecuted instantiation: exfs.c:ul_sig_err
Unexecuted instantiation: ext.c:ul_sig_err
Unexecuted instantiation: f2fs.c:ul_sig_err
Unexecuted instantiation: gfs.c:ul_sig_err
Unexecuted instantiation: hfs.c:ul_sig_err
Unexecuted instantiation: highpoint_raid.c:ul_sig_err
Unexecuted instantiation: hpfs.c:ul_sig_err
Unexecuted instantiation: iso9660.c:ul_sig_err
Unexecuted instantiation: isw_raid.c:ul_sig_err
Unexecuted instantiation: jfs.c:ul_sig_err
Unexecuted instantiation: jmicron_raid.c:ul_sig_err
Unexecuted instantiation: linux_raid.c:ul_sig_err
Unexecuted instantiation: lsi_raid.c:ul_sig_err
Unexecuted instantiation: luks.c:ul_sig_err
Unexecuted instantiation: mpool.c:ul_sig_err
Unexecuted instantiation: netware.c:ul_sig_err
Unexecuted instantiation: nilfs.c:ul_sig_err
Unexecuted instantiation: ntfs.c:ul_sig_err
Unexecuted instantiation: refs.c:ul_sig_err
Unexecuted instantiation: nvidia_raid.c:ul_sig_err
Unexecuted instantiation: ocfs.c:ul_sig_err
Unexecuted instantiation: promise_raid.c:ul_sig_err
Unexecuted instantiation: reiserfs.c:ul_sig_err
Unexecuted instantiation: romfs.c:ul_sig_err
Unexecuted instantiation: silicon_raid.c:ul_sig_err
Unexecuted instantiation: squashfs.c:ul_sig_err
Unexecuted instantiation: stratis.c:ul_sig_err
Unexecuted instantiation: cache.c:ul_sig_err
Unexecuted instantiation: config.c:ul_sig_err
Unexecuted instantiation: env.c:ul_sig_err
441
442
/*
443
 * Constant strings for usage() functions. For more info see
444
 * Documentation/{howto-usage-function.txt,boilerplate.c}
445
 */
446
#define USAGE_HEADER     _("\nUsage:\n")
447
#define USAGE_OPTIONS    _("\nOptions:\n")
448
#define USAGE_FUNCTIONS  _("\nFunctions:\n")
449
#define USAGE_COMMANDS   _("\nCommands:\n")
450
#define USAGE_ARGUMENTS   _("\nArguments:\n")
451
#define USAGE_COLUMNS    _("\nAvailable output columns:\n")
452
#define USAGE_SEPARATOR    "\n"
453
454
#define USAGE_OPTSTR_HELP     _("display this help")
455
#define USAGE_OPTSTR_VERSION  _("display version")
456
457
#define USAGE_HELP_OPTIONS(marg_dsc) \
458
    "%-" #marg_dsc "s%s\n" \
459
    "%-" #marg_dsc "s%s\n" \
460
    , " -h, --help",    USAGE_OPTSTR_HELP \
461
    , " -V, --version", USAGE_OPTSTR_VERSION
462
463
#define USAGE_ARG_SEPARATOR    "\n"
464
#define USAGE_ARG_SIZE(_name) \
465
    _(" %s arguments may be followed by the suffixes for\n" \
466
      "   GiB, TiB, PiB, EiB, ZiB, and YiB (the \"iB\" is optional)\n"), _name
467
468
#define USAGE_MAN_TAIL(_man)   _("\nFor more details see %s.\n"), _man
469
470
#define UTIL_LINUX_VERSION _("%s from %s\n"), program_invocation_short_name, PACKAGE_STRING
471
472
#define print_version(eval) __extension__ ({ \
473
    printf(UTIL_LINUX_VERSION); \
474
    exit(eval); \
475
})
476
477
static inline void print_features(const char **features, const char *prefix)
478
0
{
479
0
  if (features && *features) {
480
0
    const char **p = features;
481
0
    while (p && *p) {
482
0
      if (prefix && p == features)
483
0
        printf(" (%s ", prefix);
484
0
      else
485
0
        fputs(p == features ? " (" : ", ", stdout);
486
0
      fputs(*p++, stdout);
487
0
    }
488
0
    fputc(')', stdout);
489
0
  }
490
0
}
Unexecuted instantiation: script.c:print_features
Unexecuted instantiation: fileutils.c:print_features
Unexecuted instantiation: jsonwrt.c:print_features
Unexecuted instantiation: mangle.c:print_features
Unexecuted instantiation: strutils.c:print_features
Unexecuted instantiation: init.c:print_features
Unexecuted instantiation: ask.c:print_features
Unexecuted instantiation: alignment.c:print_features
Unexecuted instantiation: label.c:print_features
Unexecuted instantiation: utils.c:print_features
Unexecuted instantiation: context.c:print_features
Unexecuted instantiation: parttype.c:print_features
Unexecuted instantiation: partition.c:print_features
Unexecuted instantiation: table.c:print_features
Unexecuted instantiation: iter.c:print_features
Unexecuted instantiation: version.c:print_features
Unexecuted instantiation: wipe.c:print_features
Unexecuted instantiation: sun.c:print_features
Unexecuted instantiation: sgi.c:print_features
Unexecuted instantiation: dos.c:print_features
Unexecuted instantiation: bsd.c:print_features
Unexecuted instantiation: gpt.c:print_features
Unexecuted instantiation: blkdev.c:print_features
Unexecuted instantiation: canonicalize.c:print_features
Unexecuted instantiation: encode.c:print_features
Unexecuted instantiation: path.c:print_features
Unexecuted instantiation: randutils.c:print_features
Unexecuted instantiation: sysfs.c:print_features
Unexecuted instantiation: item.c:print_features
Unexecuted instantiation: buffer.c:print_features
Unexecuted instantiation: cpuset.c:print_features
Unexecuted instantiation: mbsalign.c:print_features
Unexecuted instantiation: gen_uuid.c:print_features
Unexecuted instantiation: parse.c:print_features
Unexecuted instantiation: unparse.c:print_features
Unexecuted instantiation: probe.c:print_features
Unexecuted instantiation: tag.c:print_features
Unexecuted instantiation: verify.c:print_features
Unexecuted instantiation: partitions.c:print_features
Unexecuted instantiation: solaris_x86.c:print_features
Unexecuted instantiation: ultrix.c:print_features
Unexecuted instantiation: unixware.c:print_features
Unexecuted instantiation: superblocks.c:print_features
Unexecuted instantiation: swap.c:print_features
Unexecuted instantiation: sysv.c:print_features
Unexecuted instantiation: ubi.c:print_features
Unexecuted instantiation: ubifs.c:print_features
Unexecuted instantiation: udf.c:print_features
Unexecuted instantiation: ufs.c:print_features
Unexecuted instantiation: vdo.c:print_features
Unexecuted instantiation: vfat.c:print_features
Unexecuted instantiation: via_raid.c:print_features
Unexecuted instantiation: vmfs.c:print_features
Unexecuted instantiation: vxfs.c:print_features
Unexecuted instantiation: xfs.c:print_features
Unexecuted instantiation: zfs.c:print_features
Unexecuted instantiation: zonefs.c:print_features
Unexecuted instantiation: erofs.c:print_features
Unexecuted instantiation: topology.c:print_features
Unexecuted instantiation: dm.c:print_features
Unexecuted instantiation: evms.c:print_features
Unexecuted instantiation: ioctl.c:print_features
Unexecuted instantiation: lvm.c:print_features
Unexecuted instantiation: md.c:print_features
Unexecuted instantiation: dev.c:print_features
Unexecuted instantiation: devname.c:print_features
Unexecuted instantiation: devno.c:print_features
Unexecuted instantiation: read.c:print_features
Unexecuted instantiation: save.c:print_features
Unexecuted instantiation: aix.c:print_features
Unexecuted instantiation: atari.c:print_features
Unexecuted instantiation: mac.c:print_features
Unexecuted instantiation: minix.c:print_features
Unexecuted instantiation: adaptec_raid.c:print_features
Unexecuted instantiation: apfs.c:print_features
Unexecuted instantiation: bcache.c:print_features
Unexecuted instantiation: befs.c:print_features
Unexecuted instantiation: bfs.c:print_features
Unexecuted instantiation: bitlocker.c:print_features
Unexecuted instantiation: bluestore.c:print_features
Unexecuted instantiation: btrfs.c:print_features
Unexecuted instantiation: cs_fvault2.c:print_features
Unexecuted instantiation: cramfs.c:print_features
Unexecuted instantiation: ddf_raid.c:print_features
Unexecuted instantiation: drbd.c:print_features
Unexecuted instantiation: drbdproxy_datalog.c:print_features
Unexecuted instantiation: drbdmanage.c:print_features
Unexecuted instantiation: exfat.c:print_features
Unexecuted instantiation: exfs.c:print_features
Unexecuted instantiation: ext.c:print_features
Unexecuted instantiation: f2fs.c:print_features
Unexecuted instantiation: gfs.c:print_features
Unexecuted instantiation: hfs.c:print_features
Unexecuted instantiation: highpoint_raid.c:print_features
Unexecuted instantiation: hpfs.c:print_features
Unexecuted instantiation: iso9660.c:print_features
Unexecuted instantiation: isw_raid.c:print_features
Unexecuted instantiation: jfs.c:print_features
Unexecuted instantiation: jmicron_raid.c:print_features
Unexecuted instantiation: linux_raid.c:print_features
Unexecuted instantiation: lsi_raid.c:print_features
Unexecuted instantiation: luks.c:print_features
Unexecuted instantiation: mpool.c:print_features
Unexecuted instantiation: netware.c:print_features
Unexecuted instantiation: nilfs.c:print_features
Unexecuted instantiation: ntfs.c:print_features
Unexecuted instantiation: refs.c:print_features
Unexecuted instantiation: nvidia_raid.c:print_features
Unexecuted instantiation: ocfs.c:print_features
Unexecuted instantiation: promise_raid.c:print_features
Unexecuted instantiation: reiserfs.c:print_features
Unexecuted instantiation: romfs.c:print_features
Unexecuted instantiation: silicon_raid.c:print_features
Unexecuted instantiation: squashfs.c:print_features
Unexecuted instantiation: stratis.c:print_features
Unexecuted instantiation: cache.c:print_features
Unexecuted instantiation: config.c:print_features
Unexecuted instantiation: env.c:print_features
491
492
#define UTIL_LINUX_VERSION_NOBREAK _("%s from %s"), program_invocation_short_name, PACKAGE_STRING
493
494
#define print_version_with_features(eval, features) __extension__ ({ \
495
    printf(UTIL_LINUX_VERSION_NOBREAK); \
496
    print_features(features, _("features:")); \
497
    fputc('\n', stdout); \
498
    exit(eval); \
499
})
500
501
/*
502
 * seek stuff
503
 */
504
#ifndef SEEK_DATA
505
# define SEEK_DATA  3
506
#endif
507
#ifndef SEEK_HOLE
508
# define SEEK_HOLE  4
509
#endif
510
511
512
/*
513
 * Macros to convert #define'itions to strings, for example
514
 * #define XYXXY 42
515
 * printf ("%s=%s\n", stringify(XYXXY), stringify_value(XYXXY));
516
 */
517
#define stringify_value(s) stringify(s)
518
#define stringify(s) #s
519
520
/* Detect if we're compiled with Address Sanitizer
521
 *  - gcc (__SANITIZE_ADDRESS__)
522
 *  - clang (__has_feature(address_sanitizer))
523
 */
524
#if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
525
#  ifdef __SANITIZE_ADDRESS__
526
#      define HAS_FEATURE_ADDRESS_SANITIZER 1
527
#  elif defined(__has_feature)
528
#    if __has_feature(address_sanitizer)
529
#      define HAS_FEATURE_ADDRESS_SANITIZER 1
530
#    endif
531
#  endif
532
#  if !defined(HAS_FEATURE_ADDRESS_SANITIZER)
533
#    define HAS_FEATURE_ADDRESS_SANITIZER 0
534
#  endif
535
#endif
536
537
/*
538
 * UL_ASAN_BLACKLIST is a macro to tell AddressSanitizer (a compile-time
539
 * instrumentation shipped with Clang and GCC) to not instrument the
540
 * annotated function.  Furthermore, it will prevent the compiler from
541
 * inlining the function because inlining currently breaks the blacklisting
542
 * mechanism of AddressSanitizer.
543
 */
544
#if __has_feature(address_sanitizer) && __has_attribute(no_sanitize_memory) && __has_attribute(no_sanitize_address)
545
# define UL_ASAN_BLACKLIST __attribute__((noinline)) __attribute__((no_sanitize_memory)) __attribute__((no_sanitize_address))
546
#else
547
# define UL_ASAN_BLACKLIST  /* nothing */
548
#endif
549
550
/*
551
 * Note that sysconf(_SC_GETPW_R_SIZE_MAX) returns *initial* suggested size for
552
 * pwd buffer and in some cases it is not large enough. See POSIX and
553
 * getpwnam_r man page for more details.
554
 */
555
#define UL_GETPW_BUFSIZ (16 * 1024)
556
557
/*
558
 * Darwin or other BSDs may only have MAP_ANON. To get it on Darwin we must
559
 * define _DARWIN_C_SOURCE before including sys/mman.h. We do this in config.h.
560
 */
561
#if !defined MAP_ANONYMOUS && defined MAP_ANON
562
# define MAP_ANONYMOUS  (MAP_ANON)
563
#endif
564
565
0
#define SINT_MAX(t) (((t)1 << (sizeof(t) * 8 - 2)) - (t)1 + ((t)1 << (sizeof(t) * 8 - 2)))
566
567
#endif /* UTIL_LINUX_C_H */