Map *map = map_create(NULL);
MapBlock *block = map_deserialize_block(sockfd);
- map_create_block(map, (v3s32) {0, 0, 0}, block);
+ if (block)
+ map_create_block(map, (v3s32) {0, 0, 0}, block);
+ else
+ internal_error("invalid block recieved");
MapNode node = map_get_node(map, (v3s32) {0, 0, 0});
printf("%d\n", node.type);
MapBlock *block = malloc(sizeof(MapBlock));
ITERATE_MAPBLOCK {
u32 encoded_type;
- read(fd, &encoded_type, 4);
+ if (read(fd, &encoded_type, 4) == -1) {
+ free(block);
+ return NULL;
+ }
Node type = be32toh(encoded_type);
- if (type >= MAX_NODES)
+ if (type > NODE_INVALID)
type = NODE_INVALID;
block->data[x][y][z] = map_node_create(type);
}
typedef enum
{
NODE_UNLOADED, // Used for nodes in unloaded blocks
- NODE_INVALID, // Used for invalid nodes sent by server
NODE_AIR,
NODE_GRASS,
NODE_DIRT,
NODE_STONE,
- MAX_NODES,
+ NODE_INVALID, // Used for invalid nodes sent by server (caused by outdated clients)
} Node;
#endif
Map *map = map_create(NULL);
map_set_node(map, (v3s32) {0, 0, 0}, map_node_create(NODE_STONE));
- struct sockaddr_in cli_addr_buf;
- socklen_t cli_addrlen_buf;
+ struct sockaddr_in cli_addr_buf = {0};
+ socklen_t cli_addrlen_buf = 0;
int fd = accept(sockfd, (struct sockaddr *) &cli_addr_buf, &cli_addrlen_buf);