diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-05-24 11:01:04 +0200 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-05-29 07:21:19 +0200 |
commit | d553832698c2dfa7e86ffc0755652f0f18853bd8 (patch) | |
tree | 3f18f18ab626966bbbe8a0eed0be67784d78614a /src/shared/format-table.c | |
parent | table: add teble_add_string_cell() (diff) | |
download | systemd-d553832698c2dfa7e86ffc0755652f0f18853bd8.tar.xz systemd-d553832698c2dfa7e86ffc0755652f0f18853bd8.zip |
table: add more basic types
Diffstat (limited to 'src/shared/format-table.c')
-rw-r--r-- | src/shared/format-table.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/shared/format-table.c b/src/shared/format-table.c index de72bf02f3..09357694dd 100644 --- a/src/shared/format-table.c +++ b/src/shared/format-table.c @@ -73,6 +73,10 @@ typedef struct TableData { usec_t timespan; uint64_t size; char string[0]; + int int_val; + int32_t int32; + int64_t int64; + unsigned uint_val; 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() */ @@ -226,12 +230,16 @@ static size_t table_data_size(TableDataType type, const void *data) { return sizeof(usec_t); case TABLE_SIZE: + case TABLE_INT64: case TABLE_UINT64: return sizeof(uint64_t); + case TABLE_INT32: case TABLE_UINT32: return sizeof(uint32_t); + case TABLE_INT: + case TABLE_UINT: case TABLE_PERCENT: return sizeof(int); @@ -678,6 +686,10 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) { union { uint64_t size; usec_t usec; + int int_val; + int32_t int32; + int64_t int64; + unsigned uint_val; uint32_t uint32; uint64_t uint64; int percent; @@ -710,6 +722,26 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) { data = &buffer.size; break; + case TABLE_INT: + buffer.int_val = va_arg(ap, int); + data = &buffer.int_val; + break; + + case TABLE_INT32: + buffer.int32 = va_arg(ap, int32_t); + data = &buffer.int32; + break; + + case TABLE_INT64: + buffer.int64 = va_arg(ap, int64_t); + data = &buffer.int64; + break; + + case TABLE_UINT: + buffer.uint_val = va_arg(ap, unsigned); + data = &buffer.uint_val; + break; + case TABLE_UINT32: buffer.uint32 = va_arg(ap, uint32_t); data = &buffer.uint32; @@ -845,6 +877,18 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t case TABLE_SIZE: return CMP(a->size, b->size); + case TABLE_INT: + return CMP(a->int_val, b->int_val); + + case TABLE_INT32: + return CMP(a->int32, b->int32); + + case TABLE_INT64: + return CMP(a->int64, b->int64); + + case TABLE_UINT: + return CMP(a->uint_val, b->uint_val); + case TABLE_UINT32: return CMP(a->uint32, b->uint32); @@ -966,6 +1010,54 @@ static const char *table_data_format(TableData *d) { break; } + case TABLE_INT: { + _cleanup_free_ char *p; + + p = new(char, DECIMAL_STR_WIDTH(d->int_val) + 1); + if (!p) + return NULL; + + sprintf(p, "%i", d->int_val); + d->formatted = TAKE_PTR(p); + break; + } + + case TABLE_INT32: { + _cleanup_free_ char *p; + + p = new(char, DECIMAL_STR_WIDTH(d->int32) + 1); + if (!p) + return NULL; + + sprintf(p, "%" PRIi32, d->int32); + d->formatted = TAKE_PTR(p); + break; + } + + case TABLE_INT64: { + _cleanup_free_ char *p; + + p = new(char, DECIMAL_STR_WIDTH(d->int64) + 1); + if (!p) + return NULL; + + sprintf(p, "%" PRIi64, d->int64); + d->formatted = TAKE_PTR(p); + break; + } + + case TABLE_UINT: { + _cleanup_free_ char *p; + + p = new(char, DECIMAL_STR_WIDTH(d->uint_val) + 1); + if (!p) + return NULL; + + sprintf(p, "%u", d->uint_val); + d->formatted = TAKE_PTR(p); + break; + } + case TABLE_UINT32: { _cleanup_free_ char *p; @@ -1505,6 +1597,18 @@ static int table_data_to_json(TableData *d, JsonVariant **ret) { return json_variant_new_unsigned(ret, d->size); + case TABLE_INT: + return json_variant_new_integer(ret, d->int_val); + + case TABLE_INT32: + return json_variant_new_integer(ret, d->int32); + + case TABLE_INT64: + return json_variant_new_integer(ret, d->int64); + + case TABLE_UINT: + return json_variant_new_unsigned(ret, d->uint_val); + case TABLE_UINT32: return json_variant_new_unsigned(ret, d->uint32); |