1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

reporting: reuse existing _get_field

Use already existing _get_field() function that also
slightly optimizes 'strlen()' usage.
This commit is contained in:
Zdenek Kabelac 2024-03-24 14:16:18 +01:00
parent ab3c690077
commit 50ad27a4ab
2 changed files with 32 additions and 48 deletions

View File

@ -796,11 +796,11 @@ static const char *_get_field_type_name(unsigned field_type)
static size_t _get_longest_field_id_len(const struct dm_report_field_type *fields)
{
uint32_t f;
size_t id_len = 0;
size_t l, id_len = 0;
for (f = 0; fields[f].report_fn; f++)
if (strlen(fields[f].id) > id_len)
id_len = strlen(fields[f].id);
if ((l = strlen(fields[f].id)) > id_len)
id_len = l;
return id_len;
}
@ -811,16 +811,17 @@ static void _display_fields_more(struct dm_report *rh,
int display_field_types)
{
uint32_t f;
size_t l;
const struct dm_report_object_type *type;
const char *desc, *last_desc = "";
for (f = 0; fields[f].report_fn; f++)
if (strlen(fields[f].id) > id_len)
id_len = strlen(fields[f].id);
if ((l = strlen(fields[f].id)) > id_len)
id_len = l;
for (type = rh->types; type->data_fn; type++)
if (strlen(type->prefix) + 3 > id_len)
id_len = strlen(type->prefix) + 3;
if ((l = strlen(type->prefix) + 3) > id_len)
id_len = l;
for (f = 0; fields[f].report_fn; f++) {
if (!(type = _find_type(rh, fields[f].type))) {
@ -964,16 +965,13 @@ static int _get_canonical_field_name(const char *field,
* Both names are always null-terminated.
*/
static int _is_same_field(const char *canonical_name1, const char *canonical_name2,
const char *prefix)
const char *prefix, size_t prefix_len)
{
size_t prefix_len;
/* Exact match? */
if (!strcasecmp(canonical_name1, canonical_name2))
return 1;
/* Match including prefix? */
prefix_len = strlen(prefix) - 1;
if (!strncasecmp(prefix, canonical_name1, prefix_len) &&
!strcasecmp(canonical_name1 + prefix_len, canonical_name2))
return 1;
@ -1049,6 +1047,7 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
{
char field_canon[DM_REPORT_FIELD_TYPE_ID_LEN];
uint32_t f;
size_t prefix_len;
if (!flen)
return 0;
@ -1056,8 +1055,9 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
if (!_get_canonical_field_name(field, flen, field_canon, sizeof(field_canon), NULL))
return_0;
prefix_len = strlen(rh->field_prefix) - 1;
for (f = 0; _implicit_report_fields[f].report_fn; f++) {
if (_is_same_field(_implicit_report_fields[f].id, field_canon, rh->field_prefix)) {
if (_is_same_field(_implicit_report_fields[f].id, field_canon, rh->field_prefix, prefix_len)) {
*f_ret = f;
*implicit = 1;
return 1;
@ -1065,7 +1065,7 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
}
for (f = 0; rh->fields[f].report_fn; f++) {
if (_is_same_field(rh->canonical_field_ids[f], field_canon, rh->field_prefix)) {
if (_is_same_field(rh->canonical_field_ids[f], field_canon, rh->field_prefix, prefix_len)) {
*f_ret = f;
*implicit = 0;
return 1;
@ -1146,7 +1146,7 @@ static int _add_sort_key(struct dm_report *rh, uint32_t field_num, int implicit,
static int _key_match(struct dm_report *rh, const char *key, size_t len,
unsigned report_type_only)
{
char key_canon[DM_REPORT_FIELD_TYPE_ID_LEN];
int implicit;
uint32_t f;
uint32_t flags;
@ -1169,16 +1169,8 @@ static int _key_match(struct dm_report *rh, const char *key, size_t len,
return 0;
}
if (!_get_canonical_field_name(key, len, key_canon, sizeof(key_canon), NULL))
return_0;
for (f = 0; _implicit_report_fields[f].report_fn; f++)
if (_is_same_field(_implicit_report_fields[f].id, key_canon, rh->field_prefix))
return _add_sort_key(rh, f, 1, flags, report_type_only);
for (f = 0; rh->fields[f].report_fn; f++)
if (_is_same_field(rh->canonical_field_ids[f], key_canon, rh->field_prefix))
return _add_sort_key(rh, f, 0, flags, report_type_only);
if (_get_field(rh, key, len, &f, &implicit))
return _add_sort_key(rh, f, implicit, flags, report_type_only);
return 0;
}

View File

@ -795,11 +795,11 @@ static const char *_get_field_type_name(unsigned field_type)
static size_t _get_longest_field_id_len(const struct dm_report_field_type *fields)
{
uint32_t f;
size_t id_len = 0;
size_t l, id_len = 0;
for (f = 0; fields[f].report_fn; f++)
if (strlen(fields[f].id) > id_len)
id_len = strlen(fields[f].id);
if ((l = strlen(fields[f].id)) > id_len)
id_len = l;
return id_len;
}
@ -810,16 +810,17 @@ static void _display_fields_more(struct dm_report *rh,
int display_field_types)
{
uint32_t f;
size_t l;
const struct dm_report_object_type *type;
const char *desc, *last_desc = "";
for (f = 0; fields[f].report_fn; f++)
if (strlen(fields[f].id) > id_len)
id_len = strlen(fields[f].id);
if ((l = strlen(fields[f].id)) > id_len)
id_len = l;
for (type = rh->types; type->data_fn; type++)
if (strlen(type->prefix) + 3 > id_len)
id_len = strlen(type->prefix) + 3;
if ((l = strlen(type->prefix) + 3) > id_len)
id_len = l;
for (f = 0; fields[f].report_fn; f++) {
if (!(type = _find_type(rh, fields[f].type))) {
@ -963,16 +964,13 @@ static int _get_canonical_field_name(const char *field,
* Both names are always null-terminated.
*/
static int _is_same_field(const char *canonical_name1, const char *canonical_name2,
const char *prefix)
const char *prefix, size_t prefix_len)
{
size_t prefix_len;
/* Exact match? */
if (!strcasecmp(canonical_name1, canonical_name2))
return 1;
/* Match including prefix? */
prefix_len = strlen(prefix) - 1;
if (!strncasecmp(prefix, canonical_name1, prefix_len) &&
!strcasecmp(canonical_name1 + prefix_len, canonical_name2))
return 1;
@ -1048,6 +1046,7 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
{
char field_canon[DM_REPORT_FIELD_TYPE_ID_LEN];
uint32_t f;
size_t prefix_len;
if (!flen)
return 0;
@ -1055,8 +1054,9 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
if (!_get_canonical_field_name(field, flen, field_canon, sizeof(field_canon), NULL))
return_0;
prefix_len = strlen(rh->field_prefix) - 1;
for (f = 0; _implicit_report_fields[f].report_fn; f++) {
if (_is_same_field(_implicit_report_fields[f].id, field_canon, rh->field_prefix)) {
if (_is_same_field(_implicit_report_fields[f].id, field_canon, rh->field_prefix, prefix_len)) {
*f_ret = f;
*implicit = 1;
return 1;
@ -1064,7 +1064,7 @@ static int _get_field(struct dm_report *rh, const char *field, size_t flen,
}
for (f = 0; rh->fields[f].report_fn; f++) {
if (_is_same_field(rh->canonical_field_ids[f], field_canon, rh->field_prefix)) {
if (_is_same_field(rh->canonical_field_ids[f], field_canon, rh->field_prefix, prefix_len)) {
*f_ret = f;
*implicit = 0;
return 1;
@ -1145,7 +1145,7 @@ static int _add_sort_key(struct dm_report *rh, uint32_t field_num, int implicit,
static int _key_match(struct dm_report *rh, const char *key, size_t len,
unsigned report_type_only)
{
char key_canon[DM_REPORT_FIELD_TYPE_ID_LEN];
int implicit;
uint32_t f;
uint32_t flags;
@ -1168,16 +1168,8 @@ static int _key_match(struct dm_report *rh, const char *key, size_t len,
return 0;
}
if (!_get_canonical_field_name(key, len, key_canon, sizeof(key_canon), NULL))
return_0;
for (f = 0; _implicit_report_fields[f].report_fn; f++)
if (_is_same_field(_implicit_report_fields[f].id, key_canon, rh->field_prefix))
return _add_sort_key(rh, f, 1, flags, report_type_only);
for (f = 0; rh->fields[f].report_fn; f++)
if (_is_same_field(rh->canonical_field_ids[f], key_canon, rh->field_prefix))
return _add_sort_key(rh, f, 0, flags, report_type_only);
if (_get_field(rh, key, len, &f, &implicit))
return _add_sort_key(rh, f, implicit, flags, report_type_only);
return 0;
}