]> git.draconx.ca Git - upkg.git/blobdiff - src/uobject.c
pack: Relax licensing of integer serialisation routines.
[upkg.git] / src / uobject.c
index ec517b7bd0bb97f60ee7d01e5eaed01a0c118e96..b029cbf9637825e4e1b8fe6431a3fcb5bf6e0523 100644 (file)
@@ -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 <http://www.gnu.org/licenses/>.
  */
 
 #include <stdio.h>
@@ -28,7 +27,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 +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;