File: expflags.cpp

package info (click to toggle)
watchman 4.9.0-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,992 kB
  • sloc: cpp: 27,459; python: 6,538; java: 3,404; php: 3,257; ansic: 2,803; javascript: 1,116; makefile: 671; ruby: 364; sh: 124; xml: 102; lisp: 4
file content (37 lines) | stat: -rw-r--r-- 896 bytes parent folder | download | duplicates (3)
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 = std::min(len, strlen(fmap->label) + 1);
      memcpy(buf, fmap->label, space);

      len -= space - 1;
      buf += space - 1;
    }
    fmap++;
  }
}

/* vim:ts=2:sw=2:et:
 */