summaryrefslogtreecommitdiffstats
path: root/src/nbt/nbt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nbt/nbt.c')
-rw-r--r--src/nbt/nbt.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/nbt/nbt.c b/src/nbt/nbt.c
index 5948bce..596ec1c 100644
--- a/src/nbt/nbt.c
+++ b/src/nbt/nbt.c
@@ -6,6 +6,29 @@
#include <stdlib.h>
#include <string.h>
+const char *const nbt__type_names[] = {
+ "TAG_End",
+ "TAG_Byte",
+ "TAG_Short",
+ "TAG_Int",
+ "TAG_Long",
+ "TAG_Float",
+ "TAG_Double",
+ "TAG_Byte_Array",
+ "TAG_String",
+ "TAG_List",
+ "TAG_Compound",
+ "TAG_Int_Array",
+ "TAG_Long_Array",
+ NULL
+};
+
+nbt_type_t nbt_tag_type(nbt_tag_t *tag)
+{
+ if (!tag) return NBT_TAG_END;
+ return tag->type;
+}
+
nbt_tag_t *nbt__new_val(nbt_type_t type)
{
nbt_tag_t *tag = calloc(1, sizeof(nbt_tag_t));
@@ -117,11 +140,15 @@ nbt_tag_t *nbt_listn(nbt_size_t cap)
{
nbt_tag_t *tag = nbt__new_val(NBT_TAG_LIST);
if (!tag) return NULL;
- if (!cap) cap = 16;
tag->value.nbt_list.len = 0;
tag->value.nbt_list.cap = cap;
+ if (!cap) {
+ tag->value.nbt_list.ptags = NULL;
+ return tag;
+ }
+
nbt_tag_t **tags = calloc(cap, sizeof(nbt_tag_t *));
if (!tags) goto cleanup;
@@ -205,3 +232,9 @@ void nbt__tag_free(nbt_tag_t *tag)
free(tag);
}
+
+const char *nbt_typestr(nbt_type_t type)
+{
+ if (type < 0 || type >= NBT_TAG_MAX) return NULL;
+ return nbt__type_names[type];
+}