commit 85e6e35

uint  ·  2026-08-05 01:37:39 +0000 UTC
parent 8867659
use magnolia types in mc protos
7 files changed,  +117, -116
M TODO
M TODO
+3, -2
 1@@ -1,10 +1,10 @@
 2 uint:
 3-[ ] Clean up test_scene.h
 4-[ ] Consolidate variable initaliasation methods
 5+[ ] Remove `renderer_backend`
 6 [ ] mc_*, mg_random type cleanup (int->i8 on bool)
 7 [ ] Review `block`
 8 [ ] Small3DLib inline?? check ANSI
 9 
10+[ ] Consolidate variable initaliasation methods
11 [-] Face Hiding
12 [-] Chunk meshing
13 	[ ] Greedily
14@@ -21,6 +21,7 @@ uint:
15 
16 [ ] Check it works on Windows
17 
18+[X] Clean up test_scene.h
19 [X] Maus wayland
20 [X] Wireframe
21 [X] Separate SDL from main.c
+6, -6
 1@@ -56,7 +56,7 @@ typedef enum {
 2 
 3 /* log in to minecraft server
 4    returns 1 on success, 0 on failure */
 5-int mc_client_login(MCClient** out, const char* address, const MCAccount* account, char* error, size_t error_size);
 6+i8 mc_client_login(MCClient** out, const char* address, const MCAccount* account, char* error, size_t error_size);
 7 
 8 /* interrupt blocking client operations */
 9 void mc_client_interrupt(MCClient* client);
10@@ -66,23 +66,23 @@ void mc_client_destroy(MCClient* client);
11 
12 /* read next packet from client
13    returns 1 on success, 0 on failure */
14-int mc_client_read(MCClient* client, MCPacket* packet, char* error, size_t error_size);
15+i8 mc_client_read(MCClient* client, MCPacket* packet, char* error, size_t error_size);
16 
17 /* write packet to client
18    returns 1 on success, 0 on failure */
19-int mc_client_write(MCClient* client, i32 packet_id, const void* data, size_t size);
20+i8 mc_client_write(MCClient* client, i32 packet_id, const void* data, size_t size);
21 
22 /* poll for packets
23    returns 1: packet recieved, 0: no packet awaiting, -1: connection error */
24-int mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error_size);
25+i8 mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error_size);
26 
27 /* free packet data */
28 void mc_packet_free(MCPacket* packet);
29 
30 /* send server player look data
31    returns 1 on success, 0 on failure */
32-int mc_client_send_position_look(MCClient* client, double x, double feet_y, double z, float yaw, float pitch,
33-                                 i8 grounded);
34+i8 mc_client_send_position_look(MCClient* client, double x, double feet_y, double z, float yaw, float pitch,
35+                                i8 grounded);
36 
37 /* get client username
38    returns username, or empty string for null client */
+9, -9
 1@@ -13,13 +13,13 @@
 2 #define MC_JOIN_PATH "/session/minecraft/join"
 3 
 4 static long http_status(const MCBuffer* response);
 5-static int  json_string(MCBuffer* buffer, const char* value);
 6-static int  tls_read_response(struct tls* tls, MCBuffer* response);
 7-static int  tls_write_all(struct tls* tls, const void* data, size_t size);
 8+static i8   json_string(MCBuffer* buffer, const char* value);
 9+static i8   tls_read_response(struct tls* tls, MCBuffer* response);
10+static i8   tls_write_all(struct tls* tls, const void* data, size_t size);
11 
12 /* write escaped JSON string
13    returns 1 on success, 0 on failure */
14-static int json_string(MCBuffer* buffer, const char* value)
15+static i8 json_string(MCBuffer* buffer, const char* value)
16 {
17 	const unsigned char* p = (const unsigned char*)value;
18 	if (!bufwrite_u8(buffer, '"'))
19@@ -81,7 +81,7 @@ static int json_string(MCBuffer* buffer, const char* value)
20 
21 /* write all bytes to TLS connection
22    returns 1 on success, 0 on failure */
23-static int tls_write_all(struct tls* tls, const void* data, size_t size)
24+static i8 tls_write_all(struct tls* tls, const void* data, size_t size)
25 {
26 	const u8* bytes = (const u8*)data;
27 	size_t    sent = 0;
28@@ -99,7 +99,7 @@ static int tls_write_all(struct tls* tls, const void* data, size_t size)
29 
30 /* read TLS response
31    returns 1 on success, 0 on failure */
32-static int tls_read_response(struct tls* tls, MCBuffer* response)
33+static i8 tls_read_response(struct tls* tls, MCBuffer* response)
34 {
35 	u8 data[2048];
36 
37@@ -130,8 +130,8 @@ static long http_status(const MCBuffer* response)
38 	return status;
39 }
40 
41-int mc_join_server(const MCAccount* account, const char* server_id, const u8 shared_secret[16], const u8* public_key,
42-                   size_t public_key_size, char* error, size_t error_size)
43+i8 mc_join_server(const MCAccount* account, const char* server_id, const u8 shared_secret[16], const u8* public_key,
44+                  size_t public_key_size, char* error, size_t error_size)
45 {
46 	struct tls_config* config = NULL;
47 	struct tls*        tls = NULL;
48@@ -141,7 +141,7 @@ int mc_join_server(const MCAccount* account, const char* server_id, const u8 sha
49 	char               hash[42];
50 	char               headers[512];
51 	long               status;
52-	int                ok = 0;
53+	i8                 ok = 0;
54 
55 	if (!account->access_token || !account->access_token[0] || !account->profile_uuid ||
56 	    !account->profile_uuid[0]) {
+23, -23
  1@@ -36,7 +36,7 @@ void buffree(MCBuffer* buffer)
  2 }
  3 
  4 /* make sure an MCBuffer has can fit its current size + extra bytes */
  5-int bufreserve(MCBuffer* buffer, size_t extra)
  6+i8 bufreserve(MCBuffer* buffer, size_t extra)
  7 {
  8 	size_t needed;
  9 	size_t capacity;
 10@@ -63,7 +63,7 @@ int bufreserve(MCBuffer* buffer, size_t extra)
 11 	return 1;
 12 }
 13 
 14-int bufwrite(MCBuffer* buffer, const void* data, size_t size)
 15+i8 bufwrite(MCBuffer* buffer, const void* data, size_t size)
 16 {
 17 	if (!bufreserve(buffer, size))
 18 		return 0;
 19@@ -73,12 +73,12 @@ int bufwrite(MCBuffer* buffer, const void* data, size_t size)
 20 	return 1;
 21 }
 22 
 23-int bufwrite_u8(MCBuffer* buffer, u8 value)
 24+i8 bufwrite_u8(MCBuffer* buffer, u8 value)
 25 {
 26 	return bufwrite(buffer, &value, 1);
 27 }
 28 
 29-int bufwrite_u16(MCBuffer* buffer, u16 value)
 30+i8 bufwrite_u16(MCBuffer* buffer, u16 value)
 31 {
 32 	u8 data[2];
 33 	/* minecraft protocol integers are big-endian except VarInt
 34@@ -88,7 +88,7 @@ int bufwrite_u16(MCBuffer* buffer, u16 value)
 35 	return bufwrite(buffer, data, sizeof(data));
 36 }
 37 
 38-int bufwrite_i32(MCBuffer* buffer, i32 value)
 39+i8 bufwrite_i32(MCBuffer* buffer, i32 value)
 40 {
 41 	u32 v = (u32)value;
 42 	u8  data[4];
 43@@ -99,31 +99,31 @@ int bufwrite_i32(MCBuffer* buffer, i32 value)
 44 	return bufwrite(buffer, data, sizeof(data));
 45 }
 46 
 47-int bufwrite_i64(MCBuffer* buffer, i64 value)
 48+i8 bufwrite_i64(MCBuffer* buffer, i64 value)
 49 {
 50 	u64 v = (u64)value;
 51 	u8  data[8];
 52-	int i;
 53+	i32 i;
 54 	for (i = 0; i < 8; ++i)
 55 		data[i] = (u8)(v >> (56 - i * 8));
 56 	return bufwrite(buffer, data, sizeof(data));
 57 }
 58 
 59-int bufwrite_f32(MCBuffer* buffer, float value)
 60+i8 bufwrite_f32(MCBuffer* buffer, float value)
 61 {
 62 	u32 bits;
 63 	memcpy(&bits, &value, sizeof(bits));
 64 	return bufwrite_i32(buffer, (i32)bits);
 65 }
 66 
 67-int bufwrite_f64(MCBuffer* buffer, double value)
 68+i8 bufwrite_f64(MCBuffer* buffer, double value)
 69 {
 70 	u64 bits;
 71 	memcpy(&bits, &value, sizeof(bits));
 72 	return bufwrite_i64(buffer, (i64)bits);
 73 }
 74 
 75-int bufwrite_varint(MCBuffer* buffer, i32 value)
 76+i8 bufwrite_varint(MCBuffer* buffer, i32 value)
 77 {
 78 	u32 v = (u32)value;
 79 	/* minecraft VarInt is 7 data bits per byte (5 bytes max on i32) and
 80@@ -140,7 +140,7 @@ int bufwrite_varint(MCBuffer* buffer, i32 value)
 81 	return 1;
 82 }
 83 
 84-int bufwrite_string(MCBuffer* buffer, const char* value)
 85+i8 bufwrite_string(MCBuffer* buffer, const char* value)
 86 {
 87 	size_t size = strlen(value);
 88 	if (size > MC_MAX_STRING_SIZE)
 89@@ -148,7 +148,7 @@ int bufwrite_string(MCBuffer* buffer, const char* value)
 90 	return bufwrite_varint(buffer, (i32)size) && bufwrite(buffer, value, size);
 91 }
 92 
 93-int bufread(MCBuffer* buffer, void* out, size_t size)
 94+i8 bufread(MCBuffer* buffer, void* out, size_t size)
 95 {
 96 	if (size > buffer->size - buffer->cursor)
 97 		return 0;
 98@@ -158,12 +158,12 @@ int bufread(MCBuffer* buffer, void* out, size_t size)
 99 	return 1;
100 }
101 
102-int bufread_u8(MCBuffer* buffer, u8* value)
103+i8 bufread_u8(MCBuffer* buffer, u8* value)
104 {
105 	return bufread(buffer, value, 1);
106 }
107 
108-int bufread_u16(MCBuffer* buffer, u16* value)
109+i8 bufread_u16(MCBuffer* buffer, u16* value)
110 {
111 	u8 data[2];
112 	if (!bufread(buffer, data, sizeof(data)))
113@@ -172,7 +172,7 @@ int bufread_u16(MCBuffer* buffer, u16* value)
114 	return 1;
115 }
116 
117-int bufread_i32(MCBuffer* buffer, i32* value)
118+i8 bufread_i32(MCBuffer* buffer, i32* value)
119 {
120 	u8  data[4];
121 	u32 result;
122@@ -183,11 +183,11 @@ int bufread_i32(MCBuffer* buffer, i32* value)
123 	return 1;
124 }
125 
126-int bufread_i64(MCBuffer* buffer, i64* value)
127+i8 bufread_i64(MCBuffer* buffer, i64* value)
128 {
129 	u8  data[8];
130 	u64 result = 0;
131-	int i;
132+	i32 i;
133 	if (!bufread(buffer, data, sizeof(data)))
134 		return 0;
135 	for (i = 0; i < 8; ++i)
136@@ -196,7 +196,7 @@ int bufread_i64(MCBuffer* buffer, i64* value)
137 	return 1;
138 }
139 
140-int bufread_f32(MCBuffer* buffer, float* value)
141+i8 bufread_f32(MCBuffer* buffer, float* value)
142 {
143 	i32 bits;
144 	if (!bufread_i32(buffer, &bits))
145@@ -205,7 +205,7 @@ int bufread_f32(MCBuffer* buffer, float* value)
146 	return 1;
147 }
148 
149-int bufread_f64(MCBuffer* buffer, double* value)
150+i8 bufread_f64(MCBuffer* buffer, double* value)
151 {
152 	i64 bits;
153 	if (!bufread_i64(buffer, &bits))
154@@ -214,10 +214,10 @@ int bufread_f64(MCBuffer* buffer, double* value)
155 	return 1;
156 }
157 
158-int bufread_varint(MCBuffer* buffer, i32* value)
159+i8 bufread_varint(MCBuffer* buffer, i32* value)
160 {
161 	u32 result = 0;
162-	int shift;
163+	i32 shift;
164 
165 	/* VarInt is at best 5 bytes for a 32-bit value
166 	   https://wikivg.booky.dev/Protocol#VarInt_and_VarLong
167@@ -236,7 +236,7 @@ int bufread_varint(MCBuffer* buffer, i32* value)
168 	return 0;
169 }
170 
171-int bufread_string(MCBuffer* buffer, char* value, size_t value_size)
172+i8 bufread_string(MCBuffer* buffer, char* value, size_t value_size)
173 {
174 	i32 length;
175 	if (!bufread_varint(buffer, &length) || length < 0 || (size_t)length >= value_size ||
176@@ -248,7 +248,7 @@ int bufread_string(MCBuffer* buffer, char* value, size_t value_size)
177 	return 1;
178 }
179 
180-int bufread_bytes(MCBuffer* buffer, const u8** value, size_t* size)
181+i8 bufread_bytes(MCBuffer* buffer, const u8** value, size_t* size)
182 {
183 	i32 length;
184 	if (!bufread_varint(buffer, &length) || length < 0 || (size_t)length > buffer->size - buffer->cursor)
+35, -35
  1@@ -18,21 +18,21 @@
  2 	#define MSG_NOSIGNAL 0
  3 #endif
  4 
  5-static int handle_encryption(MCClient* client, const MCAccount* account, MCPacket* packet, char* error,
  6-                             size_t error_size);
  7-static int login_loop(MCClient* client, const MCAccount* account, char* error, size_t error_size);
  8-static int send_handshake(MCClient* client);
  9-static int send_login_start(MCClient* client);
 10-static int socket_read(MCClient* client, u8* data, size_t size);
 11-static int socket_read_varint(MCClient* client, i32* value);
 12-static int socket_write(MCClient* client, const u8* data, size_t size);
 13-static int split_address(const char* address, char* host, size_t host_size, u16* port, char* error, size_t error_size);
 14-static int tcp_connect(MCClient* client, char* error, size_t error_size);
 15+static i8 handle_encryption(MCClient* client, const MCAccount* account, MCPacket* packet, char* error,
 16+                            size_t error_size);
 17+static i8 login_loop(MCClient* client, const MCAccount* account, char* error, size_t error_size);
 18+static i8 send_handshake(MCClient* client);
 19+static i8 send_login_start(MCClient* client);
 20+static i8 socket_read(MCClient* client, u8* data, size_t size);
 21+static i8 socket_read_varint(MCClient* client, i32* value);
 22+static i8 socket_write(MCClient* client, const u8* data, size_t size);
 23+static i8 split_address(const char* address, char* host, size_t host_size, u16* port, char* error, size_t error_size);
 24+static i8 tcp_connect(MCClient* client, char* error, size_t error_size);
 25 
 26 /* handle server encryption request
 27    returns 1 on success, 0 on failure */
 28-static int handle_encryption(MCClient* client, const MCAccount* account, MCPacket* packet, char* error,
 29-                             size_t error_size)
 30+static i8 handle_encryption(MCClient* client, const MCAccount* account, MCPacket* packet, char* error,
 31+                            size_t error_size)
 32 {
 33 	MCBuffer  input = { packet->data, packet->size, packet->size, 0 };
 34 	MCBuffer  response;
 35@@ -46,7 +46,7 @@ static int handle_encryption(MCClient* client, const MCAccount* account, MCPacke
 36 	u8*       encrypted_token = NULL;
 37 	size_t    encrypted_secret_size = 0;
 38 	size_t    encrypted_token_size = 0;
 39-	int       ok = 0;
 40+	i8        ok = 0;
 41 
 42 	/* parse the server encryption request */
 43 	if (!bufread_string(&input, server_id, sizeof(server_id)) ||
 44@@ -94,7 +94,7 @@ cleanup:
 45 
 46 /* process login packets until play state
 47    returns 1 on success, 0 on failure */
 48-static int login_loop(MCClient* client, const MCAccount* account, char* error, size_t error_size)
 49+static i8 login_loop(MCClient* client, const MCAccount* account, char* error, size_t error_size)
 50 {
 51 	/* login state packet ids for protocol 47:
 52 	   0x00 disconnect
 53@@ -122,7 +122,7 @@ static int login_loop(MCClient* client, const MCAccount* account, char* error, s
 54 			return 0;
 55 		}
 56 		if (packet.id == 0x01) {
 57-			int ok = handle_encryption(client, account, &packet, error, error_size);
 58+			i8 ok = handle_encryption(client, account, &packet, error, error_size);
 59 			mc_packet_free(&packet);
 60 			if (!ok)
 61 				return 0;
 62@@ -163,10 +163,10 @@ static int login_loop(MCClient* client, const MCAccount* account, char* error, s
 63 
 64 /* send handshake packet
 65    returns 1 on success, 0 on failure */
 66-static int send_handshake(MCClient* client)
 67+static i8 send_handshake(MCClient* client)
 68 {
 69 	MCBuffer payload;
 70-	int      ok;
 71+	i8       ok;
 72 	bufinit(&payload);
 73 	/* handshake to next state 2 switches the connection into login state */
 74 	ok = bufwrite_varint(&payload, MC_PROTOCOL_1_8_9) && bufwrite_string(&payload, client->host) &&
 75@@ -178,10 +178,10 @@ static int send_handshake(MCClient* client)
 76 
 77 /* send login start packet
 78    returns 1 on success, 0 on failure */
 79-static int send_login_start(MCClient* client)
 80+static i8 send_login_start(MCClient* client)
 81 {
 82 	MCBuffer payload;
 83-	int      ok;
 84+	i8       ok;
 85 	bufinit(&payload);
 86 	ok = bufwrite_string(&payload, client->username) && mc_client_write(client, 0x00, payload.data, payload.size);
 87 	buffree(&payload);
 88@@ -190,7 +190,7 @@ static int send_login_start(MCClient* client)
 89 
 90 /* read bytes from socket
 91    returns 1 on success, 0 on failure */
 92-static int socket_read(MCClient* client, u8* data, size_t size)
 93+static i8 socket_read(MCClient* client, u8* data, size_t size)
 94 {
 95 	size_t offset = 0;
 96 	while (offset < size) {
 97@@ -212,10 +212,10 @@ static int socket_read(MCClient* client, u8* data, size_t size)
 98 
 99 /* read VarInt from socket
100    returns 1 on success, 0 on failure */
101-static int socket_read_varint(MCClient* client, i32* value)
102+static i8 socket_read_varint(MCClient* client, i32* value)
103 {
104 	u32 result = 0;
105-	int shift;
106+	i32 shift;
107 	for (shift = 0; shift < 35; shift += 7) {
108 		u8 byte;
109 		if (!socket_read(client, &byte, 1))
110@@ -231,7 +231,7 @@ static int socket_read_varint(MCClient* client, i32* value)
111 
112 /* write bytes to socket
113    returns 1 on success, 0 on failure */
114-static int socket_write(MCClient* client, const u8* data, size_t size)
115+static i8 socket_write(MCClient* client, const u8* data, size_t size)
116 {
117 	u8     encrypted[4096];
118 	size_t offset = 0;
119@@ -263,7 +263,7 @@ static int socket_write(MCClient* client, const u8* data, size_t size)
120 
121 /* parse address into host and port
122    returns 1 on success, 0 on failure */
123-static int split_address(const char* address, char* host, size_t host_size, u16* port, char* error, size_t error_size)
124+static i8 split_address(const char* address, char* host, size_t host_size, u16* port, char* error, size_t error_size)
125 {
126 	const char* colon = strrchr(address, ':');
127 	const char* end = address + strlen(address);
128@@ -306,7 +306,7 @@ static int split_address(const char* address, char* host, size_t host_size, u16*
129 
130 /* connect to the configured server address
131    returns 1 on success, 0 on failure */
132-static int tcp_connect(MCClient* client, char* error, size_t error_size)
133+static i8 tcp_connect(MCClient* client, char* error, size_t error_size)
134 {
135 	struct addrinfo  hints;
136 	struct addrinfo* addresses = NULL;
137@@ -345,14 +345,14 @@ static int tcp_connect(MCClient* client, char* error, size_t error_size)
138 	return 1;
139 }
140 
141-int mc_client_write(MCClient* client, i32 packet_id, const void* data, size_t size)
142+i8 mc_client_write(MCClient* client, i32 packet_id, const void* data, size_t size)
143 {
144 	MCBuffer body;
145 	MCBuffer framed;
146 	MCBuffer length;
147 	u8*      compressed = NULL;
148 	uLongf   compressed_size;
149-	int      ok = 0;
150+	i8       ok = 0;
151 
152 	if (!client || client->socket_fd < 0 || size > MC_MAX_PACKET_SIZE)
153 		return 0;
154@@ -405,15 +405,15 @@ cleanup:
155 	return ok;
156 }
157 
158-int mc_client_read(MCClient* client, MCPacket* packet, char* error, size_t error_size)
159+i8 mc_client_read(MCClient* client, MCPacket* packet, char* error, size_t error_size)
160 {
161 	i32      frame_length;
162 	MCBuffer frame;
163 	MCBuffer decoded;
164 	i32      data_length;
165 	i32      packet_id;
166-	int      decoded_allocated = 0;
167-	int      ok = 0;
168+	i8       decoded_allocated = 0;
169+	i8       ok = 0;
170 
171 	memset(packet, 0, sizeof(*packet));
172 	bufinit(&frame);
173@@ -495,7 +495,7 @@ void mc_packet_free(MCPacket* packet)
174 }
175 
176 /*create a client */
177-int mc_client_login(MCClient** out, const char* address, const MCAccount* account, char* error, size_t error_size)
178+i8 mc_client_login(MCClient** out, const char* address, const MCAccount* account, char* error, size_t error_size)
179 {
180 	MCClient* client;
181 	size_t    username_size;
182@@ -555,7 +555,7 @@ void mc_client_destroy(MCClient* client)
183 	free(client);
184 }
185 
186-int mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error_size)
187+i8 mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error_size)
188 {
189 	struct pollfd fd;
190 	int           result;
191@@ -596,11 +596,11 @@ int mc_client_poll(MCClient* client, MCPacket* packet, char* error, size_t error
192 	return 0;
193 }
194 
195-int mc_client_send_position_look(MCClient* client, double x, double feet_y, double z, float yaw, float pitch,
196-                                 i8 grounded)
197+i8 mc_client_send_position_look(MCClient* client, double x, double feet_y, double z, float yaw, float pitch,
198+                                i8 grounded)
199 {
200 	MCBuffer payload;
201-	int      ok;
202+	i8       ok;
203 
204 	bufinit(&payload);
205 
+17, -17
 1@@ -12,9 +12,9 @@ typedef struct {
 2 } DERReader;
 3 
 4 static u8   cipher_byte(MCCipher* cipher);
 5-static int  der_length(DERReader* reader, size_t* length);
 6-static int  der_value(DERReader* reader, u8 tag, DERReader* value);
 7-static int  rsa_public_key(const u8* der, size_t der_size, br_rsa_public_key* key, char* error, size_t error_size);
 8+static i8   der_length(DERReader* reader, size_t* length);
 9+static i8   der_value(DERReader* reader, u8 tag, DERReader* value);
10+static i8   rsa_public_key(const u8* der, size_t der_size, br_rsa_public_key* key, char* error, size_t error_size);
11 static void twos_complement(u8* data, size_t size);
12 
13 /* generate next cipher stream byte
14@@ -30,12 +30,12 @@ static u8 cipher_byte(MCCipher* cipher)
15 
16 /* read DER length
17    returns 1 on success, 0 on failure */
18-static int der_length(DERReader* reader, size_t* length)
19+static i8 der_length(DERReader* reader, size_t* length)
20 {
21-	u8       first;
22-	size_t   value = 0;
23-	unsigned count;
24-	unsigned i;
25+	u8     first;
26+	size_t value = 0;
27+	u32    count;
28+	u32    i;
29 
30 	if (reader->cursor >= reader->size)
31 		return 0;
32@@ -57,7 +57,7 @@ static int der_length(DERReader* reader, size_t* length)
33 
34 /* read DER value by tag
35    returns 1 on success, 0 on failure */
36-static int der_value(DERReader* reader, u8 tag, DERReader* value)
37+static i8 der_value(DERReader* reader, u8 tag, DERReader* value)
38 {
39 	size_t length;
40 	if (reader->cursor >= reader->size || reader->data[reader->cursor++] != tag || !der_length(reader, &length))
41@@ -71,7 +71,7 @@ static int der_value(DERReader* reader, u8 tag, DERReader* value)
42 
43 /* parse the server's X.509 RSA pubkey for BearSSL
44    returns 1 on success, 0 on failure */
45-static int rsa_public_key(const u8* der, size_t der_size, br_rsa_public_key* key, char* error, size_t error_size)
46+static i8 rsa_public_key(const u8* der, size_t der_size, br_rsa_public_key* key, char* error, size_t error_size)
47 {
48 	DERReader root = { der, der_size, 0 };
49 	DERReader spki;
50@@ -109,12 +109,12 @@ static int rsa_public_key(const u8* der, size_t der_size, br_rsa_public_key* key
51 /* convert bytes to twos complement in place */
52 static void twos_complement(u8* data, size_t size)
53 {
54-	size_t   i = size;
55-	unsigned carry = 1;
56+	size_t i = size;
57+	u32    carry = 1;
58 	while (i > 0) {
59-		unsigned value;
60+		u32 value;
61 		--i;
62-		value = (unsigned)(data[i] ^ 0xff) + carry;
63+		value = (u32)(data[i] ^ 0xff) + carry;
64 		data[i] = (u8)value;
65 		carry = value >> 8;
66 	}
67@@ -148,8 +148,8 @@ void mc_cipher_decrypt(MCCipher* cipher, u8* data, size_t size)
68 	}
69 }
70 
71-int mc_rsa_encrypt(const u8* public_key, size_t public_key_size, const u8* message, size_t message_size, u8** encrypted,
72-                   size_t* encrypted_size, char* error, size_t error_size)
73+i8 mc_rsa_encrypt(const u8* public_key, size_t public_key_size, const u8* message, size_t message_size, u8** encrypted,
74+                  size_t* encrypted_size, char* error, size_t error_size)
75 {
76 	br_rsa_public_key key;
77 	br_rsa_public     rsa;
78@@ -210,7 +210,7 @@ void mc_server_hash(const char* server_id, const u8 shared_secret[16], const u8*
79 	size_t            first = 0;
80 	size_t            i;
81 	size_t            out = 0;
82-	int               negative;
83+	i8                negative;
84 
85 	br_sha1_init(&sha);
86 	br_sha1_update(&sha, server_id, strlen(server_id));
+24, -24
 1@@ -30,7 +30,7 @@ struct MCClient {
 2 	char     username[17];
 3 	char     uuid[37];
 4 	i32      compression_threshold;
 5-	int      encrypted;
 6+	i8       encrypted;
 7 	MCCipher read_cipher;
 8 	MCCipher write_cipher;
 9 };
10@@ -39,36 +39,36 @@ void mc_set_error(MCErrorCode code, char* error, size_t error_size, const char*
11 
12 void bufinit(MCBuffer* buffer);
13 void buffree(MCBuffer* buffer);
14-int  bufreserve(MCBuffer* buffer, size_t extra);
15-int  bufwrite(MCBuffer* buffer, const void* data, size_t size);
16-int  bufwrite_u8(MCBuffer* buffer, u8 value);
17-int  bufwrite_u16(MCBuffer* buffer, u16 value);
18-int  bufwrite_i32(MCBuffer* buffer, i32 value);
19-int  bufwrite_i64(MCBuffer* buffer, i64 value);
20-int  bufwrite_f32(MCBuffer* buffer, float value);
21-int  bufwrite_f64(MCBuffer* buffer, double value);
22-int  bufwrite_varint(MCBuffer* buffer, i32 value);
23-int  bufwrite_string(MCBuffer* buffer, const char* value);
24+i8   bufreserve(MCBuffer* buffer, size_t extra);
25+i8   bufwrite(MCBuffer* buffer, const void* data, size_t size);
26+i8   bufwrite_u8(MCBuffer* buffer, u8 value);
27+i8   bufwrite_u16(MCBuffer* buffer, u16 value);
28+i8   bufwrite_i32(MCBuffer* buffer, i32 value);
29+i8   bufwrite_i64(MCBuffer* buffer, i64 value);
30+i8   bufwrite_f32(MCBuffer* buffer, float value);
31+i8   bufwrite_f64(MCBuffer* buffer, double value);
32+i8   bufwrite_varint(MCBuffer* buffer, i32 value);
33+i8   bufwrite_string(MCBuffer* buffer, const char* value);
34 
35-int bufread(MCBuffer* buffer, void* out, size_t size);
36-int bufread_u8(MCBuffer* buffer, u8* value);
37-int bufread_u16(MCBuffer* buffer, u16* value);
38-int bufread_i32(MCBuffer* buffer, i32* value);
39-int bufread_i64(MCBuffer* buffer, i64* value);
40-int bufread_f32(MCBuffer* buffer, float* value);
41-int bufread_f64(MCBuffer* buffer, double* value);
42-int bufread_varint(MCBuffer* buffer, i32* value);
43-int bufread_string(MCBuffer* buffer, char* value, size_t value_size);
44-int bufread_bytes(MCBuffer* buffer, const u8** value, size_t* size);
45+i8 bufread(MCBuffer* buffer, void* out, size_t size);
46+i8 bufread_u8(MCBuffer* buffer, u8* value);
47+i8 bufread_u16(MCBuffer* buffer, u16* value);
48+i8 bufread_i32(MCBuffer* buffer, i32* value);
49+i8 bufread_i64(MCBuffer* buffer, i64* value);
50+i8 bufread_f32(MCBuffer* buffer, float* value);
51+i8 bufread_f64(MCBuffer* buffer, double* value);
52+i8 bufread_varint(MCBuffer* buffer, i32* value);
53+i8 bufread_string(MCBuffer* buffer, char* value, size_t value_size);
54+i8 bufread_bytes(MCBuffer* buffer, const u8** value, size_t* size);
55 
56 void mc_cipher_init(MCCipher* cipher, const u8 key[16]);
57 void mc_cipher_encrypt(MCCipher* cipher, u8* data, size_t size);
58 void mc_cipher_decrypt(MCCipher* cipher, u8* data, size_t size);
59-int mc_rsa_encrypt(const u8* public_key, size_t public_key_size, const u8* message, size_t message_size, u8** encrypted,
60-                   size_t* encrypted_size, char* error, size_t error_size);
61+i8 mc_rsa_encrypt(const u8* public_key, size_t public_key_size, const u8* message, size_t message_size, u8** encrypted,
62+                  size_t* encrypted_size, char* error, size_t error_size);
63 void mc_server_hash(const char* server_id, const u8 shared_secret[16], const u8* public_key, size_t public_key_size,
64                     char output[42]);
65-int  mc_join_server(const MCAccount* account, const char* server_id, const u8 shared_secret[16], const u8* public_key,
66+i8   mc_join_server(const MCAccount* account, const char* server_id, const u8 shared_secret[16], const u8* public_key,
67                     size_t public_key_size, char* error, size_t error_size);
68 
69 #endif /* MC_PROTO_INTERNAL_H */