static int test_str(struct event_format *event, struct filter_arg *arg, struct pevent_record *record) { const char *val; if (arg->str.field == &comm) val = get_comm(event, record); else val = get_field_str(arg, record); switch (arg->str.type) { case FILTER_CMP_MATCH: return strcmp(val, arg->str.val) == 0; case FILTER_CMP_NOT_MATCH: return strcmp(val, arg->str.val) != 0; case FILTER_CMP_REGEX: /* Returns zero on match */ return !regexec(&arg->str.reg, val, 0, NULL, 0); case FILTER_CMP_NOT_REGEX: return regexec(&arg->str.reg, val, 0, NULL, 0); default: /* ?? */ return 0; } }
char* table_iter_get_str(HTableIterator iterator, int *err) { if ((! iterator) || (! iterator->cur_field)) { if (err) *err = 1; return NULL; } return get_field_str(iterator->cur_field, err); }
char* table_iter_get_strs(HTableIterator iterator, int *err) { if ((! iterator) || (! iterator->cur_field)) { if (err) *err = 1; return NULL; } if (iterator->stat_buf) free(iterator->stat_buf); iterator->stat_buf = get_field_str(iterator->cur_field, err); return iterator->stat_buf; }
char* table_get_str(HTable table, char *field, char *dflt, int *err) { SField *f; char *s = NULL; int e; if ((f = find_field(table, field)) && (s = get_field_str(f, &e)) && !e) { if (err) *err = 0; return strdup(s); } if (err) *err = f? e : 1; if (s) free(s); return dflt? strdup(dflt) : NULL; }
char* table_get_strs(HTable table, char *field, char *dflt, int *err) { SField *f; char *s; int e; if (table && table->stat_buf) { free(table->stat_buf); table->stat_buf = NULL; } if (table && (f = find_field(table, field)) && (s = get_field_str(f, &e))) table->stat_buf = s; if (! table || ! f || e) s = dflt; if (err) *err = (table && f)? e : 1; return s; }