64-bit fixes. [jmk] --rw-rw-r-- M 107020 glenda sys 10774 Nov 19 20:09 sys/src/cmd/sam/cmd.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:50,59 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:50,61 Rune *linep = line; Rune *terminp = termline; Rune *termoutp = termline; - List cmdlist; - List addrlist; - List relist; - List stringlist; + + List cmdlist = { 'p' }; + List addrlist = { 'p' }; + List relist = { 'p' }; + List stringlist = { 'p' }; + int eof; void /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:244,250 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:246,252 Cmd *p; p = emalloc(sizeof(Cmd)); - inslist(&cmdlist, cmdlist.nused, (long)p); + inslist(&cmdlist, cmdlist.nused, p); return p; } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:254,260 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:256,262 Addr *p; p = emalloc(sizeof(Addr)); - inslist(&addrlist, addrlist.nused, (long)p); + inslist(&addrlist, addrlist.nused, p); return p; } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:264,270 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:266,272 String *p; p = emalloc(sizeof(String)); - inslist(&relist, relist.nused, (long)p); + inslist(&relist, relist.nused, p); Strinit(p); return p; } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:275,281 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:277,283 String *p; p = emalloc(sizeof(String)); - inslist(&stringlist, stringlist.nused, (long)p); + inslist(&stringlist, stringlist.nused, p); Strinit(p); return p; } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/cmd.c:286,294 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/cmd.c:288,296 int i; while(cmdlist.nused > 0) - free(cmdlist.ucharpptr[--cmdlist.nused]); + free(cmdlist.voidpptr[--cmdlist.nused]); while(addrlist.nused > 0) - free(addrlist.ucharpptr[--addrlist.nused]); + free(addrlist.voidpptr[--addrlist.nused]); while(relist.nused > 0){ i = --relist.nused; Strclose(relist.stringpptr[i]); [jmk] --rw-rw-r-- M 107020 glenda sys 1431 Nov 19 20:09 sys/src/cmd/sam/list.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/list.c:3,18 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/list.c:3,22 /* * Check that list has room for one more element. */ - void - growlist(List *l) + static void + growlist(List *l, int esize) { - if(l->listptr==0 || l->nalloc==0){ + uchar *p; + + if(l->listptr == nil || l->nalloc == 0){ l->nalloc = INCR; - l->listptr = emalloc(INCR*sizeof(long)); + l->listptr = emalloc(INCR*esize); l->nused = 0; - }else if(l->nused == l->nalloc){ - l->listptr = erealloc(l->listptr, (l->nalloc+INCR)*sizeof(long)); - memset((void*)(l->longptr+l->nalloc), 0, INCR*sizeof(long)); + } + else if(l->nused == l->nalloc){ + p = erealloc(l->listptr, (l->nalloc+INCR)*esize); + l->listptr = p; + memset(p+l->nalloc, 0, INCR*esize); l->nalloc += INCR; } } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/list.c:23,30 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/list.c:27,47 void dellist(List *l, int i) { - memmove(&l->longptr[i], &l->longptr[i+1], (l->nused-(i+1))*sizeof(long)); + Posn *pp; + void **vpp; + l->nused--; + + switch(l->type){ + case 'P': + pp = l->posnptr+i; + memmove(pp, pp+1, (l->nused-i)*sizeof(*pp)); + break; + case 'p': + vpp = l->voidpptr+i; + memmove(vpp, vpp+1, (l->nused-i)*sizeof(*vpp)); + break; + } } /* /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/list.c:31,41 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/list.c:48,77 * Add a new element, whose position is i, to the list */ void - inslist(List *l, int i, long val) + inslist(List *l, int i, ...) { - growlist(l); - memmove(&l->longptr[i+1], &l->longptr[i], (l->nused-i)*sizeof(long)); - l->longptr[i] = val; + Posn *pp; + void **vpp; + va_list list; + + + va_start(list, i); + switch(l->type){ + case 'P': + growlist(l, sizeof(*pp)); + pp = l->posnptr+i; + memmove(pp+1, pp, (l->nused-i)*sizeof(*pp)); + *pp = va_arg(list, Posn); + break; + case 'p': + growlist(l, sizeof(*vpp)); + vpp = l->voidpptr+i; + memmove(vpp+1, vpp, (l->nused-i)*sizeof(*vpp)); + *vpp = va_arg(list, void*); + break; + } + va_end(list); + l->nused++; } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/list.c:44,47 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/list.c:80,96 { free(l->listptr); free(l); + } + + List* + listalloc(int type) + { + List *l; + + l = emalloc(sizeof(List)); + l->type = type; + l->nalloc = 0; + l->nused = 0; + + return l; } [jmk] --rw-rw-r-- M 107020 glenda sys 14291 Nov 19 20:09 sys/src/cmd/sam/mesg.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:13,22 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:13,30 int noflush; int tversion; - long inlong(void); - long invlong(void); int inshort(void); + long inlong(void); + vlong invlong(void); int inmesg(Tmesg); + + void outshort(int); + void outlong(long); + void outvlong(vlong); + void outcopy(int, void*); + void outsend(void); + void outstart(Hmesg); + void setgenstr(File*, Posn, Posn); #ifdef DEBUG /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:90,101 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:98,119 { char buf[32]; - sprint(buf, "%ld", n); + snprint(buf, sizeof(buf), "%ld", n); journal(out, buf); } + + void + journalv(int out, vlong v) + { + char buf[32]; + + sprint(buf, sizeof(buf), "%lld", v); + journal(out, buf); + } #else #define journal(a, b) #define journaln(a, b) + #define journalv(a, b) #endif int /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:176,181 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:194,200 int i, m; short s; long l, l1; + vlong v; File *f; Posn p0, p1, p; Range r; /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:204,218 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:223,237 break; case Tstartcmdfile: - l = invlong(); /* for 64-bit pointers */ - journaln(0, l); + v = invlong(); /* for 64-bit pointers */ + journalv(0, v); Strdupl(&genstr, samname); cmd = newfile(); cmd->unread = 0; - outTsv(Hbindname, cmd->tag, l); + outTsv(Hbindname, cmd->tag, v); outTs(Hcurrent, cmd->tag); logsetname(cmd, &genstr); - cmd->rasp = emalloc(sizeof(List)); + cmd->rasp = listalloc('P'); cmd->mod = 0; if(cmdstr.n){ loginsert(cmd, 0L, cmdstr.s, cmdstr.n); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:263,269 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:282,288 termlocked++; f = whichfile(inshort()); if(!f->rasp) /* this might be a duplicate message */ - f->rasp = emalloc(sizeof(List)); + f->rasp = listalloc('P'); current(f); outTsv(Hbindname, f->tag, invlong()); /* for 64-bit pointers */ outTs(Hcurrent, f->tag); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:353,363 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:372,382 break; case Tstartnewfile: - l = invlong(); + v = invlong(); Strdupl(&genstr, empty); f = newfile(); - f->rasp = emalloc(sizeof(List)); - outTsv(Hbindname, f->tag, l); + f->rasp = listalloc('P'); + outTsv(Hbindname, f->tag, v); logsetname(f, &genstr); outTs(Hcurrent, f->tag); current(f); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:593,608 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:612,627 return n; } - long + vlong invlong(void) { - ulong n; + vlong v; - n = (inp[7]<<24) | (inp[6]<<16) | (inp[5]<<8) | inp[4]; - n = (n<<16) | (inp[3]<<8) | inp[2]; - n = (n<<16) | (inp[1]<<8) | inp[0]; + v = (inp[7]<<24) | (inp[6]<<16) | (inp[5]<<8) | inp[4]; + v = (v<<16) | (inp[3]<<8) | inp[2]; + v = (v<<16) | (inp[1]<<8) | inp[0]; inp += 8; - return n; + return v; } void /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:732,743 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:751,762 } void - outTsv(Hmesg type, int s, Posn l) + outTsv(Hmesg type, int s, vlong v) { outstart(type); outshort(s); - outvlong((void*)l); - journaln(1, l); + outvlong(v); + journalv(1, v); outsend(); } /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/mesg.c:773,786 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/mesg.c:792,805 } void - outvlong(void *v) + outvlong(vlong v) { int i; - ulong l; - l = (ulong) v; - for(i = 0; i < 8; i++, l >>= 8) - *outp++ = l; + for(i = 0; i < 8; i++){ + *outp++ = v; + v >>= 8; + } } void [jmk] --rw-rw-r-- M 107020 glenda sys 1844 Nov 19 20:09 sys/src/cmd/sam/multi.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/multi.c:1,6 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/multi.c:1,6 #include "sam.h" - List file; + List file = { 'p' }; ushort tag; File * /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/multi.c:9,15 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/multi.c:9,15 File *f; f = fileopen(); - inslist(&file, 0, (long)f); + inslist(&file, 0, f); f->tag = tag++; if(downloaded) outTs(Hnewname, f->tag); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/multi.c:88,94 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/multi.c:88,94 break; } } - inslist(&file, i, (long)f); + inslist(&file, i, f); if(downloaded) outTsS(Hmovname, f->tag, &f->name); } [jmk] --rw-rw-r-- M 107020 glenda sys 5618 Nov 19 20:09 sys/src/cmd/sam/rasp.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/rasp.c:177,183 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/rasp.c:177,183 } #define M 0x80000000L - #define P(i) r->longptr[i] + #define P(i) r->posnptr[i] #define T(i) (P(i)&M) /* in terminal */ #define L(i) (P(i)&~M) /* length of this piece */ [jmk] --rw-rw-r-- M 107020 glenda sys 12016 Nov 19 20:09 sys/src/cmd/sam/sam.c /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.c:14,20 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.c:14,20 File *flist; File *cmd; jmp_buf mainloop; - List tempfile; + List tempfile = { 'p' }; int quitok = TRUE; int downloaded; int dflag; /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.c:73,79 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.c:73,78 Strinit0(&genstr); Strinit0(&rhs); Strinit0(&curwd); - tempfile.listptr = emalloc(1); /* so it can be freed later */ Strinit0(&plan9cmd); home = getenv(HOME); disk = diskinit(); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.c:707,716 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.c:706,716 settempfile(void) { if(tempfile.nalloc < file.nused){ - free(tempfile.listptr); - tempfile.listptr = emalloc(sizeof(*tempfile.filepptr)*file.nused); + if(tempfile.filepptr) + free(tempfile.filepptr); + tempfile.filepptr = emalloc(sizeof(File*)*file.nused); tempfile.nalloc = file.nused; } + memmove(tempfile.filepptr, file.filepptr, sizeof(File*)*file.nused); tempfile.nused = file.nused; - memmove(&tempfile.filepptr[0], &file.filepptr[0], file.nused*sizeof(File*)); } [jmk] --rw-rw-r-- M 107020 glenda sys 9345 Nov 19 20:09 sys/src/cmd/sam/sam.h /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.h:64,91 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.h:64,89 Rune *s; }; - struct List /* code depends on a long being able to hold a pointer */ + struct List { + int type; int nalloc; int nused; union{ - void *listp; - Block *blkp; - long *longp; - uchar* *ucharp; - String* *stringp; - File* *filep; - long listv; + void* listp; + Block* blkp; + void** voidp; + Posn* posnp; + String**stringp; + File** filep; }g; }; #define listptr g.listp - #define blkptr g.blkp - #define longptr g.longp - #define ucharpptr g.ucharp + #define voidpptr g.voidp + #define posnptr g.posnp #define stringpptr g.stringp #define filepptr g.filep - #define listval g.listv enum { /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.h:262,269 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.h:260,268 int getname(File*, String*, int); long getnum(int); void hiccough(char*); - void inslist(List*, int, long); + void inslist(List*, int, ...); Address lineaddr(Posn, Address, int); + List *listalloc(int); void listfree(List*); void load(File*); File *lookfile(String*); /n/sourcesdump/2005/1119/plan9/sys/src/cmd/sam/sam.h:396,406 - /n/sourcesdump/2005/1120/plan9/sys/src/cmd/sam/sam.h:395,399 void outTsllS(Hmesg, int, long, long, String*); void outTsll(Hmesg, int, long, long); void outTsl(Hmesg, int, long); - void outTsv(Hmesg, int, long); - void outstart(Hmesg); - void outcopy(int, void*); - void outshort(int); - void outlong(long); - void outvlong(void*); - void outsend(void); + void outTsv(Hmesg, int, vlong); void outflush(void);