X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/1906020cf2abc26cf8317a5a754dca7318802250..4a3125b61348969b91b9642bba803fc17135c189:/src/uobject.c diff --git a/src/uobject.c b/src/uobject.c index 175a624..b029cbf 100644 --- a/src/uobject.c +++ b/src/uobject.c @@ -2,9 +2,9 @@ * upkg: tool for manipulating Unreal Tournament packages. * Copyright (C) 2009 Nick Bowler * - * This program is free software; you can redistribute it and/or modify + * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, @@ -13,8 +13,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * along with this program. If not, see . */ #include @@ -23,12 +22,12 @@ #include #include -#include "uobject.h" +#include #include "upkg.h" #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 +47,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 +89,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 +143,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 +156,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 +235,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;