From d553832698c2dfa7e86ffc0755652f0f18853bd8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 24 May 2019 18:01:04 +0900 Subject: [PATCH] table: add more basic types --- src/shared/format-table.c | 104 ++++++++++++++++++++++++++++++++++++++ src/shared/format-table.h | 4 ++ 2 files changed, 108 insertions(+) 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); diff --git a/src/shared/format-table.h b/src/shared/format-table.h index 5a52c43e25..c5cf5708d4 100644 --- a/src/shared/format-table.h +++ b/src/shared/format-table.h @@ -15,6 +15,10 @@ typedef enum TableDataType { TABLE_TIMESTAMP, TABLE_TIMESPAN, TABLE_SIZE, + TABLE_INT, + TABLE_INT32, + TABLE_INT64, + TABLE_UINT, TABLE_UINT32, TABLE_UINT64, TABLE_PERCENT, -- 2.25.1