10
return 4 - length % 4;
14
read_padding (gsize length, gsize *offset)
20
read_card8 (const guint8 *buffer, gsize buffer_length, gsize *offset)
22
if (*offset >= buffer_length)
25
return buffer[*offset - 1];
29
read_card16 (const guint8 *buffer, gsize buffer_length, guint8 byte_order, gsize *offset)
33
a = read_card8 (buffer, buffer_length, offset);
34
b = read_card8 (buffer, buffer_length, offset);
35
if (byte_order == X_BYTE_ORDER_MSB)
42
read_card32 (const guint8 *buffer, gsize buffer_length, guint8 byte_order, gsize *offset)
46
a = read_card8 (buffer, buffer_length, offset);
47
b = read_card8 (buffer, buffer_length, offset);
48
c = read_card8 (buffer, buffer_length, offset);
49
d = read_card8 (buffer, buffer_length, offset);
50
if (byte_order == X_BYTE_ORDER_MSB)
51
return a << 24 | b << 16 | c << 8 | d;
53
return d << 24 | c << 16 | b << 8 | a;
57
read_string8 (const guint8 *buffer, gsize buffer_length, gsize string_length, gsize *offset)
62
string = g_malloc (string_length + 1);
63
for (i = 0; i < string_length; i++)
64
string[i] = read_card8 (buffer, buffer_length, offset);
70
read_string (const guint8 *buffer, gsize buffer_length, gsize string_length, gsize *offset)
72
return (gchar *) read_string8 (buffer, buffer_length, string_length, offset);
76
read_padded_string (const guint8 *buffer, gsize buffer_length, gsize string_length, gsize *offset)
79
value = read_string8 (buffer, buffer_length, string_length, offset);
80
read_padding (pad (string_length), offset);
81
return (gchar *) value;
85
write_card8 (guint8 *buffer, gsize buffer_length, guint8 value, gsize *offset)
87
if (*offset >= buffer_length)
89
buffer[*offset] = value;
94
write_padding (guint8 *buffer, gsize buffer_length, gsize length, gsize *offset)
97
for (i = 0; i < length; i++)
98
write_card8 (buffer, buffer_length, 0, offset);
102
write_card16 (guint8 *buffer, gsize buffer_length, guint8 byte_order, guint16 value, gsize *offset)
104
if (byte_order == X_BYTE_ORDER_MSB)
106
write_card8 (buffer, buffer_length, value >> 8, offset);
107
write_card8 (buffer, buffer_length, value & 0xFF, offset);
111
write_card8 (buffer, buffer_length, value & 0xFF, offset);
112
write_card8 (buffer, buffer_length, value >> 8, offset);
117
write_card32 (guint8 *buffer, gsize buffer_length, guint8 byte_order, guint32 value, gsize *offset)
119
if (byte_order == X_BYTE_ORDER_MSB)
121
write_card8 (buffer, buffer_length, value >> 24, offset);
122
write_card8 (buffer, buffer_length, (value >> 16) & 0xFF, offset);
123
write_card8 (buffer, buffer_length, (value >> 8) & 0xFF, offset);
124
write_card8 (buffer, buffer_length, value & 0xFF, offset);
128
write_card8 (buffer, buffer_length, value & 0xFF, offset);
129
write_card8 (buffer, buffer_length, (value >> 8) & 0xFF, offset);
130
write_card8 (buffer, buffer_length, (value >> 16) & 0xFF, offset);
131
write_card8 (buffer, buffer_length, value >> 24, offset);
136
write_string8 (guint8 *buffer, gsize buffer_length, const guint8 *value, gsize value_length, gsize *offset)
139
for (i = 0; i < value_length; i++)
140
write_card8 (buffer, buffer_length, value[i], offset);
144
padded_string_length (const gchar *value)
146
return (strlen (value) + pad (strlen (value))) / 4;
150
write_string (guint8 *buffer, gsize buffer_length, const gchar *value, gsize *offset)
152
write_string8 (buffer, buffer_length, (guint8 *) value, strlen (value), offset);
156
write_padded_string (guint8 *buffer, gsize buffer_length, const gchar *value, gsize *offset)
158
write_string8 (buffer, buffer_length, (guint8 *) value, strlen (value), offset);
159
write_padding (buffer, buffer_length, pad (strlen (value)), offset);