X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fwriter%2Fevent-types.c;h=7f7fa7622247abb3e09288960429722d3f9cf8a1;hp=4ed9fed9942920bff28b6617d6f377d88a0aed93;hb=a39fa057a49e51b05318265b270940d10c7b3d18;hpb=5034fb5ebaaad65f41cefdb833999772e04caa00 diff --git a/formats/ctf/writer/event-types.c b/formats/ctf/writer/event-types.c index 4ed9fed9..7f7fa762 100644 --- a/formats/ctf/writer/event-types.c +++ b/formats/ctf/writer/event-types.c @@ -33,6 +33,7 @@ #include #include #include +#include struct range_overlap_query { int64_t range_start, range_end; @@ -385,6 +386,7 @@ int bt_ctf_field_type_enumeration_add_mapping( struct enumeration_mapping *mapping; struct bt_ctf_field_type_enumeration *enumeration; struct range_overlap_query query; + char *escaped_string; if (!type || (type->declaration->id != CTF_TYPE_ENUM) || type->frozen || @@ -393,12 +395,18 @@ int bt_ctf_field_type_enumeration_add_mapping( goto end; } - if (validate_identifier(string)) { + if (!string || strlen(string) == 0) { ret = -1; goto end; } - mapping_name = g_quark_from_string(string); + escaped_string = g_strescape(string, NULL); + if (!escaped_string) { + ret = -1; + goto end; + } + + mapping_name = g_quark_from_string(escaped_string); query = (struct range_overlap_query) { .range_start = range_start, .range_end = range_end, .mapping_name = mapping_name, @@ -410,18 +418,20 @@ int bt_ctf_field_type_enumeration_add_mapping( g_ptr_array_foreach(enumeration->entries, check_ranges_overlap, &query); if (query.overlaps) { ret = -1; - goto end; + goto error_free; } mapping = g_new(struct enumeration_mapping, 1); if (!mapping) { ret = -1; - goto end; + goto error_free; } *mapping = (struct enumeration_mapping) {.range_start = range_start, .range_end = range_end, .string = mapping_name}; g_ptr_array_add(enumeration->entries, mapping); +error_free: + free(escaped_string); end: return ret; } @@ -1200,12 +1210,13 @@ int bt_ctf_field_type_enumeration_serialize(struct bt_ctf_field_type *type, enumeration->entries->pdata[entry]; if (mapping->range_start == mapping->range_end) { - g_string_append_printf(context->string, "%s = %" PRId64, + g_string_append_printf(context->string, + "\"%s\" = %" PRId64, g_quark_to_string(mapping->string), mapping->range_start); } else { g_string_append_printf(context->string, - "%s = %" PRId64 " ... %" PRId64, + "\"%s\" = %" PRId64 " ... %" PRId64, g_quark_to_string(mapping->string), mapping->range_start, mapping->range_end); }