示例#1
0
int test_pack_bool() {
    size_t sz;
    uint8_t data[] = {0x00};

    minipack_pack_bool(data, true, &sz);
    mu_assert_mem(data, 1, "\xC3");
    mu_assert(sz == 1);

    minipack_pack_bool(data, false, &sz);
    mu_assert_mem(data, 1, "\xC2");
    mu_assert(sz == 1);

    return 0;
}
示例#2
0
// Serializes event data to memory at a given pointer.
//
// data   - The event data to pack.
// ptr    - The pointer to the current location.
// length - The number of bytes written.
//
// Returns 0 if successful, otherwise returns -1.
int sky_event_data_pack(sky_event_data *data, void *ptr, size_t *sz)
{
    size_t _sz;
    void *start = ptr;

    // Validate.
    check(data != NULL, "Event data required");
    check(ptr != NULL, "Pointer required");
    
    // Write key.
    *((sky_property_id_t*)ptr) = data->key;
    ptr += sizeof(data->key);

    // Write value.
    switch(data->data_type) {
        case SKY_DATA_TYPE_INT:
            minipack_pack_int(ptr, data->int_value, &_sz);
            check(_sz != 0, "Unable to pack event data int value");
            ptr += _sz;
            break;
        case SKY_DATA_TYPE_DOUBLE:
            minipack_pack_double(ptr, data->double_value, &_sz);
            check(_sz != 0, "Unable to pack event data float value");
            ptr += _sz;
            break;
        case SKY_DATA_TYPE_BOOLEAN:
            minipack_pack_bool(ptr, data->boolean_value, &_sz);
            check(_sz != 0, "Unable to pack event data boolean value");
            ptr += _sz;
            break;
        case SKY_DATA_TYPE_STRING:
            // Write value header.
            minipack_pack_raw(ptr, blength(data->string_value), &_sz);
            check(_sz != 0, "Unable to pack event data value header at %p", ptr);
            ptr += _sz;

            // Write actual string value.
            if(blength(data->string_value) > 0) {
                assert(bdata(data->string_value) != NULL);
                memmove(ptr, bdata(data->string_value), blength(data->string_value));
            }
            ptr += blength(data->string_value);
            break;
        default:
            sentinel("Invalid data type (%d) for event data", data->data_type);
    }

    // Store number of bytes written.
    if(sz != NULL) *sz = (ptr-start);
    
    return 0;

error:
    return -1;
}