#include <string.h>
#include "alloc-util.h"
+#include "bitfield.h"
#include "capability-util.h"
#include "cap-list.h"
#include "extract-word.h"
for (unsigned i = 0; i <= cap_last_cap(); i++) {
const char *p;
- if (!FLAGS_SET(set, UINT64_C(1) << i))
+ if (!BIT_SET(set, i))
continue;
p = CAPABILITY_TO_STRING(i);
for (unsigned i = 0; i <= cap_last_cap(); i++) {
const char *p;
- if (!FLAGS_SET(set, UINT64_C(1) << i))
+ if (!BIT_SET(set, i))
continue;
p = CAPABILITY_TO_STRING(i);
#endif
#include "alloc-util.h"
+#include "bitfield.h"
#include "compress.h"
#include "fd-util.h"
#include "fileio.h"
(1U << COMPRESSION_LZ4) * HAVE_LZ4 |
(1U << COMPRESSION_ZSTD) * HAVE_ZSTD;
- return c >= 0 && c < _COMPRESSION_MAX && FLAGS_SET(supported, 1U << c);
+ assert(c >= 0);
+ assert(c < _COMPRESSION_MAX);
+
+ return BIT_SET(supported, c);
}
#if HAVE_XZ
#include "alloc-util.h"
#include "architecture.h"
+#include "bitfield.h"
#include "build.h"
#include "bus-common-errors.h"
#include "bus-get-properties.h"
continue;
BusUnitQueueFlags flags;
- if (FLAGS_SET(u->markers, 1u << UNIT_MARKER_NEEDS_RESTART))
+ if (BIT_SET(u->markers, UNIT_MARKER_NEEDS_RESTART))
flags = 0;
- else if (FLAGS_SET(u->markers, 1u << UNIT_MARKER_NEEDS_RELOAD))
+ else if (BIT_SET(u->markers, UNIT_MARKER_NEEDS_RELOAD))
flags = BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE;
else
continue;
#include "sd-bus.h"
#include "alloc-util.h"
+#include "bitfield.h"
#include "bpf-firewall.h"
#include "bus-common-errors.h"
#include "bus-get-properties.h"
return r;
for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
- if (!FLAGS_SET(mask, 1U << t))
+ if (!BIT_SET(mask, t))
continue;
r = sd_bus_message_append(reply, "s", exec_resource_type_to_string(t));
if (r < 0)
return r;
- /* Make sure out values fit in the bitfield. */
- assert_cc(_UNIT_MARKER_MAX <= sizeof(((Unit){}).markers) * 8);
-
- for (UnitMarker m = 0; m < _UNIT_MARKER_MAX; m++)
- if (FLAGS_SET(*markers, 1u << m)) {
- r = sd_bus_message_append(reply, "s", unit_marker_to_string(m));
- if (r < 0)
- return r;
- }
+ BIT_FOREACH(m, *markers) {
+ r = sd_bus_message_append(reply, "s", unit_marker_to_string(m));
+ if (r < 0)
+ return r;
+ }
return sd_bus_message_close_container(reply);
}
#endif
#include "argv-util.h"
#include "barrier.h"
+#include "bitfield.h"
#include "bpf-dlopen.h"
#include "bpf-restrict-fs.h"
#include "btrfs-util.h"
}
if (keep_seccomp_privileges) {
- if (!FLAGS_SET(capability_ambient_set, (UINT64_C(1) << CAP_SETUID))) {
+ if (!BIT_SET(capability_ambient_set, CAP_SETUID)) {
r = drop_capability(CAP_SETUID);
if (r < 0) {
*exit_status = EXIT_USER;
/* Only drop CAP_SYS_ADMIN if it's not in the bounding set, otherwise we'll break
* applications that use it. */
- if (!FLAGS_SET(saved_bset, (UINT64_C(1) << CAP_SYS_ADMIN))) {
+ if (!BIT_SET(saved_bset, CAP_SYS_ADMIN)) {
r = drop_capability(CAP_SYS_ADMIN);
if (r < 0) {
*exit_status = EXIT_USER;
/* Only drop CAP_SETPCAP if it's not in the bounding set, otherwise we'll break
* applications that use it. */
- if (!FLAGS_SET(saved_bset, (UINT64_C(1) << CAP_SETPCAP))) {
+ if (!BIT_SET(saved_bset, CAP_SETPCAP)) {
r = drop_capability(CAP_SETPCAP);
if (r < 0) {
*exit_status = EXIT_USER;
#include "af-list.h"
#include "alloc-util.h"
#include "async.h"
+#include "bitfield.h"
#include "cap-list.h"
#include "capability-util.h"
#include "cgroup-setup.h"
assert(ret);
for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
- if (!FLAGS_SET(mask, 1U << t))
+ if (!BIT_SET(mask, t))
continue;
if (!prefix[t])
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "bitfield.h"
#include "bpf-restrict-ifaces.h"
#include "bpf-socket-bind.h"
#include "bus-util.h"
bool space = false;
fputs("markers=", f);
- for (UnitMarker m = 0; m < _UNIT_MARKER_MAX; m++)
- if (FLAGS_SET(markers, 1u << m))
- fputs_with_separator(f, unit_marker_to_string(m), /* separator = */ NULL, &space);
+ BIT_FOREACH(m, markers)
+ fputs_with_separator(f, unit_marker_to_string(m), /* separator = */ NULL, &space);
fputc('\n', f);
return 0;
}
if (u->markers != 0) {
fprintf(f, "%s\tMarkers:", prefix);
- for (UnitMarker marker = 0; marker < _UNIT_MARKER_MAX; marker++)
- if (FLAGS_SET(u->markers, 1u << marker))
- fprintf(f, " %s", unit_marker_to_string(marker));
+ BIT_FOREACH(marker, u->markers)
+ fprintf(f, " %s", unit_marker_to_string(marker));
fputs("\n", f);
}
#include "sd-json.h"
#include "alloc-util.h"
+#include "bitfield.h"
#include "bus-common-errors.h"
#include "bus-get-properties.h"
#include "bus-log-control-api.h"
assert(c);
for (int p = 0; p < _PROP_MAX; p++) {
- if (!FLAGS_SET(mask, UINT64_C(1) << p))
+ if (!BIT_SET(mask, p))
continue;
c->data[p] = mfree(c->data[p]);
#include <sys/mman.h>
#include "alloc-util.h"
+#include "bitfield.h"
#include "errno-util.h"
#include "fd-util.h"
#include "hashmap.h"
}
for (unsigned i = 0; i < _MMAP_CACHE_CATEGORY_MAX; i++)
- if (FLAGS_SET(w->flags, 1u << i))
+ if (BIT_SET(w->flags, i))
assert_se(TAKE_PTR(m->windows_by_category[i]) == w);
return LIST_REMOVE(windows, w->fd->windows, w);
if (!w)
return; /* Nothing attached. */
- assert(FLAGS_SET(w->flags, 1u << c));
+ assert(BIT_SET(w->flags, c));
w->flags &= ~(1u << c);
if (WINDOW_IS_UNUSED(w)) {
#include "sd-messages.h"
#include "alloc-util.h"
+#include "bitfield.h"
#include "bus-error.h"
#include "bus-unit-util.h"
#include "bus-util.h"
assert(ret);
FOREACH_ELEMENT(i, sleep_actions)
- if (FLAGS_SET(mask, 1U << *i)) {
+ if (BIT_SET(mask, *i)) {
r = strv_extend(&actions, handle_action_to_string(*i));
if (r < 0)
return r;
#include "af-list.h"
#include "alloc-util.h"
+#include "bitfield.h"
#include "firewall-util.h"
#include "in-addr-prefix-util.h"
#include "logarithm.h"
assert(ret);
for (size_t i = 0; i < ELEMENTSOF(map); i++)
- if (FLAGS_SET(flags, 1 << i) && map[i])
+ if (BIT_SET(flags, i) && map[i])
if (!strextend_with_separator(
&str, ",",
family == AF_INET6 && (1 << i) == IFA_F_SECONDARY ? "temporary" : map[i]))
#include "alloc-util.h"
#include "arphrd-util.h"
#include "batadv.h"
+#include "bitfield.h"
#include "bond.h"
#include "bridge.h"
#include "bus-util.h"
assert(ret);
for (size_t i = 0; i < ELEMENTSOF(map); i++)
- if (FLAGS_SET(flags, 1 << i) && map[i])
+ if (BIT_SET(flags, i) && map[i])
if (!strextend_with_separator(&str, ",", map[i]))
return -ENOMEM;
#include <linux/rtnetlink.h>
#include "alloc-util.h"
+#include "bitfield.h"
#include "logarithm.h"
#include "missing_threads.h"
#include "networkd-address.h"
assert(ret);
for (size_t i = 0; i < ELEMENTSOF(map); i++)
- if (FLAGS_SET(flags, 1 << i) && map[i])
+ if (BIT_SET(flags, i) && map[i])
if (!strextend_with_separator(&str, ",", map[i]))
return -ENOMEM;
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "bitfield.h"
#include "condition.h"
#include "conf-parser.h"
#include "escape.h"
assert(ret);
for (size_t i = 0; i < ELEMENTSOF(states); i++)
- if (FLAGS_SET(s, 1 << i)) {
- assert(states[i]);
-
- if (!strextend_with_separator(&buf, ",", states[i]))
+ if (BIT_SET(s, i))
+ if (!strextend_with_separator(&buf, ",", ASSERT_PTR(states[i])))
return -ENOMEM;
- }
*ret = TAKE_PTR(buf);
return 0;
#include "sd-varlink.h"
#include "ask-password-api.h"
+#include "bitfield.h"
#include "blockdev-util.h"
#include "boot-entry.h"
#include "build.h"
bool fully_recognized = el->registers[pcr].fully_recognized;
/* Whether any unmatched components touch this PCR */
- bool missing_components = FLAGS_SET(el->missing_component_pcrs, UINT32_C(1) << pcr);
+ bool missing_components = BIT_SET(el->missing_component_pcrs, pcr);
const char *emoji = special_glyph(
!hash_match ? SPECIAL_GLYPH_DEPRESSED_SMILEY :
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
- if (!FLAGS_SET(mask, UINT32_C(1) << pcr))
+ if (!BIT_SET(mask, pcr))
continue;
if (!event_log_pcr_checks_out(el, el->registers + pcr))
for (uint32_t i = 0; i < TPM2_PCRS_MAX; i++) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *record = NULL;
- if (!FLAGS_SET(pcr_mask, UINT32_C(1) << i))
+ if (!BIT_SET(pcr_mask, i))
continue;
r = sd_json_buildo(
for (uint32_t i = 0; i < TPM2_PCRS_MAX; i++) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *digests = NULL;
- if (!FLAGS_SET(arg_pcr_mask, UINT32_C(1) << i))
+ if (!BIT_SET(arg_pcr_mask, i))
continue;
FOREACH_ARRAY(pa, tpm2_hash_algorithms, TPM2_N_HASH_ALGORITHMS) {
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
- if (!FLAGS_SET(*pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(*pcrs, pcr))
continue;
if (!event_log_pcr_checks_out(el, el->registers + pcr)) {
goto drop;
}
- if (FLAGS_SET(el->missing_component_pcrs, UINT32_C(1) << pcr)) {
+ if (BIT_SET(el->missing_component_pcrs, pcr)) {
log_notice("PCR %" PRIu32 " (%s) is touched by component we can't find in event log. Removing from set of PCRs.", pcr, strna(tpm2_pcr_index_to_string(pcr)));
goto drop;
}
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
Tpm2PCRPredictionResult *result;
- if (!FLAGS_SET(context->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(context->pcrs, pcr))
continue;
if (ordered_set_isempty(context->results[pcr])) {
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
_cleanup_free_ Tpm2PCRPredictionResult *result = NULL;
- if (!FLAGS_SET(context->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(context->pcrs, pcr))
continue;
result = new0(Tpm2PCRPredictionResult, 1);
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "bitfield.h"
#include "dissect-image.h"
#include "extract-word.h"
#include "fd-util.h"
assert(pa);
for (unsigned i = 0; i < sizeof(flags) * 8; i++) {
- if (!FLAGS_SET(flags, UINT64_C(1) << i))
+ if (!BIT_SET(flags, i))
continue;
r = strextendf_with_separator(&attrs, ",", "%u", i);
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "bitfield.h"
#include "group-record.h"
#include "json-util.h"
#include "strv.h"
if (h->gid < match->gid_min || h->gid > match->gid_max)
return false;
- if (!FLAGS_SET(match->disposition_mask, UINT64_C(1) << group_record_disposition(h)))
+ if (!BIT_SET(match->disposition_mask, group_record_disposition(h)))
return false;
if (!strv_isempty(match->fuzzy_names)) {
#include "alloc-util.h"
#include "ansi-color.h"
+#include "bitfield.h"
#include "constants.h"
#include "creds-util.h"
#include "cryptsetup-util.h"
_cleanup_(sd_json_variant_unrefp) sd_json_variant *vj = NULL;
Tpm2PCRPredictionResult *banks;
- if (!FLAGS_SET(prediction->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(prediction->pcrs, pcr))
continue;
ORDERED_SET_FOREACH(banks, prediction->results[pcr]) {
_cleanup_free_ Tpm2PCRValue *single_values = NULL;
size_t n_single_values = 0;
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
- if (!FLAGS_SET(prediction->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(prediction->pcrs, pcr))
continue;
if (ordered_set_size(prediction->results[pcr]) != 1)
size_t n_pcr_policy_digest_variants = 0;
Tpm2PCRPredictionResult *banks;
- if (!FLAGS_SET(prediction->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(prediction->pcrs, pcr))
continue;
if (ordered_set_size(prediction->results[pcr]) <= 1) /* We only care for PCRs with 2 or more variants in this loop */
/* Look for all PCRs that have only a singled allowed hash value, and synthesize a single PolicyPCR policy item for them */
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
- if (!FLAGS_SET(prediction->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(prediction->pcrs, pcr))
continue;
if (ordered_set_size(prediction->results[pcr]) != 1)
for (uint32_t pcr = 0; pcr < TPM2_PCRS_MAX; pcr++) {
size_t n_branches;
- if (!FLAGS_SET(prediction->pcrs, UINT32_C(1) << pcr))
+ if (!BIT_SET(prediction->pcrs, pcr))
continue;
n_branches = ordered_set_size(prediction->results[pcr]);
#include <sys/mount.h>
+#include "bitfield.h"
#include "cap-list.h"
#include "cgroup-util.h"
#include "dns-domain.h"
if (u->uid < match->uid_min || u->uid > match->uid_max)
return false;
- if (!FLAGS_SET(match->disposition_mask, UINT64_C(1) << user_record_disposition(u)))
+ if (!BIT_SET(match->disposition_mask, user_record_disposition(u)))
return false;
if (!strv_isempty(match->fuzzy_names)) {
#include <sys/stat.h>
#include "architecture.h"
+#include "bitfield.h"
#include "chase.h"
#include "fd-util.h"
#include "fs-util.h"
if (type_mask == 0) /* type doesn't matter */
return 0;
- if (FLAGS_SET(type_mask, UINT32_C(1) << IFTODT(found)))
+ if (BIT_SET(type_mask, IFTODT(found)))
return 0;
if (type_mask == (UINT32_C(1) << DT_BLK))
return log_debug_errno(errno, "Failed to stat discovered inode '%s': %m", prefix_roota(toplevel_path, inode_path));
if (filter->type_mask != 0 &&
- !FLAGS_SET(filter->type_mask, UINT32_C(1) << IFTODT(st.st_mode)))
+ !BIT_SET(filter->type_mask, IFTODT(st.st_mode)))
return log_debug_errno(
SYNTHETIC_ERRNO(errno_from_mode(filter->type_mask, st.st_mode)),
"Inode '%s' has wrong type, found '%s'.",
filter_type_mask = filter->type_mask;
if (slash_suffix) {
/* If the pattern is suffixed by a / then we are looking for directories apparently. */
- if (filter_type_mask != 0 && !FLAGS_SET(filter_type_mask, UINT32_C(1) << DT_DIR))
+ if (filter_type_mask != 0 && !BIT_SET(filter_type_mask, DT_DIR))
return log_debug_errno(SYNTHETIC_ERRNO(errno_from_mode(filter_type_mask, S_IFDIR)),
"Specified pattern ends in '/', but not looking for directories, refusing.");
filter_type_mask = UINT32_C(1) << DT_DIR;
#include "acl-util.h"
#include "alloc-util.h"
+#include "bitfield.h"
#include "btrfs-util.h"
#include "build.h"
#include "capability-util.h"
return NULL;
for (size_t i = 0; i < ELEMENTSOF(ab_map); i++)
- if (FLAGS_SET(ab, 1U << i))
+ if (BIT_SET(ab, i))
ret[j++] = is_dir ? ascii_toupper(ab_map[i]) : ab_map[i];
ret[j] = 0;
#include <getopt.h>
#include <stdio.h>
+#include "bitfield.h"
#include "device-private.h"
#include "device-util.h"
#include "string-util.h"
void udev_builtin_reload(UdevReloadFlags flags) {
for (UdevBuiltinCommand i = 0; i < _UDEV_BUILTIN_MAX; i++) {
- if (!FLAGS_SET(flags, 1u << i) || !builtins[i])
+ if (!BIT_SET(flags, i) || !builtins[i])
continue;
if (builtins[i]->exit)
builtins[i]->exit();
#include <getopt.h>
+#include "bitfield.h"
#include "build.h"
#include "dirent-util.h"
#include "errno-list.h"
FOREACH_ELEMENT(i, uid_range_table) {
_cleanup_free_ char *name = NULL, *comment = NULL;
- if (!FLAGS_SET(arg_disposition_mask, UINT64_C(1) << i->disposition))
+ if (!BIT_SET(arg_disposition_mask, i->disposition))
continue;
if (!uid_range_covers(p, i->first, i->last - i->first + 1))
FOREACH_ELEMENT(i, uid_range_table) {
_cleanup_free_ char *name = NULL, *comment = NULL;
- if (!FLAGS_SET(arg_disposition_mask, UINT64_C(1) << i->disposition))
+ if (!BIT_SET(arg_disposition_mask, i->disposition))
continue;
if (!uid_range_covers(p, i->first, i->last - i->first + 1))