ref: 9bdaed577d3f1725eccbdeaaf1bde79e5b2f8990
parent: 97db7ab3660e6f322e33682e5424bd97f21cbd6b
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Wed Aug 17 21:31:01 EDT 2011
pkg: more fixes
--- a/sys/src/cmd/pkg/install
+++ b/sys/src/cmd/pkg/install
@@ -6,7 +6,7 @@
cd /
mkdir -p /sys/lib/pkg
if (test -s /sys/lib/pkg/$1) {- echo $i already installed
+ echo $1 already installed
exit
}
echo Installing $1
--- a/sys/src/cmd/pkg/unpkg.c
+++ b/sys/src/cmd/pkg/unpkg.c
@@ -56,6 +56,7 @@
struct th th;
ulong off;
uchar b[512];
+ char err[ERRMAX];
DigestState *s;
int r, wfd;
@@ -76,13 +77,18 @@
sysfatal("%r", th.name);s = nil;
for(off=0; off<th.size; off+=512) {- int n = th.size-off;
- n = n<512 ? n : 512;
- if(readn(0, b, 512) != 512)
- sysfatal("%r");- if(write(wfd, b, n) != n)
- sysfatal("%s: %r", th.name);- s = sha1(b, n, nil, s);
+ if(readn(0, b, 512) == 512){+ if((r = th.size-off) > 512)
+ r = 512;
+ if(write(wfd, b, r) == r){+ s = sha1(b, r, nil, s);
+ continue;
+ }
+ }
+ errstr(err, sizeof(err));
+ remove(th.name);
+ errstr(err, sizeof(err));
+ sysfatal("%s: %r", th.name);}
uchar digest[20], hdigest[41];
--
⑨