format-table: introduce TABLE_STRV
This commit is contained in:
parent
8b75798d12
commit
4618660d10
|
@ -80,6 +80,7 @@ typedef struct TableData {
|
||||||
usec_t timespan;
|
usec_t timespan;
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
char string[0];
|
char string[0];
|
||||||
|
char **strv;
|
||||||
int int_val;
|
int int_val;
|
||||||
int8_t int8;
|
int8_t int8;
|
||||||
int16_t int16;
|
int16_t int16;
|
||||||
|
@ -207,6 +208,9 @@ static TableData *table_data_free(TableData *d) {
|
||||||
free(d->formatted);
|
free(d->formatted);
|
||||||
free(d->url);
|
free(d->url);
|
||||||
|
|
||||||
|
if (d->type == TABLE_STRV)
|
||||||
|
strv_free(d->strv);
|
||||||
|
|
||||||
return mfree(d);
|
return mfree(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,6 +246,9 @@ static size_t table_data_size(TableDataType type, const void *data) {
|
||||||
case TABLE_PATH:
|
case TABLE_PATH:
|
||||||
return strlen(data) + 1;
|
return strlen(data) + 1;
|
||||||
|
|
||||||
|
case TABLE_STRV:
|
||||||
|
return sizeof(char **);
|
||||||
|
|
||||||
case TABLE_BOOLEAN:
|
case TABLE_BOOLEAN:
|
||||||
return sizeof(bool);
|
return sizeof(bool);
|
||||||
|
|
||||||
|
@ -344,8 +351,8 @@ static TableData *table_data_new(
|
||||||
unsigned align_percent,
|
unsigned align_percent,
|
||||||
unsigned ellipsize_percent) {
|
unsigned ellipsize_percent) {
|
||||||
|
|
||||||
|
_cleanup_free_ TableData *d = NULL;
|
||||||
size_t data_size;
|
size_t data_size;
|
||||||
TableData *d;
|
|
||||||
|
|
||||||
data_size = table_data_size(type, data);
|
data_size = table_data_size(type, data);
|
||||||
|
|
||||||
|
@ -360,9 +367,15 @@ static TableData *table_data_new(
|
||||||
d->weight = weight;
|
d->weight = weight;
|
||||||
d->align_percent = align_percent;
|
d->align_percent = align_percent;
|
||||||
d->ellipsize_percent = ellipsize_percent;
|
d->ellipsize_percent = ellipsize_percent;
|
||||||
memcpy_safe(d->data, data, data_size);
|
|
||||||
|
|
||||||
return d;
|
if (type == TABLE_STRV) {
|
||||||
|
d->strv = strv_copy(data);
|
||||||
|
if (!d->strv)
|
||||||
|
return NULL;
|
||||||
|
} else
|
||||||
|
memcpy_safe(d->data, data, data_size);
|
||||||
|
|
||||||
|
return TAKE_PTR(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
int table_add_cell_full(
|
int table_add_cell_full(
|
||||||
|
@ -778,6 +791,10 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) {
|
||||||
data = va_arg(ap, const char *);
|
data = va_arg(ap, const char *);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TABLE_STRV:
|
||||||
|
data = va_arg(ap, char * const *);
|
||||||
|
break;
|
||||||
|
|
||||||
case TABLE_BOOLEAN:
|
case TABLE_BOOLEAN:
|
||||||
buffer.b = va_arg(ap, int);
|
buffer.b = va_arg(ap, int);
|
||||||
data = &buffer.b;
|
data = &buffer.b;
|
||||||
|
@ -1055,6 +1072,9 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t
|
||||||
case TABLE_PATH:
|
case TABLE_PATH:
|
||||||
return path_compare(a->string, b->string);
|
return path_compare(a->string, b->string);
|
||||||
|
|
||||||
|
case TABLE_STRV:
|
||||||
|
return strv_compare(a->strv, b->strv);
|
||||||
|
|
||||||
case TABLE_BOOLEAN:
|
case TABLE_BOOLEAN:
|
||||||
if (!a->boolean && b->boolean)
|
if (!a->boolean && b->boolean)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1185,6 +1205,17 @@ static const char *table_data_format(Table *t, TableData *d) {
|
||||||
|
|
||||||
return d->string;
|
return d->string;
|
||||||
|
|
||||||
|
case TABLE_STRV: {
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = strv_join(d->strv, "\n");
|
||||||
|
if (!p)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
d->formatted = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case TABLE_BOOLEAN:
|
case TABLE_BOOLEAN:
|
||||||
return yes_no(d->boolean);
|
return yes_no(d->boolean);
|
||||||
|
|
||||||
|
@ -2054,6 +2085,9 @@ static int table_data_to_json(TableData *d, JsonVariant **ret) {
|
||||||
case TABLE_PATH:
|
case TABLE_PATH:
|
||||||
return json_variant_new_string(ret, d->string);
|
return json_variant_new_string(ret, d->string);
|
||||||
|
|
||||||
|
case TABLE_STRV:
|
||||||
|
return json_variant_new_array_strv(ret, d->strv);
|
||||||
|
|
||||||
case TABLE_BOOLEAN:
|
case TABLE_BOOLEAN:
|
||||||
return json_variant_new_boolean(ret, d->boolean);
|
return json_variant_new_boolean(ret, d->boolean);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
typedef enum TableDataType {
|
typedef enum TableDataType {
|
||||||
TABLE_EMPTY,
|
TABLE_EMPTY,
|
||||||
TABLE_STRING,
|
TABLE_STRING,
|
||||||
|
TABLE_STRV,
|
||||||
TABLE_PATH,
|
TABLE_PATH,
|
||||||
TABLE_BOOLEAN,
|
TABLE_BOOLEAN,
|
||||||
TABLE_TIMESTAMP,
|
TABLE_TIMESTAMP,
|
||||||
|
|
Loading…
Reference in a new issue