summaryrefslogtreecommitdiffstats
path: root/src/shared/format-table.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-05-24 11:01:04 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-05-29 07:21:19 +0200
commitd553832698c2dfa7e86ffc0755652f0f18853bd8 (patch)
tree3f18f18ab626966bbbe8a0eed0be67784d78614a /src/shared/format-table.c
parenttable: add teble_add_string_cell() (diff)
downloadsystemd-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.c104
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);