X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-writer%2Fserialize.c;h=e2f3bb6a77a7e1e7e697e998c6c28b407c96b32c;hb=3dca22768a95bef664012559aa9ac977091de6ac;hp=0e04229ff22bb7f6289c36736ffd5ea347642b7c;hpb=3f5808e584c030d29db447ecffd42496d09b85fb;p=babeltrace.git diff --git a/lib/ctf-writer/serialize.c b/lib/ctf-writer/serialize.c index 0e04229f..e2f3bb6a 100644 --- a/lib/ctf-writer/serialize.c +++ b/lib/ctf-writer/serialize.c @@ -28,19 +28,25 @@ * SOFTWARE. */ +#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 +#include +#include +#include +#include +#include +#include +#include #include #if (FLT_RADIX != 2) @@ -58,11 +64,11 @@ union intval { * optimisation. */ static -int aligned_integer_write(struct bt_ctf_stream_pos *pos, - union intval value, unsigned int alignment, unsigned int size, - 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) { - bool rbo = (byte_order != BT_CTF_MY_BYTE_ORDER); /* reverse byte order */ + bt_bool rbo = (byte_order != BT_MY_BYTE_ORDER); /* reverse byte order */ if (!bt_ctf_stream_pos_align(pos, alignment)) return -EFAULT; @@ -70,7 +76,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 +114,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, break; } default: - assert(false); + abort(); } } else { switch (size) { @@ -147,7 +153,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, break; } default: - assert(false); + abort(); } } @@ -158,7 +164,7 @@ int aligned_integer_write(struct bt_ctf_stream_pos *pos, static int integer_write(struct bt_ctf_stream_pos *pos, union intval value, - unsigned int alignment, unsigned int size, bool is_signed, + unsigned int alignment, unsigned int size, bt_bool is_signed, enum bt_ctf_byte_order byte_order) { if (!(alignment % CHAR_BIT) @@ -199,41 +205,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_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_field_type_common_integer *int_type = + BT_FROM_COMMON(field->type); + struct bt_field_common_integer *int_field = BT_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 (byte_order == BT_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_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_field_type_common_floating_point *flt_type = + BT_FROM_COMMON(field->type); + struct bt_field_common_floating_point *flt_field = BT_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 (byte_order == BT_BYTE_ORDER_NATIVE) { byte_order = native_byte_order; } @@ -259,8 +267,8 @@ int bt_ctf_field_floating_point_write( return -EINVAL; } - return integer_write(pos, value, type->alignment, size, false, - byte_order); + return integer_write(pos, value, flt_type->common.alignment, + size, BT_FALSE, byte_order); } BT_HIDDEN @@ -269,32 +277,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(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(false); + // FIXME: this can legitimately fail? + abort(); } }