X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/4cac9f15932adee255ed2be1f6d419ffe068c438..06d82616a1fdc44191265284ac46dda5dbdb5eb9:/src/uobject.c diff --git a/src/uobject.c b/src/uobject.c index ec517b7..64e7c4c 100644 --- a/src/uobject.c +++ b/src/uobject.c @@ -28,7 +28,7 @@ #include "pack.h" #define U_OBJECT_GET_PRIV(o) \ - G_TYPE_INSTANCE_GET_PRIVATE(o, U_OBJECT_TYPE, struct uobject_priv) + G_TYPE_INSTANCE_GET_PRIVATE(o, U_OBJECT_TYPE, struct u_object_priv) enum { PROPERTY_BYTE = 1, @@ -48,12 +48,7 @@ enum { PROPERTY_FIXEDARRAY, }; -struct uobject_property { - const char *name; - GValue val; -}; - -struct uobject_priv { +struct u_object_priv { struct upkg_file *f; size_t base, len; @@ -95,7 +90,7 @@ get_real_size(unsigned long *real, unsigned size, unsigned char *buf, size_t n) static unsigned long decode_property(UObject *o, const char *name, struct upkg_file *f, unsigned long len) { - struct uobject_priv *priv = U_OBJECT_GET_PRIV(o); + struct u_object_priv *priv = U_OBJECT_GET_PRIV(o); unsigned long real_size, rc; int type, size, top; GValue val = {0}; @@ -149,7 +144,7 @@ decode_property(UObject *o, const char *name, struct upkg_file *f, unsigned long /* Deserialize properties from an Unreal package. */ static int deserialize(UObject *o, struct upkg_file *f) { - struct uobject_priv *priv = U_OBJECT_GET_PRIV(o); + struct u_object_priv *priv = U_OBJECT_GET_PRIV(o); unsigned long rc, tot_len = 0; while (1) { @@ -162,7 +157,7 @@ static int deserialize(UObject *o, struct upkg_file *f) void *buf = priv->buf + priv->nbuf; size_t amt = sizeof priv->buf - priv->nbuf; rc = upkg_export_read(f, buf, amt); - if (rc == 0) + if (rc == 0 && priv->nbuf == 0) return -1; priv->nbuf += rc; } @@ -241,7 +236,7 @@ static void u_object_finalize(GObject *o) static void u_object_class_init(UObjectClass *class) { - g_type_class_add_private(class, sizeof (struct uobject_priv)); + g_type_class_add_private(class, sizeof (struct u_object_priv)); GObjectClass *go = G_OBJECT_CLASS(class); class->deserialize = deserialize;