tacme, sam: handle >1GB files correctly - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit 219cf22d6863a21a7378fc5481bb05bbb6edd2dc
parent e78ed7a67bbaa37dc57dfb37219f505c48755e14
Author: Russ Cox 
Date:   Thu, 13 Mar 2014 18:46:28 -0400

acme, sam: handle >1GB files correctly

TBR=rsc
https://codereview.appspot.com/74060043

Diffstat:
  M src/cmd/acme/dat.h                  |       4 ++--
  M src/cmd/acme/disk.c                 |       3 +++
  M src/cmd/sam/disk.c                  |       3 +++
  M src/cmd/sam/sam.h                   |       4 ++--

4 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
t@@ -69,7 +69,7 @@ struct Range
 
 struct Block
 {
-        uint                addr;        /* disk address in bytes */
+        vlong                addr;        /* disk address in bytes */
         union
         {
                 uint        n;                /* number of used runes in block */
t@@ -80,7 +80,7 @@ struct Block
 struct Disk
 {
         int                fd;
-        uint                addr;        /* length of temp file */
+        vlong                addr;        /* length of temp file */
         Block        *free[Maxblock/Blockincr+1];
 };
 
diff --git a/src/cmd/acme/disk.c b/src/cmd/acme/disk.c
t@@ -82,6 +82,9 @@ disknewblock(Disk *d, uint n)
                 b = blist;
                 blist = b->u.next;
                 b->addr = d->addr;
+                if(d->addr+size < d->addr){
+                        error("temp file overflow");
+                }
                 d->addr += size;
         }
         b->u.n = n;
diff --git a/src/cmd/sam/disk.c b/src/cmd/sam/disk.c
t@@ -75,6 +75,9 @@ disknewblock(Disk *d, uint n)
                 b = blist;
                 blist = b->u.next;
                 b->addr = d->addr;
+                if(d->addr+size < d->addr){
+                        panic("temp file overflow");
+                }
                 d->addr += size;
         }
         b->u.n = n;
diff --git a/src/cmd/sam/sam.h b/src/cmd/sam/sam.h
t@@ -113,7 +113,7 @@ enum
 
 struct Block
 {
-        uint                addr;        /* disk address in bytes */
+        vlong                addr;        /* disk address in bytes */
         union {
                 uint        n;        /* number of used runes in block */
                 Block        *next;        /* pointer to next in free list */
t@@ -123,7 +123,7 @@ struct Block
 struct Disk
 {
         int                fd;
-        uint                addr;        /* length of temp file */
+        vlong                addr;        /* length of temp file */
         Block                *free[Maxblock/Blockincr+1];
 };