X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fir%2Fclock.c;h=bf2fbda5b2627b8cffb9584650ff1a81921b2afa;hp=5ebaf046bbedc81f5e3f55a3a31cc2889be3598c;hb=61cf588beae752e5ddfc60b6b5310f769ac9e852;hpb=d2dc44b6775655cf77a13a3901898c3f1ca26baa diff --git a/formats/ctf/ir/clock.c b/formats/ctf/ir/clock.c index 5ebaf046..bf2fbda5 100644 --- a/formats/ctf/ir/clock.c +++ b/formats/ctf/ir/clock.c @@ -26,42 +26,84 @@ * SOFTWARE. */ -#include #include +#include +#include #include +#include #include #include static -void bt_ctf_clock_destroy(struct bt_ctf_ref *ref); +void bt_ctf_clock_destroy(struct bt_object *obj); + +BT_HIDDEN +struct bt_ctf_clock *_bt_ctf_clock_create(void) +{ + struct bt_ctf_clock *clock = g_new0( + struct bt_ctf_clock, 1); + + if (!clock) { + goto end; + } + + clock->precision = 1; + clock->frequency = 1000000000; + bt_object_init(clock, bt_ctf_clock_destroy); +end: + return clock; +} + +BT_HIDDEN +int bt_ctf_clock_set_name(struct bt_ctf_clock *clock, + const char *name) +{ + int ret = 0; + + if (bt_ctf_validate_identifier(name)) { + ret = -1; + goto end; + } + + if (clock->name) { + g_string_assign(clock->name, name); + } else { + clock->name = g_string_new(name); + if (!clock->name) { + ret = -1; + goto end; + } + } + +end: + return ret; +} struct bt_ctf_clock *bt_ctf_clock_create(const char *name) { + int ret; struct bt_ctf_clock *clock = NULL; - if (validate_identifier(name)) { + clock = _bt_ctf_clock_create(); + if (!clock) { goto error; } - clock = g_new0(struct bt_ctf_clock, 1); - if (!clock) { + ret = bt_ctf_clock_set_name(clock, name); + if (ret) { goto error; } - clock->name = g_string_new(name); - if (!clock->name) { - goto error_destroy; + ret = bt_uuid_generate(clock->uuid); + if (ret) { + goto error; } - clock->precision = 1; - clock->frequency = 1000000000; - uuid_generate(clock->uuid); - bt_ctf_ref_init(&clock->ref_count); + clock->uuid_set = 1; return clock; -error_destroy: - bt_ctf_clock_destroy(&clock->ref_count); error: - return NULL; + BT_PUT(clock); + return clock; } const char *bt_ctf_clock_get_name(struct bt_ctf_clock *clock) @@ -164,20 +206,21 @@ end: return ret; } -uint64_t bt_ctf_clock_get_offset_s(struct bt_ctf_clock *clock) +int bt_ctf_clock_get_offset_s(struct bt_ctf_clock *clock, int64_t *offset_s) { - uint64_t ret = -1ULL; + int ret = 0; - if (!clock) { + if (!clock || !offset_s) { + ret = -1; goto end; } - ret = clock->offset_s; + *offset_s = clock->offset_s; end: return ret; } -int bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock, uint64_t offset_s) +int bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock, int64_t offset_s) { int ret = 0; @@ -191,20 +234,21 @@ end: return ret; } -uint64_t bt_ctf_clock_get_offset(struct bt_ctf_clock *clock) +int bt_ctf_clock_get_offset(struct bt_ctf_clock *clock, int64_t *offset) { - uint64_t ret = -1ULL; + int ret = 0; - if (!clock) { + if (!clock || !offset) { + ret = -1; goto end; } - ret = clock->offset; + *offset = clock->offset; end: return ret; } -int bt_ctf_clock_set_offset(struct bt_ctf_clock *clock, uint64_t offset) +int bt_ctf_clock_set_offset(struct bt_ctf_clock *clock, int64_t offset) { int ret = 0; @@ -249,7 +293,7 @@ const unsigned char *bt_ctf_clock_get_uuid(struct bt_ctf_clock *clock) { const unsigned char *ret; - if (!clock) { + if (!clock || !clock->uuid_set) { ret = NULL; goto end; } @@ -263,30 +307,32 @@ int bt_ctf_clock_set_uuid(struct bt_ctf_clock *clock, const unsigned char *uuid) { int ret = 0; - if (!clock || !uuid) { + if (!clock || !uuid || clock->frozen) { ret = -1; goto end; } memcpy(clock->uuid, uuid, sizeof(uuid_t)); + clock->uuid_set = 1; end: return ret; } -uint64_t bt_ctf_clock_get_time(struct bt_ctf_clock *clock) +int bt_ctf_clock_get_time(struct bt_ctf_clock *clock, int64_t *time) { - uint64_t ret = -1ULL; + int ret = 0; - if (!clock) { + if (!clock || !time) { + ret = -1; goto end; } - ret = clock->time; + *time = clock->time; end: return ret; } -int bt_ctf_clock_set_time(struct bt_ctf_clock *clock, uint64_t time) +int bt_ctf_clock_set_time(struct bt_ctf_clock *clock, int64_t time) { int ret = 0; @@ -303,20 +349,12 @@ end: void bt_ctf_clock_get(struct bt_ctf_clock *clock) { - if (!clock) { - return; - } - - bt_ctf_ref_get(&clock->ref_count); + bt_get(clock); } void bt_ctf_clock_put(struct bt_ctf_clock *clock) { - if (!clock) { - return; - } - - bt_ctf_ref_put(&clock->ref_count, bt_ctf_clock_destroy); + bt_put(clock); } BT_HIDDEN @@ -349,7 +387,7 @@ void bt_ctf_clock_serialize(struct bt_ctf_clock *clock, uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); - if (clock->description->len) { + if (clock->description) { g_string_append_printf(context->string, "\tdescription = \"%s\";\n", clock->description->str); } @@ -368,15 +406,11 @@ void bt_ctf_clock_serialize(struct bt_ctf_clock *clock, } static -void bt_ctf_clock_destroy(struct bt_ctf_ref *ref) +void bt_ctf_clock_destroy(struct bt_object *obj) { struct bt_ctf_clock *clock; - if (!ref) { - return; - } - - clock = container_of(ref, struct bt_ctf_clock, ref_count); + clock = container_of(obj, struct bt_ctf_clock, base); if (clock->name) { g_string_free(clock->name, TRUE); }