Skip to content

Commit

Permalink
Replace some switch-case lookups with arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
tavianator committed Jun 5, 2024
1 parent a399040 commit cb6314b
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 83 deletions.
83 changes: 25 additions & 58 deletions src/opt.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,39 +102,20 @@ enum pred_type {
PRED_TYPES,
};

/** Get the name of a predicate type. */
static const char *pred_type_name(enum pred_type type) {
switch (type) {
case READABLE_PRED:
return "-readable";
case WRITABLE_PRED:
return "-writable";
case EXECUTABLE_PRED:
return "-executable";
case ACL_PRED:
return "-acl";
case CAPABLE_PRED:
return "-capable";
case EMPTY_PRED:
return "-empty";
case HIDDEN_PRED:
return "-hidden";
case NOGROUP_PRED:
return "-nogroup";
case NOUSER_PRED:
return "-nouser";
case SPARSE_PRED:
return "-sparse";
case XATTR_PRED:
return "-xattr";

case PRED_TYPES:
break;
}

bfs_bug("Unknown predicate %d", (int)type);
return "???";
}
/** Predicate type names. */
static const char *const pred_names[] = {
[READABLE_PRED] = "-readable",
[WRITABLE_PRED] = "-writable",
[EXECUTABLE_PRED] = "-executable",
[ACL_PRED] = "-acl",
[CAPABLE_PRED] = "-capable",
[EMPTY_PRED] = "-empty",
[HIDDEN_PRED] = "-hidden",
[NOGROUP_PRED] = "-nogroup",
[NOUSER_PRED] = "-nouser",
[SPARSE_PRED] = "-sparse",
[XATTR_PRED] = "-xattr",
};

/**
* A contrained integer range.
Expand Down Expand Up @@ -242,29 +223,15 @@ enum range_type {
RANGE_TYPES,
};

/** Get the name of a range type. */
static const char *range_type_name(enum range_type type) {
switch (type) {
case DEPTH_RANGE:
return "-depth";
case GID_RANGE:
return "-gid";
case INUM_RANGE:
return "-inum";
case LINKS_RANGE:
return "-links";
case SIZE_RANGE:
return "-size";
case UID_RANGE:
return "-uid";

case RANGE_TYPES:
break;
}

bfs_bug("Unknown range %d", (int)type);
return "???";
}
/** Range type names. */
static const char *const range_names[] = {
[DEPTH_RANGE] = "-depth",
[GID_RANGE] = "-gid",
[INUM_RANGE] = "-inum",
[LINKS_RANGE] = "-links",
[SIZE_RANGE] = "-size",
[UID_RANGE] = "-uid",
};

/**
* The data flow analysis domain.
Expand Down Expand Up @@ -503,7 +470,7 @@ typedef bool dump_fn(struct bfs_opt *opt, const char *format, ...);

/** Print a df_pred. */
static void pred_dump(dump_fn *dump, struct bfs_opt *opt, const struct df_domain *value, enum pred_type type) {
dump(opt, "${blu}%s${rs}: ", pred_type_name(type));
dump(opt, "${blu}%s${rs}: ", pred_names[type]);

FILE *file = opt->ctx->cerr->file;
switch (value->preds[type]) {
Expand All @@ -524,7 +491,7 @@ static void pred_dump(dump_fn *dump, struct bfs_opt *opt, const struct df_domain

/** Print a df_range. */
static void range_dump(dump_fn *dump, struct bfs_opt *opt, const struct df_domain *value, enum range_type type) {
dump(opt, "${blu}%s${rs}: ", range_type_name(type));
dump(opt, "${blu}%s${rs}: ", range_names[type]);

FILE *file = opt->ctx->cerr->file;
const struct df_range *range = &value->ranges[type];
Expand Down
43 changes: 19 additions & 24 deletions src/printf.c
Original file line number Diff line number Diff line change
Expand Up @@ -505,30 +505,25 @@ static int bfs_printf_u(CFILE *cfile, const struct bfs_fmt *fmt, const struct BF
}

static const char *bfs_printf_type(enum bfs_type type) {
switch (type) {
case BFS_BLK:
return "b";
case BFS_CHR:
return "c";
case BFS_DIR:
return "d";
case BFS_DOOR:
return "D";
case BFS_FIFO:
return "p";
case BFS_LNK:
return "l";
case BFS_PORT:
return "P";
case BFS_REG:
return "f";
case BFS_SOCK:
return "s";
case BFS_WHT:
return "w";
default:
return "U";
}
const char *const names[] = {
[BFS_BLK] = "b",
[BFS_CHR] = "c",
[BFS_DIR] = "d",
[BFS_DOOR] = "D",
[BFS_FIFO] = "p",
[BFS_LNK] = "l",
[BFS_PORT] = "P",
[BFS_REG] = "f",
[BFS_SOCK] = "s",
[BFS_WHT] = "w",
};

const char *name = NULL;
if ((size_t)type < countof(names)) {
name = names[type];
}

return name ? name : "U";
}

/** %y: type */
Expand Down
2 changes: 1 addition & 1 deletion src/stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ const char *bfs_stat_field_name(enum bfs_stat_field field) {
return "modification time";
}

bfs_bug("Unrecognized stat field");
bfs_bug("Unrecognized stat field %d", (int)field);
return "???";
}

Expand Down

0 comments on commit cb6314b

Please sign in to comment.