64-bit fixes, also fix handling of times in archives. [rsc] --rw-rw-r-- M 451989 glenda sys 826 Nov 6 10:05 sys/src/cmd/mk/arc.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/arc.c:41,47 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/arc.c:41,47 sym = symlook("NREP", S_VAR, 0); if(sym){ - w = (Word *) sym->value; + w = sym->u.ptr; if (w && w->s && *w->s) nreps = atoi(w->s); } [rsc] --rw-rw-r-- M 451989 glenda sys 3071 Nov 6 10:05 sys/src/cmd/mk/archive.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/archive.c:18,38 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/archive.c:18,38 t = mtime(archive); sym = symlook(archive, S_AGG, 0); if(sym){ - if(force || (t > (long)sym->value)){ + if(force || t > sym->u.value){ atimes(archive); - sym->value = (void *)t; + sym->u.value = t; } } else{ atimes(archive); /* mark the aggegate as having been done */ - symlook(strdup(archive), S_AGG, "")->value = (void *)t; + symlook(strdup(archive), S_AGG, "")->u.value = t; } /* truncate long member name to sizeof of name field in archive header */ snprint(buf, sizeof(buf), "%s(%.*s)", archive, utfnlen(member, SARNAME), member); sym = symlook(buf, S_TIME, 0); if (sym) - return (long)sym->value; /* uggh */ + return sym->u.value; return 0; } /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/archive.c:82,91 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/archive.c:82,92 atimes(char *ar) { struct ar_hdr h; - long t; + long at, t; int fd, i; char buf[BIGBLOCK]; - + Dir *d; + fd = open(ar, OREAD); if(fd < 0) return; /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/archive.c:94,102 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/archive.c:95,111 close(fd); return; } + if((d = dirfstat(fd)) == nil){ + close(fd); + return; + } + at = d->mtime; + free(d); while(read(fd, (char *)&h, sizeof(h)) == sizeof(h)){ t = atol(h.date); - if(t == 0) /* as it sometimes happens; thanks ken */ + if(t >= at) /* new things in old archives confuses mk */ + t = at-1; + if(t <= 0) /* as it sometimes happens; thanks ken */ t = 1; for(i = sizeof(h.name)-1; i > 0 && h.name[i] == ' '; i--) ; /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/archive.c:104,110 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/archive.c:113,119 i--; h.name[i+1]=0; /* can stomp on date field */ sprint(buf, "%s(%s)", ar, h.name); - symlook(strdup(buf), S_TIME, (void *)t)->value = (void *)t; + symlook(strdup(buf), S_TIME, (void*)t)->u.value = t; t = atol(h.size); if(t&01) t++; LSEEK(fd, t, 1); [rsc] --rw-rw-r-- M 451989 glenda sys 2281 Nov 6 10:05 sys/src/cmd/mk/env.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/env.c:79,85 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/env.c:79,85 for(p = myenv; *p; p++) if(strcmp(*p, s->name) == 0) return; - envinsert(s->name, (Word *) s->value); + envinsert(s->name, s->u.ptr); } void [rsc] --rw-rw-r-- M 451989 glenda sys 1299 Nov 6 10:05 sys/src/cmd/mk/file.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/file.c:22,28 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/file.c:22,28 sym = symlook(name, S_TIME, 0); if (sym) - return (long) sym->value; /* uggh */ + return sym->u.value; /* uggh */ t = mkmtime(name, 0); if(t == 0) /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/file.c:76,82 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/file.c:76,82 } while(*s); c = *s; *s = 0; - symlook(strdup(cp), S_TIME, (void *)t)->value = (void *)t; + symlook(strdup(cp), S_TIME, (void *)t)->u.value = t; if (c) *s++ = c; while(*s){ [rsc] --rw-rw-r-- M 451989 glenda sys 5822 Nov 6 10:05 sys/src/cmd/mk/graph.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/graph.c:40,46 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/graph.c:40,46 /* print("applyrules(%lux='%s')\n", target, target);/**/ sym = symlook(target, S_NODE, 0); if(sym) - return (Node *)(sym->value); + return sym->u.ptr; target = strdup(target); node = newnode(target); head.n = 0; /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/graph.c:47,53 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/graph.c:47,53 head.next = 0; sym = symlook(target, S_TARGET, 0); memset((char*)rmatch, 0, sizeof(rmatch)); - for(r = sym? (Rule *)(sym->value):0; r; r = r->chain){ + for(r = sym? sym->u.ptr:0; r; r = r->chain){ if(r->attr&META) continue; if(strcmp(target, r->target)) continue; if((!r->recipe || !*r->recipe) && (!r->tail || !r->tail->s || !*r->tail->s)) continue; /* no effect; ignore */ [rsc] --rw-rw-r-- M 451989 glenda sys 5330 Nov 6 10:05 sys/src/cmd/mk/mk.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/mk.c:217,227 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/mk.c:217,227 str = strdup(buf); ret = pcmp(arc->prog, node->name, arc->n->name); if(sym) - sym->value = (void *)ret; + sym->u.value = ret; else symlook(str, S_OUTOFDATE, (void *)ret); } else - ret = (int)(uintptr)sym->value; + ret = sym->u.value; return(ret-1); } else if(strchr(arc->n->name, '(') && arc->n->time == 0) /* missing archive member */ return 1; [rsc] --rw-rw-r-- M 451989 glenda sys 3765 Nov 6 10:05 sys/src/cmd/mk/mk.h /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/mk.h:116,122 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/mk.h:116,125 { short space; char *name; - void *value; + union{ + void *ptr; + uintptr value; + } u; struct Symtab *next; } Symtab; [rsc] --rw-rw-r-- M 451989 glenda sys 6941 Nov 6 10:05 sys/src/cmd/mk/plan9.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/plan9.c:49,55 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/plan9.c:49,55 free(p); p = strdup(e[i].name); setvar(p, (void *) w); - symlook(p, S_EXPORTED, (void*)"")->value = (void*)""; + symlook(p, S_EXPORTED, (void*)"")->u.ptr = ""; } free(e); } /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/plan9.c:346,352 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/plan9.c:346,351 dirtime(char *dir, char *path) { int i, fd, n; - void *t; Dir *d; char buf[4096]; /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/plan9.c:354,366 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/plan9.c:353,364 if(fd >= 0){ while((n = dirread(fd, &d)) > 0){ for(i=0; ivalue = t; + symlook(strdup(buf), S_TIME, (void*)d[i].mtime)->u.value = d[i].mtime; } free(d); } /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/plan9.c:423,429 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/plan9.c:421,427 if(!force){ sym = symlook(name, S_TIME, 0); if(sym) - return (ulong)sym->value; + return sym->u.value; return 0; } if((d = dirstat(name)) == nil) [rsc] --rw-rw-r-- M 451989 glenda sys 2543 Nov 6 10:05 sys/src/cmd/mk/recipe.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/recipe.c:63,69 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/recipe.c:63,69 aw = aw->next; if((s = symlook(buf, S_NODE, 0)) == 0) continue; /* not a node we are interested in */ - n = (Node *)s->value; + n = s->u.ptr; if(aflag == 0 && n->time) { for(a = n->prereqs; a; a = a->next) if(a->n && outofdate(n, a, 0)) [rsc] --rw-rw-r-- M 451989 glenda sys 1946 Nov 6 10:05 sys/src/cmd/mk/rule.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/rule.c:15,21 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/rule.c:15,21 r = 0; reuse = 0; if(sym = symlook(head, S_TARGET, 0)){ - for(r = (Rule *)sym->value; r; r = r->chain) + for(r = sym->u.ptr; r; r = r->chain) if(rcmp(r, head, tail) == 0){ reuse = 1; break; /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/rule.c:34,40 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/rule.c:34,40 r->rule = nrules++; if(!reuse){ - rr = (Rule *)symlook(head, S_TARGET, (void *)r)->value; + rr = symlook(head, S_TARGET, r)->u.ptr; if(rr != r){ r->chain = rr->chain; rr->chain = r; [rsc] --rw-rw-r-- M 451989 glenda sys 5063 Nov 6 10:05 sys/src/cmd/mk/run.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/run.c:169,175 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/run.c:169,175 for(w = j->t; w; w = w->next){ if((s = symlook(w->s, S_NODE, 0)) == 0) continue; /* not interested in this node */ - update(uarg, (Node *)s->value); + update(uarg, s->u.ptr); } if(nrunning < nproclimit) sched(); /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/run.c:183,189 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/run.c:183,189 Word *w; if(sym = symlook("NPROC", S_VAR, 0)) { - w = (Word *) sym->value; + w = sym->u.ptr; if (w && w->s && w->s[0]) nproclimit = atoi(w->s); } [rsc] --rw-rw-r-- M 451989 glenda sys 1581 Nov 6 10:05 sys/src/cmd/mk/symtab.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/symtab.c:36,42 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/symtab.c:36,42 s = (Symtab *)Malloc(sizeof(Symtab)); s->space = space; s->name = sym; - s->value = install; + s->u.ptr = install; s->next = hash[h]; hash[h] = s; return(s); [rsc] --rw-rw-r-- M 451989 glenda sys 530 Nov 6 10:05 sys/src/cmd/mk/var.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/var.c:3,9 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/var.c:3,9 void setvar(char *name, void *value) { - symlook(name, S_VAR, value)->value = value; + symlook(name, S_VAR, value)->u.ptr = value; symlook(name, S_MAKEVAR, (void*)""); } /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/var.c:13,19 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/var.c:13,19 Word *w; Bprint(&bout, "\t%s=", s->name); - for (w = (Word *) s->value; w; w = w->next) + for (w = s->u.ptr; w; w = w->next) Bprint(&bout, "'%s'", w->s); Bprint(&bout, "\n"); } [rsc] --rw-rw-r-- M 451989 glenda sys 4425 Nov 6 10:05 sys/src/cmd/mk/varsub.c /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/varsub.c:66,72 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/varsub.c:66,72 sym = symlook(name, S_VAR, 0); if(sym){ /* check for at least one non-NULL value */ - for (w = (Word*)sym->value; w; w = w->next) + for (w = sym->u.ptr; w; w = w->next) if(w->s && *w->s) return wdup(w); } /n/sourcesdump/2005/1106/plan9/sys/src/cmd/mk/varsub.c:113,122 - /n/sourcesdump/2005/1107/plan9/sys/src/cmd/mk/varsub.c:113,122 *s = end+1; sym = symlook(buf->start, S_VAR, 0); - if(sym == 0 || sym->value == 0) + if(sym == 0 || sym->u.value == 0) w = newword(buf->start); else - w = subsub((Word*) sym->value, cp, end); + w = subsub(sym->u.ptr, cp, end); freebuf(buf); return w; }