]> git.draconx.ca Git - upkg.git/commitdiff
Don't bail out if a read fails but there's still data available.
authorNick Bowler <nbowler@draconx.ca>
Sat, 8 Aug 2009 06:16:40 +0000 (02:16 -0400)
committerNick Bowler <nbowler@draconx.ca>
Sat, 8 Aug 2009 06:16:40 +0000 (02:16 -0400)
src/libupkg.c
src/uobject.c

index 3f07095b4f29c2847e995e6d4bb8a012185992af..6ee7ffa9c4f32909b3aff4824351d6a9dd92e1d1 100644 (file)
@@ -171,7 +171,7 @@ static int pkg_init_names(struct upkg *pkg)
                /* Read some data into buffer. */
                if (!feof(pkg->priv->f)) {
                        rc = fread(buf+nbuf, 1, sizeof buf-nbuf, pkg->priv->f);
-                       if (rc == 0)
+                       if (rc == 0 && nbuf == 0)
                                goto err;
                        nbuf += rc;
                }
@@ -236,7 +236,7 @@ static int pkg_init_exports(struct upkg *pkg)
                /* Read some data into buffer. */
                if (!feof(pkg->priv->f)) {
                        rc = fread(buf+nbuf, 1, sizeof buf-nbuf, pkg->priv->f);
-                       if (rc == 0)
+                       if (rc == 0 && nbuf == 0)
                                goto err;
                        nbuf += rc;
                }
@@ -306,7 +306,7 @@ static int pkg_init_imports(struct upkg *pkg)
                /* Read some data into buffer. */
                if (!feof(pkg->priv->f)) {
                        rc = fread(buf+nbuf, 1, sizeof buf-nbuf, pkg->priv->f);
-                       if (rc == 0)
+                       if (rc == 0 && nbuf == 0)
                                goto err;
                        nbuf += rc;
                }
index ec04e3036f029a485a3bb5d97e5e06e6094860ec..64e7c4c396c8474cff1913b72bb939a61c5d8ccd 100644 (file)
@@ -157,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;
                }