rem: } short_data;
add: } short_data = { { 0}};
context: int encode_tag(uint8_t * apdu, uint8_t tag_number, bool context_specific,    uint32_t len_value_type){    int len = 1;                // return value    union {        uint8_t byte[2];        uint16_t value;    } short_data;    union {        uint8_t byte[4];        uint32_t value;    } long_data;    apdu[0] = 0;    if (context_specific)        apdu[0] = BIT3;    // additional tag byte after this byte     // for extended tag byte    if (tag_number <= 14)        apdu[0] |= (tag_number << 4);    else {        apdu[0] |= 0xF0;        apdu[1] = tag_number;        len++;    }    // NOTE: additional len byte(s) after extended tag byte    // if larger than 4    if (len_value_type <= 4)        apdu[0] |= len_value_type;    else {        apdu[0] |= 5;        if (len_value_type <= 253) {            apdu[len] = len_value_type;            len++;        } else if (len_value_type <= 65535) {            apdu[len] = 254;            len++;            short_data.value = len_value_type;            if (big_endian()) {                apdu[len + 0] = short_data.byte[0];                apdu[len + 1] = short_data.byte[1];            } else {                apdu[len + 0] = short_data.byte[1];                apdu[len + 1] = short_data.byte[0];            }            len += 2;        } else {            apdu[len] = 255;            len++;            long_data.value = len_value_type;            if (big_endian()) {                apdu[len + 0] = long_data.byte[0];                apdu[len + 1] = long_data.byte[1];                apdu[len + 2] = long_data.byte[2];                apdu[len + 3] = long_data.byte[3];            } else {                apdu[len + 0] = long_data.byte[3];                apdu[len + 1] = long_data.byte[2];                apdu[len + 2] = long_data.byte[1];                apdu[len + 3] = long_data.byte[0];            }            len += 4;        }    }    return len;}