forked from facebook/watchman
-
Notifications
You must be signed in to change notification settings - Fork 0
/
expflags.c
37 lines (31 loc) · 891 Bytes
/
expflags.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* Copyright 2015-present Facebook, Inc.
* Licensed under the Apache License, Version 2.0 */
#include "watchman.h"
/* Given a flag map in `fmap`, and a set of flags in `flags`,
* expand the flag bits that are set in `flags` into the corresponding
* labels in `fmap` and print the result into the caller provided
* buffer `buf` of size `len` bytes. */
void w_expand_flags(const struct flag_map *fmap, uint32_t flags,
char *buf, size_t len) {
bool first = true;
*buf = '\0';
while (fmap->label && len) {
if ((flags & fmap->value) == fmap->value) {
size_t space;
if (!first) {
*buf = ' ';
buf++;
len--;
} else {
first = false;
}
space = MIN(len, strlen(fmap->label) + 1);
memcpy(buf, fmap->label, space);
len -= space - 1;
buf += space - 1;
}
fmap++;
}
}
/* vim:ts=2:sw=2:et:
*/