Index: FileAttr.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/FileAttr.m3,v retrieving revision 1.6 diff -u -r1.6 FileAttr.m3 --- FileAttr.m3 12 Apr 2009 04:50:41 -0000 1.6 +++ FileAttr.m3 1 Feb 2010 13:32:41 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: FileAttr.m3,v 1.6 2009-04-12 04:50:41 jkrell Exp $ *) + * $Id: FileAttr.m3,v 1.8 2010-01-11 20:05:38 hosking Exp $ *) UNSAFE MODULE FileAttr EXPORTS FileAttr, FileAttrRep; @@ -152,7 +152,7 @@ SetFlags(fa, ScanInt(t, pos, FlagsRadix, "flags")); END; IF AttrType.LinkCount IN fa.mask THEN - fa.stat.st_nlink := VAL(ScanInt(t, pos, LinkCountRadix, "linkCount"), nlink_t); + fa.stat.st_nlink := ScanLong(t, pos, LinkCountRadix, "linkCount"); ELSE (* If the link count is missing but supported, fake it as 1. *) IF AttrType.LinkCount IN Supported[fa.fileType] THEN @@ -234,7 +234,7 @@ IF fa.stat.st_nlink = VAL(1, nlink_t) THEN mask := mask - AttrTypes{AttrType.LinkCount}; ELSE - EncodeCounted(Fmt.Unsigned(ORD(fa.stat.st_nlink), LinkCountRadix), + EncodeCounted(Fmt.LongUnsigned(fa.stat.st_nlink, LinkCountRadix), pieces, nextPiece); END; END; @@ -305,6 +305,47 @@ RETURN at; END ScanText; +PROCEDURE ScanInt(t: TEXT; + VAR pos: CARDINAL; + radix: [2..16] := 10; + what: TEXT := "counted integer"): Word.T + RAISES {TokScan.Error} = + VAR + tLen := Text.Length(t); + count, val: Word.T := 0; + ch: CHAR; + digit: INTEGER; + BEGIN + WHILE pos < tLen DO + ch := Text.GetChar(t, pos); + INC(pos); + IF ch < '0' OR ch > '9' THEN EXIT END; + count := Word.Plus(Word.Times(count, 10), ORD(ch) - ORD('0')); + END; + IF pos >= tLen OR ch # '#' THEN + RAISE TokScan.Error("Missing \"#\" in " & what); + END; + IF pos + count > tLen THEN + RAISE TokScan.Error("Short counted file attribute"); + END; + FOR i := 1 TO count DO + ch := Text.GetChar(t, pos); + INC(pos); + CASE ch OF + | '0'..'9' => digit := ORD(ch) - ORD('0'); + | 'a'..'f' => digit := ORD(ch) - ORD('a') + 10; + | 'A'..'F' => digit := ORD(ch) - ORD('A') + 10; + ELSE + digit := radix; + END; + IF digit >= radix THEN + RAISE TokScan.Error("Invalid " & what); + END; + val := Word.Plus(Word.Times(val, radix), digit); + END; + RETURN val; + END ScanInt; + PROCEDURE ScanLong(t: TEXT; VAR pos: CARDINAL; radix: [2..16] := 10; @@ -347,15 +388,6 @@ RETURN val; END ScanLong; -PROCEDURE ScanInt(t: TEXT; - VAR pos: CARDINAL; - radix: [2..16] := 10; - what: TEXT := "counted integer"): Word.T - RAISES {TokScan.Error} = - BEGIN - RETURN ORD(ScanLong(t, pos, radix, what)); - END ScanInt; - PROCEDURE IsSupported(fa: T; READONLY support: SupportInfo): BOOLEAN = BEGIN RETURN AttrType.FileType IN support[fa.fileType]; @@ -759,8 +791,8 @@ VAR times: ARRAY [0..1] OF Utime.struct_timeval; BEGIN - EVAL Utime.gettimeofday(times[0], NIL); (* Access time. *) - times[1].tv_sec := ORD(fa.stat.st_mtime); + EVAL Utime.gettimeofday(times[0]); (* Access time. *) + times[1].tv_sec := VAL(fa.stat.st_mtime, INTEGER); times[1].tv_usec := 0; EVAL Unix.utimes(fromStr, ADR(times)); END; @@ -865,7 +897,7 @@ PROCEDURE GetSize(fa: T): CARDINAL = BEGIN <* ASSERT AttrType.Size IN fa.mask *> - RETURN ORD(fa.stat.st_size); + RETURN VAL(fa.stat.st_size, CARDINAL); END GetSize; PROCEDURE SetSize(fa: T; size: CARDINAL) = @@ -896,7 +928,7 @@ PROCEDURE GetLinkCount(fa: T): CARDINAL = BEGIN <* ASSERT AttrType.LinkCount IN fa.mask *> - RETURN ORD(fa.stat.st_nlink); + RETURN VAL(fa.stat.st_nlink, CARDINAL); END GetLinkCount; (*****************************************************************************) @@ -997,8 +1029,7 @@ END DecodeGroup; PROCEDURE EncodeGroup(gid: Utypes.gid_t; VAR name: TEXT): BOOLEAN = - VAR group: Ugrp.struct_group; - tName: TEXT; + VAR group: Ugrp.struct_group; tName: TEXT; BEGIN LOCK gidLock DO BEGIN Index: RCSFile.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/RCSFile.m3,v retrieving revision 1.2 diff -u -r1.2 RCSFile.m3 --- RCSFile.m3 9 Apr 2009 19:22:35 -0000 1.2 +++ RCSFile.m3 1 Feb 2010 13:32:42 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: RCSFile.m3,v 1.2 2009-04-09 19:22:35 jkrell Exp $ *) + * $Id: RCSFile.m3,v 1.3 2010-01-11 20:05:38 hosking Exp $ *) UNSAFE MODULE RCSFile; @@ -405,7 +405,7 @@ rf := NEW(T).init(); rf.buf := UnixMisc.MapFile(p, statbuf); rf.attr := FileAttr.FromStat(statbuf); - rf.len := ORD(statbuf.st_size); + rf.len := VAL(statbuf.st_size, INTEGER); rf.start := rf.buf; rf.limit := rf.start + rf.len; rf.ptr := rf.limit; (* Already at "end of file". *) @@ -574,7 +574,7 @@ rf := NEW(T).init(); rf.buf := UnixMisc.MapFile(p, statbuf); rf.attr := FileAttr.FromStat(statbuf); - rf.len := ORD(statbuf.st_size); + rf.len := VAL(statbuf.st_size, INTEGER); rf.start := rf.buf; rf.ptr := rf.start; rf.limit := rf.start + rf.len; Index: RsyncFile.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/RsyncFile.m3,v retrieving revision 1.2 diff -u -r1.2 RsyncFile.m3 --- RsyncFile.m3 9 Apr 2009 19:22:35 -0000 1.2 +++ RsyncFile.m3 1 Feb 2010 13:32:42 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: RsyncFile.m3,v 1.2 2009-04-09 19:22:35 jkrell Exp $ *) + * $Id: RsyncFile.m3,v 1.3 2010-01-11 20:05:38 hosking Exp $ *) UNSAFE MODULE RsyncFile; @@ -143,7 +143,7 @@ rf := NEW(T); rf.buf := UnixMisc.MapFile(p, statbuf); rf.attr := FileAttr.FromStat(statbuf); - rf.size := ORD(statbuf.st_size); + rf.size := VAL(statbuf.st_size, INTEGER); rf.start := rf.buf; rf.limit := rf.start + rf.size; Index: TokScan.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/TokScan.m3,v retrieving revision 1.3 diff -u -r1.3 TokScan.m3 --- TokScan.m3 12 Apr 2009 04:22:05 -0000 1.3 +++ TokScan.m3 1 Feb 2010 13:32:42 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: TokScan.m3,v 1.3 2009-04-12 04:22:05 jkrell Exp $ *) + * $Id: TokScan.m3,v 1.4 2010-01-11 19:54:02 hosking Exp $ *) MODULE TokScan; @@ -312,6 +312,34 @@ (* Handy utility procedures. *) (*****************************************************************************) +PROCEDURE AtoI(t: TEXT; what: TEXT := "integer"; radix: [2..16] := 10): Word.T + RAISES {Error} = + VAR + len := Text.Length(t); + val: Word.T := 0; + digit: INTEGER; + BEGIN + IF len = 0 THEN RAISE + Error("Invalid " & what); + END; + FOR i := 0 TO len-1 DO + WITH ch = Text.GetChar(t, i) DO + CASE ch OF + | '0'..'9' => digit := ORD(ch) - ORD('0'); + | 'a'..'f' => digit := ORD(ch) - ORD('a') + 10; + | 'A'..'F' => digit := ORD(ch) - ORD('A') + 10; + ELSE + digit := radix; + END; + IF digit >= radix THEN + RAISE Error("Invalid " & what); + END; + val := Word.Plus(Word.Times(val, radix), digit); + END; + END; + RETURN val; + END AtoI; + PROCEDURE AtoL(t: TEXT; what: TEXT := "integer"; radix: [2..16] := 10): Long.T RAISES {Error} = VAR @@ -340,12 +368,6 @@ RETURN val; END AtoL; -PROCEDURE AtoI(t: TEXT; what: TEXT := "integer"; radix: [2..16] := 10): Word.T - RAISES {Error} = - BEGIN - RETURN ORD(AtoL(t, what, radix)); - END AtoI; - PROCEDURE DecodeTime(text: TEXT): Time.T RAISES {Error} = VAR Index: UnixMisc.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/UnixMisc.m3,v retrieving revision 1.2 diff -u -r1.2 UnixMisc.m3 --- UnixMisc.m3 12 Apr 2009 05:00:50 -0000 1.2 +++ UnixMisc.m3 1 Feb 2010 13:32:43 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: UnixMisc.m3,v 1.2 2009-04-12 05:00:50 jkrell Exp $ *) + * $Id: UnixMisc.m3,v 1.3 2010-01-11 20:05:38 hosking Exp $ *) UNSAFE MODULE UnixMisc; @@ -147,7 +147,7 @@ OSErrorPosix.Raise0(Uerror.EINVAL); END; IF statbuf.st_size # VAL(0, off_t) THEN - addr := Umman.mmap(NIL, ORD(statbuf.st_size), Umman.PROT_READ, + addr := Umman.mmap(NIL, VAL(statbuf.st_size, INTEGER), Umman.PROT_READ, Umman.MAP_SHARED, fd, VAL(0, off_t)); IF addr = LOOPHOLE(-1, ADDRESS) THEN OSErrorPosix.Raise() END; ELSE Index: m3makefile =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/m3makefile,v retrieving revision 1.9 diff -u -r1.9 m3makefile --- m3makefile 20 Jul 2009 12:34:01 -0000 1.9 +++ m3makefile 1 Feb 2010 13:32:43 -0000 @@ -26,7 +26,7 @@ % (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF % THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. % -% $Id: m3makefile,v 1.9 2009-07-20 12:34:01 jkrell Exp $ +% $Id: m3makefile,v 1.11 2009-12-01 16:55:12 rcoleburn Exp $ if equal(OS_TYPE, "POSIX") @@ -49,9 +49,13 @@ %import_lib("z", LibZPath) % cannot be linked statically on Darwin % must be added to cm3.cfg SYSTEM_LIBS[LIBC] as a work around % (cvsup.quake does that unconditionally) - else - LibZPath = findlib("libz.a") - import_lib("z", LibZPath) + else + if equal(TARGET, "SOLgnu") or equal(TARGET, "SOLsun") + LibZPath = findlib("libz.so") + else + LibZPath = findlib("libz.a") + import_lib("z", LibZPath) + end end end Index: dev_t_posix/DevT.m3 =================================================================== RCS file: /usr/cvs/cm3/m3-tools/cvsup/suplib/src/dev_t_posix/DevT.m3,v retrieving revision 1.2 diff -u -r1.2 DevT.m3 --- dev_t_posix/DevT.m3 12 Apr 2009 04:55:36 -0000 1.2 +++ dev_t_posix/DevT.m3 1 Feb 2010 13:32:43 -0000 @@ -26,7 +26,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: DevT.m3,v 1.2 2009-04-12 04:55:36 jkrell Exp $ *) + * $Id: DevT.m3,v 1.3 2010-01-11 20:05:39 hosking Exp $ *) UNSAFE MODULE DevT; @@ -51,7 +51,8 @@ PROCEDURE Hash(READONLY dev: T): Word.T = BEGIN - RETURN Word.Xor(ORD(Long.RightShift(dev, 32)), ORD(Long.And(dev, 16_FFFFFFFFL))); + RETURN Word.Xor(VAL(Long.RightShift(dev, 32), Word.T), + VAL(Long.And(dev, 16_FFFFFFFFL), Word.T)); END Hash; PROCEDURE Mknod(path: TEXT;