Refactor attr string value utf 16/32
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 10 Nov 2022 20:42:05 +0000 (15:42 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 10 Nov 2022 20:42:05 +0000 (15:42 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/side/trace.h
src/tracer.c

index 2c2ab0822ba0d28efe655098b2f1279ba552634d..a5461fcde904c4f0100b99ff09c8591af25e98d4 100644 (file)
@@ -165,9 +165,7 @@ enum side_attr_type {
        SIDE_ATTR_TYPE_FLOAT_BINARY32,
        SIDE_ATTR_TYPE_FLOAT_BINARY64,
        SIDE_ATTR_TYPE_FLOAT_BINARY128,
-       SIDE_ATTR_TYPE_STRING_UTF8,
-       SIDE_ATTR_TYPE_STRING_UTF16,
-       SIDE_ATTR_TYPE_STRING_UTF32,
+       SIDE_ATTR_TYPE_STRING,
 };
 
 enum side_loglevel {
@@ -258,22 +256,22 @@ union side_float_value {
 #endif
 } SIDE_PACKED;
 
+struct side_type_raw_string {
+       const void *p;                  /* pointer to string */
+       uint8_t unit_size;              /* 1, 2, or 4 bytes */
+       uint8_t byte_order;             /* enum side_type_label_byte_order */
+} SIDE_PACKED;
+
 struct side_attr_value {
        uint32_t type;  /* enum side_attr_type */
        union {
                uint8_t bool_value;
-               uint64_t string_value;  /* const { uint8_t, uint16_t, uint32_t } * */
+               struct side_type_raw_string string_value;
                union side_integer_value integer_value;
                union side_float_value float_value;
        } SIDE_PACKED u;
 };
 
-struct side_type_raw_string {
-       const void *p;                  /* pointer to string */
-       uint8_t unit_size;              /* 1, 2, or 4 bytes */
-       uint8_t byte_order;             /* enum side_type_label_byte_order */
-} SIDE_PACKED;
-
 /* User attributes. */
 struct side_attr {
        const struct side_type_raw_string key;
@@ -672,9 +670,22 @@ struct side_event_description {
 #define side_attr_float_binary32(_val) { .type = SIDE_ATTR_TYPE_FLOAT_BINARY32, .u = { .float_value = { .side_float_binary32 = (_val) } } }
 #define side_attr_float_binary64(_val) { .type = SIDE_ATTR_TYPE_FLOAT_BINARY64, .u = { .float_value = { .side_float_binary64 = (_val) } } }
 #define side_attr_float_binary128(_val)        { .type = SIDE_ATTR_TYPE_FLOAT_BINARY128, .u = { .float_value = { .side_float_binary128 = (_val) } } }
-#define side_attr_string(_val)         { .type = SIDE_ATTR_TYPE_STRING_UTF8, .u = { .string_value = (uintptr_t) (_val) } }
-#define side_attr_string16(_val)       { .type = SIDE_ATTR_TYPE_STRING_UTF16, .u = { .string_value = (uintptr_t) (_val) } }
-#define side_attr_string32(_val)       { .type = SIDE_ATTR_TYPE_STRING_UTF32, .u = { .string_value = (uintptr_t) (_val) } }
+
+#define _side_attr_string(_val, _byte_order, _unit_size) \
+       { \
+               .type = SIDE_ATTR_TYPE_STRING, \
+               .u = { \
+                       .string_value = { \
+                               .p = (const void *) (_val), \
+                               .unit_size = _unit_size, \
+                               .byte_order = _byte_order, \
+                       }, \
+               }, \
+       }
+
+#define side_attr_string(_val)         _side_attr_string(_val, SIDE_TYPE_BYTE_ORDER_HOST, sizeof(uint8_t))
+#define side_attr_string16(_val)       _side_attr_string(_val, SIDE_TYPE_BYTE_ORDER_HOST, sizeof(uint16_t))
+#define side_attr_string32(_val)       _side_attr_string(_val, SIDE_TYPE_BYTE_ORDER_HOST, sizeof(uint32_t))
 
 /* Stack-copy enumeration type definitions */
 
index db21bab556373f61b2015fff7c1ba04d222a47d1..aea52dc8c357e7411bf66e16de9c65246b2a5fb2 100644 (file)
@@ -323,17 +323,10 @@ void tracer_print_attr_type(const char *separator, const struct side_attr *attr)
                fprintf(stderr, "ERROR: Unsupported binary128 float type\n");
                abort();
 #endif
-       case SIDE_ATTR_TYPE_STRING_UTF8:
-               tracer_print_string((const void *)(uintptr_t) attr->value.u.string_value,
-                               1, SIDE_TYPE_BYTE_ORDER_HOST, NULL);
-               break;
-       case SIDE_ATTR_TYPE_STRING_UTF16:
-               tracer_print_string((const void *)(uintptr_t) attr->value.u.string_value,
-                               2, SIDE_TYPE_BYTE_ORDER_HOST, NULL);
-               break;
-       case SIDE_ATTR_TYPE_STRING_UTF32:
-               tracer_print_string((const void *)(uintptr_t) attr->value.u.string_value,
-                               4, SIDE_TYPE_BYTE_ORDER_HOST, NULL);
+       case SIDE_ATTR_TYPE_STRING:
+               tracer_print_string(attr->value.u.string_value.p,
+                               attr->value.u.string_value.unit_size,
+                               attr->value.u.string_value.byte_order, NULL);
                break;
        default:
                fprintf(stderr, "ERROR: <UNKNOWN ATTRIBUTE TYPE>");
This page took 0.026233 seconds and 4 git commands to generate.