Exemple #1
0
// Helper to construct the list of field defs
static std::unordered_map<w_string, w_query_field_renderer> build_defs() {
  struct {
    const char* name;
    json_ref (*make)(const struct watchman_rule_match* match);
  } defs[] = {
      {"name", make_name},
      {"symlink_target", make_symlink},
      {"exists", make_exists},
      {"size", make_size},
      {"mode", make_mode},
      {"uid", make_uid},
      {"gid", make_gid},
      MAKE_TIME_FIELD_DEFS(a),
      MAKE_TIME_FIELD_DEFS(m),
      MAKE_TIME_FIELD_DEFS(c),
      {"ino", make_ino},
      {"dev", make_dev},
      {"nlink", make_nlink},
      {"new", make_new},
      {"oclock", make_oclock},
      {"cclock", make_cclock},
      {"type", make_type_field},
  };
  std::unordered_map<w_string, w_query_field_renderer> map;
  for (auto& def : defs) {
    w_string name(def.name, W_STRING_UNICODE);
    map.emplace(name, w_query_field_renderer{name, def.make});
  }

  return map;
}
Exemple #2
0
  { #type "time_ms", make_##type##time_ms }, \
  { #type "time_us", make_##type##time_us }, \
  { #type "time_ns", make_##type##time_ns }, \
  { #type "time_f", make_##type##time_f }

static struct w_query_field_renderer {
  const char *name;
  json_t *(*make)(struct watchman_rule_match *match);
} field_defs[] = {
  { "name", make_name },
  { "exists", make_exists },
  { "size", make_size },
  { "mode", make_mode },
  { "uid", make_uid },
  { "gid", make_gid },
  MAKE_TIME_FIELD_DEFS(a),
  MAKE_TIME_FIELD_DEFS(m),
  MAKE_TIME_FIELD_DEFS(c),
  { "ino", make_ino },
  { "dev", make_dev },
  { "nlink", make_nlink },
  { "new", make_new },
  { "oclock", make_oclock },
  { "cclock", make_cclock },
  { NULL, NULL }
};

json_t *w_query_results_to_json(
    struct w_query_field_list *field_list,
    uint32_t num_results,
    struct watchman_rule_match *results)