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; i<n; i++){
- t = (void*)d[i].mtime;
- if(t == nil)
+ if(d[i].mtime == 0) /* yeah, this is likely */
continue;
sprint(buf, "%s%s", path, d[i].name);
if(symlook(buf, S_TIME, 0))
continue;
- symlook(strdup(buf), S_TIME, t)->value = 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;
}
|