From ff023f65d2741fd806b5d84e2fdd31063314d90c Mon Sep 17 00:00:00 2001 From: Dave Schmenk Date: Fri, 17 Jan 2020 12:51:19 -0800 Subject: [PATCH] Fix long standing bug in catalog code --- src/libsrc/apple/matchfiles.pla | 2 +- src/toolsrc/ed.pla | 56 +++++++++++++++------------------ src/vmsrc/apple/cmd.pla | 2 +- src/vmsrc/apple/cmdjit.pla | 2 +- src/vmsrc/apple/soscmd.pla | 2 +- src/vmsrc/apple/soscmdjit.pla | 2 +- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/libsrc/apple/matchfiles.pla b/src/libsrc/apple/matchfiles.pla index f3ff790..bb1339e 100644 --- a/src/libsrc/apple/matchfiles.pla +++ b/src/libsrc/apple/matchfiles.pla @@ -70,7 +70,7 @@ export def matchList(pathstr, exp)#2 // Pull out revelant details from the first block // entrylen = dirbuf->$23 - entriesblk = dirbuf->$24 + entriesblk = dirbuf->$24 - 1 entry = entry + entrylen fin for i = firstblk to entriesblk diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index e128773..4439503 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -1527,7 +1527,7 @@ def prfiles(optpath) byte firstblk byte entrylen, entriesblk byte i, type, len - word databuff, entry, filecnt + word databuff, entry if ^optpath strstripcpy(@path, optpath) @@ -1542,37 +1542,31 @@ def prfiles(optpath) return perr fin firstblk = 1 - repeat - if fileio:read(refnum, databuff, 512) == 512 - entry = databuff + 4 - if firstblk - entrylen = databuff->$23 - entriesblk = databuff->$24 - filecnt = databuff=>$25 - entry = entry + entrylen - fin - for i = firstblk to entriesblk - type = ^entry - if type <> 0 - len = type & $0F - ^entry = len - puts(entry) - if type & $F0 == $D0 // Is it a directory? - putc('/') - len++ - fin - for len = 20 - len downto 1 - putc(' ') - next - filecnt-- - fin - entry = entry + entrylen - next - firstblk = 0 - else - filecnt = 0 + while fileio:read(refnum, databuff, 512) == 512 + entry = databuff + 4 + if firstblk + entrylen = databuff->$23 + entriesblk = databuff->$24 + entry = entry + entrylen fin - until filecnt == 0 + for i = firstblk to entriesblk + type = ^entry + if type <> 0 + len = type & $0F + ^entry = len + puts(entry) + if type & $F0 == $D0 // Is it a directory? + putc('/') + len++ + fin + for len = 20 - len downto 1 + putc(' ') + next + fin + entry = entry + entrylen + next + firstblk = 0 + loop fileio:close(refnum) heaprelease(databuff) putln diff --git a/src/vmsrc/apple/cmd.pla b/src/vmsrc/apple/cmd.pla index 4b171b6..6ddd98a 100755 --- a/src/vmsrc/apple/cmd.pla +++ b/src/vmsrc/apple/cmd.pla @@ -1186,7 +1186,7 @@ def catalog(path)#0 entry = heap + 4 if firstblk entrylen = heap->$23 - entriesblk = heap->$24 + entriesblk = heap->$24 - 1 entry = entry + entrylen fin for i = firstblk to entriesblk diff --git a/src/vmsrc/apple/cmdjit.pla b/src/vmsrc/apple/cmdjit.pla index 5cde917..fbaa0d4 100755 --- a/src/vmsrc/apple/cmdjit.pla +++ b/src/vmsrc/apple/cmdjit.pla @@ -1251,7 +1251,7 @@ def catalog(path)#0 entry = heap + 4 if firstblk entrylen = heap->$23 - entriesblk = heap->$24 + entriesblk = heap->$24 - 1 entry = entry + entrylen fin for i = firstblk to entriesblk diff --git a/src/vmsrc/apple/soscmd.pla b/src/vmsrc/apple/soscmd.pla index 3253333..54d385f 100755 --- a/src/vmsrc/apple/soscmd.pla +++ b/src/vmsrc/apple/soscmd.pla @@ -95,7 +95,7 @@ def catalog(path)#0 entry = catptr + 4 if firstblk entrylen = catptr->$23 - entriesblk = catptr->$24 + entriesblk = catptr->$24 - 1 entry = entry + entrylen fin for i = firstblk to entriesblk diff --git a/src/vmsrc/apple/soscmdjit.pla b/src/vmsrc/apple/soscmdjit.pla index af074f9..917a809 100755 --- a/src/vmsrc/apple/soscmdjit.pla +++ b/src/vmsrc/apple/soscmdjit.pla @@ -170,7 +170,7 @@ def catalog(path)#0 entry = catptr + 4 if firstblk entrylen = catptr->$23 - entriesblk = catptr->$24 + entriesblk = catptr->$24 - 1 entry = entry + entrylen fin for i = firstblk to entriesblk