mirror of
https://github.com/systemd/systemd.git
synced 2024-12-27 07:22:31 +03:00
format-table: add option to store/format percent and uint64_t values in cells
This commit is contained in:
parent
a22318e554
commit
a4661181fa
@ -70,6 +70,8 @@ typedef struct TableData {
|
||||
uint64_t size;
|
||||
char string[0];
|
||||
uint32_t uint32;
|
||||
uint64_t uint64;
|
||||
int percent; /* we use 'int' as datatype for percent values in order to match the result of parse_percent() */
|
||||
/* … add more here as we start supporting more cell data types … */
|
||||
};
|
||||
} TableData;
|
||||
@ -219,11 +221,15 @@ static size_t table_data_size(TableDataType type, const void *data) {
|
||||
return sizeof(usec_t);
|
||||
|
||||
case TABLE_SIZE:
|
||||
case TABLE_UINT64:
|
||||
return sizeof(uint64_t);
|
||||
|
||||
case TABLE_UINT32:
|
||||
return sizeof(uint32_t);
|
||||
|
||||
case TABLE_PERCENT:
|
||||
return sizeof(int);
|
||||
|
||||
default:
|
||||
assert_not_reached("Uh? Unexpected cell type");
|
||||
}
|
||||
@ -583,6 +589,8 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) {
|
||||
uint64_t size;
|
||||
usec_t usec;
|
||||
uint32_t uint32;
|
||||
uint64_t uint64;
|
||||
int percent;
|
||||
bool b;
|
||||
} buffer;
|
||||
|
||||
@ -617,6 +625,16 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) {
|
||||
data = &buffer.uint32;
|
||||
break;
|
||||
|
||||
case TABLE_UINT64:
|
||||
buffer.uint64 = va_arg(ap, uint64_t);
|
||||
data = &buffer.uint64;
|
||||
break;
|
||||
|
||||
case TABLE_PERCENT:
|
||||
buffer.percent = va_arg(ap, int);
|
||||
data = &buffer.percent;
|
||||
break;
|
||||
|
||||
case _TABLE_DATA_TYPE_MAX:
|
||||
/* Used as end marker */
|
||||
va_end(ap);
|
||||
@ -740,6 +758,12 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t
|
||||
case TABLE_UINT32:
|
||||
return CMP(a->uint32, b->uint32);
|
||||
|
||||
case TABLE_UINT64:
|
||||
return CMP(a->uint64, b->uint64);
|
||||
|
||||
case TABLE_PERCENT:
|
||||
return CMP(a->percent, b->percent);
|
||||
|
||||
default:
|
||||
;
|
||||
}
|
||||
@ -850,6 +874,30 @@ static const char *table_data_format(TableData *d) {
|
||||
break;
|
||||
}
|
||||
|
||||
case TABLE_UINT64: {
|
||||
_cleanup_free_ char *p;
|
||||
|
||||
p = new(char, DECIMAL_STR_WIDTH(d->uint64) + 1);
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
sprintf(p, "%" PRIu64, d->uint64);
|
||||
d->formatted = TAKE_PTR(p);
|
||||
break;
|
||||
}
|
||||
|
||||
case TABLE_PERCENT: {
|
||||
_cleanup_free_ char *p;
|
||||
|
||||
p = new(char, DECIMAL_STR_WIDTH(d->percent) + 2);
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
sprintf(p, "%i%%" , d->percent);
|
||||
d->formatted = TAKE_PTR(p);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
assert_not_reached("Unexpected type?");
|
||||
}
|
||||
|
@ -15,6 +15,8 @@ typedef enum TableDataType {
|
||||
TABLE_TIMESPAN,
|
||||
TABLE_SIZE,
|
||||
TABLE_UINT32,
|
||||
TABLE_UINT64,
|
||||
TABLE_PERCENT,
|
||||
_TABLE_DATA_TYPE_MAX,
|
||||
_TABLE_DATA_TYPE_INVALID = -1,
|
||||
} TableDataType;
|
||||
|
Loading…
Reference in New Issue
Block a user