diff options
Diffstat (limited to '')
-rw-r--r-- | src/nbt/read.c (renamed from src/tag_read.c) | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/src/tag_read.c b/src/nbt/read.c index 5f43e7c..d5dd827 100644 --- a/src/tag_read.c +++ b/src/nbt/read.c @@ -1,10 +1,13 @@ -#include "tag.h" -#include "lib.h" +#include "nbt.h" +#include "../lib.h" + #include <stdio.h> #include <stdlib.h> #include <string.h> -bool tag_read_header(tag_t *tag, stream_t *stream, bool named) { +static bool nbt_read_data(tag_t *tag, const stream_t *stream); + +static bool nbt_read_header(tag_t *tag, const stream_t *stream, bool named) { bool ok = true; if (stream_read_i8(stream, &tag->type) == false) @@ -34,7 +37,7 @@ bool tag_read_header(tag_t *tag, stream_t *stream, bool named) { } -static bool tag_read_byte_array(tagdata_t *data, stream_t *stream) { +static bool nbt_read_byte_array(tagdata_t *data, const stream_t *stream) { if (stream_read_i32(stream, &data->b_arr.size) == false) return false; if (data->b_arr.size == 0) { @@ -48,7 +51,7 @@ static bool tag_read_byte_array(tagdata_t *data, stream_t *stream) { return true; } -static bool tag_read_int_array(tagdata_t *data, stream_t *stream) { +static bool nbt_read_int_array(tagdata_t *data, const stream_t *stream) { if (stream_read_i32(stream, &data->i_arr.size) == false) return false; if (data->i_arr.size == 0) { @@ -62,7 +65,7 @@ static bool tag_read_int_array(tagdata_t *data, stream_t *stream) { return true; } -static bool tag_read_long_array(tagdata_t *data, stream_t *stream) { +static bool nbt_read_long_array(tagdata_t *data, const stream_t *stream) { if (stream_read_i32(stream, &data->l_arr.size) == false) return false; if (data->l_arr.size == 0) { @@ -76,7 +79,7 @@ static bool tag_read_long_array(tagdata_t *data, stream_t *stream) { return true; } -static bool tag_read_string(tagdata_t *data, stream_t *stream) { +static bool nbt_read_string(tagdata_t *data, const stream_t *stream) { if (stream_read_u16(stream, &data->string.size) == false) return false; if (data->string.size < 1) { @@ -89,7 +92,7 @@ static bool tag_read_string(tagdata_t *data, stream_t *stream) { return true; } -static bool tag_read_list(tagdata_t *data, stream_t *stream) { +static bool nbt_read_list(tagdata_t *data, const stream_t *stream) { if (stream_read_i8(stream, &data->list.type) == false) return false; if (stream_read_i32(stream, &data->list.size) == false) @@ -107,14 +110,14 @@ static bool tag_read_list(tagdata_t *data, stream_t *stream) { tag.type = data->list.type; tag.name = ""; tag.name_len = 0; - if (tag_read_data(&tag, stream) == false) + if (nbt_read_data(&tag, stream) == false) return false; data->list.tags[i] = tag; } return true; } -static bool tag_read_compound(tagdata_t *data, stream_t *stream) { +static bool nbt_read_compound(tagdata_t *data, const stream_t *stream) { int32_t size = 0; int32_t capacity = 8; tag_t *tags = xalloc(capacity * sizeof(tag_t)); @@ -123,14 +126,18 @@ static bool tag_read_compound(tagdata_t *data, stream_t *stream) { tag_t tag; - if (tag_read_header(&tag, stream, true) == false) + if (nbt_read_header(&tag, stream, true) == false) { + free(tags); return false; + } if (tag.type == TAG_END) break; - if (tag_read_data(&tag, stream) == false) + if (nbt_read_data(&tag, stream) == false) { + free(tags); return false; + } if (size == capacity) { capacity *= 2; @@ -147,7 +154,8 @@ static bool tag_read_compound(tagdata_t *data, stream_t *stream) { return true; } -bool tag_read_data(tag_t *tag, stream_t *stream) { + +static bool nbt_read_data(tag_t *tag, const stream_t *stream) { bool ok = true; switch (tag->type) { @@ -169,33 +177,33 @@ bool tag_read_data(tag_t *tag, stream_t *stream) { ok = stream_read_i64(stream, &tag->data.l); break; case TAG_BYTE_ARRAY: - ok = tag_read_byte_array(&tag->data, stream); + ok = nbt_read_byte_array(&tag->data, stream); break; case TAG_STRING: - ok = tag_read_string(&tag->data, stream); + ok = nbt_read_string(&tag->data, stream); break; case TAG_LIST: - ok = tag_read_list(&tag->data, stream); + ok = nbt_read_list(&tag->data, stream); break; case TAG_COMPOUND: - ok = tag_read_compound(&tag->data, stream); + ok = nbt_read_compound(&tag->data, stream); break; case TAG_INT_ARRAY: - ok = tag_read_int_array(&tag->data, stream); + ok = nbt_read_int_array(&tag->data, stream); break; case TAG_LONG_ARRAY: - ok = tag_read_long_array(&tag->data, stream); + ok = nbt_read_long_array(&tag->data, stream); break; break; }; return ok; } -bool tag_read(tag_t *tag, stream_t *stream, bool named) { +bool nbt_read(tag_t *tag, const stream_t *stream) { memset(tag, 0, sizeof(tag_t)); - if (tag_read_header(tag, stream, named) == false) + if (nbt_read_header(tag, stream, true) == false) return false; - if (tag_read_data(tag, stream) == false) + if (nbt_read_data(tag, stream) == false) return false; return true; } |