X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fctf-writer%2Fserialize.c;h=46ec8afbe121d8beb559c24858428c85347a455a;hp=e2fa56d79bb85fb33376656b27bb0794b4881d35;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c55a9f585da53ea54ac458155fac3cdec1779d47 diff --git a/lib/ctf-writer/serialize.c b/lib/ctf-writer/serialize.c index e2fa56d7..46ec8afb 100644 --- a/lib/ctf-writer/serialize.c +++ b/lib/ctf-writer/serialize.c @@ -28,20 +28,26 @@ * SOFTWARE. */ -#include -#include -#include -#include -#include -#include -#include +#define BT_LOG_TAG "CTF-WRITER-SERIALIZE" +#include + #include -#include -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #if (FLT_RADIX != 2) # error "Unsupported floating point radix" @@ -58,11 +64,12 @@ union intval { * optimisation. */ static -int aligned_integer_write(struct bt_ctf_stream_pos *pos, - union intval value, unsigned int alignment, unsigned int size, - bt_bool is_signed, enum bt_ctf_byte_order byte_order) +int aligned_integer_write(struct bt_ctf_stream_pos *pos, union intval value, + unsigned int alignment, unsigned int size, bt_bool is_signed, + enum bt_ctf_byte_order byte_order) { - bt_bool rbo = (byte_order != BT_CTF_MY_BYTE_ORDER); /* reverse byte order */ + /* reverse byte order */ + bt_bool rbo = (byte_order != BT_CTF_MY_BYTE_ORDER); if (!bt_ctf_stream_pos_align(pos, alignment)) return -EFAULT; @@ -70,7 +77,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, if (!bt_ctf_stream_pos_access_ok(pos, size)) return -EFAULT; - assert(!(pos->offset % CHAR_BIT)); + BT_ASSERT(!(pos->offset % CHAR_BIT)); if (!is_signed) { switch (size) { case 8: @@ -108,7 +115,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, break; } default: - assert(BT_FALSE); + abort(); } } else { switch (size) { @@ -147,7 +154,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, break; } default: - assert(BT_FALSE); + abort(); } } @@ -199,41 +206,43 @@ int integer_write(struct bt_ctf_stream_pos *pos, union intval value, } BT_HIDDEN -int bt_ctf_field_integer_write(struct bt_ctf_field_integer *int_field, +int bt_ctf_field_integer_write(struct bt_ctf_field_common *field, struct bt_ctf_stream_pos *pos, enum bt_ctf_byte_order native_byte_order) { - struct bt_ctf_field_type *type = int_field->parent.type; - struct bt_ctf_field_type_integer *int_type = (void *) type; + struct bt_ctf_field_type_common_integer *int_type = + BT_CTF_FROM_COMMON(field->type); + struct bt_ctf_field_common_integer *int_field = BT_CTF_FROM_COMMON(field); enum bt_ctf_byte_order byte_order; union intval value; - byte_order = int_type->user_byte_order; - if (byte_order == BT_CTF_BYTE_ORDER_NATIVE) { + byte_order = (int) int_type->user_byte_order; + if ((int) byte_order == BT_CTF_BYTE_ORDER_NATIVE) { byte_order = native_byte_order; } value.signd = int_field->payload.signd; value.unsignd = int_field->payload.unsignd; - return integer_write(pos, value, type->alignment, + return integer_write(pos, value, int_type->common.alignment, int_type->size, int_type->is_signed, byte_order); } BT_HIDDEN int bt_ctf_field_floating_point_write( - struct bt_ctf_field_floating_point *flt_field, + struct bt_ctf_field_common *field, struct bt_ctf_stream_pos *pos, enum bt_ctf_byte_order native_byte_order) { - struct bt_ctf_field_type *type = flt_field->parent.type; - struct bt_ctf_field_type_floating_point *flt_type = (void *) type; + struct bt_ctf_field_type_common_floating_point *flt_type = + BT_CTF_FROM_COMMON(field->type); + struct bt_ctf_field_common_floating_point *flt_field = BT_CTF_FROM_COMMON(field); enum bt_ctf_byte_order byte_order; union intval value; unsigned int size; - byte_order = flt_type->user_byte_order; - if (byte_order == BT_CTF_BYTE_ORDER_NATIVE) { + byte_order = (int) flt_type->user_byte_order; + if ((int) byte_order == BT_CTF_BYTE_ORDER_NATIVE) { byte_order = native_byte_order; } @@ -259,8 +268,8 @@ int bt_ctf_field_floating_point_write( return -EINVAL; } - return integer_write(pos, value, type->alignment, size, BT_FALSE, - byte_order); + return integer_write(pos, value, flt_type->common.alignment, + size, BT_FALSE, byte_order); } BT_HIDDEN @@ -269,32 +278,33 @@ void bt_ctf_stream_pos_packet_seek(struct bt_ctf_stream_pos *pos, size_t index, { int ret; - assert(whence == SEEK_CUR && index == 0); + BT_ASSERT(whence == SEEK_CUR && index == 0); if (pos->base_mma) { /* unmap old base */ ret = munmap_align(pos->base_mma); if (ret) { - assert(BT_FALSE); + // FIXME: this can legitimately fail? + abort(); } pos->base_mma = NULL; } /* The writer will add padding */ pos->mmap_offset += pos->packet_size / CHAR_BIT; - pos->content_size = -1U; /* Unknown at this point */ - pos->packet_size = getpagesize() * 8 * CHAR_BIT; + pos->packet_size = PACKET_LEN_INCREMENT; do { ret = bt_posix_fallocate(pos->fd, pos->mmap_offset, pos->packet_size / CHAR_BIT); } while (ret == EINTR); - assert(ret == 0); + BT_ASSERT(ret == 0); pos->offset = 0; /* map new base. Need mapping length from header. */ pos->base_mma = mmap_align(pos->packet_size / CHAR_BIT, pos->prot, pos->flags, pos->fd, pos->mmap_offset); if (pos->base_mma == MAP_FAILED) { - assert(BT_FALSE); + // FIXME: this can legitimately fail? + abort(); } }