]> git.draconx.ca Git - upkg.git/blobdiff - src/libupkg.c
Don't bail out if a read fails but there's still data available.
[upkg.git] / src / libupkg.c
index 6012f0962d4e7d445d657163e3d548e444e7e7d6..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;
                }
@@ -251,7 +251,7 @@ static int pkg_init_exports(struct upkg *pkg)
                len += rc;
 
                if (nbuf-len < 4) goto err;
-               export->package = unpack_32_le(buf+len);
+               export->package = unpack_s32_le(buf+len);
                len += 4;
 
                rc = upkg_decode_index(&tmp, buf+len, nbuf-len);
@@ -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;
                }
@@ -323,7 +323,7 @@ static int pkg_init_imports(struct upkg *pkg)
                len += rc;
 
                if (nbuf-len < 4) goto err;
-               import->package = unpack_32_le(buf+len);
+               import->package = unpack_s32_le(buf+len);
                len += 4;
 
                rc = upkg_decode_index(&tmp, buf+len, nbuf-len);