#include #include #include char *coredir(void); void coreall(char*); void corefile(char*, int); void usage(void) { fprint(2, "usage: core [dir | corefile]...\n"); exits("usage"); } void main(int argc, char **argv) { int i; ARGBEGIN{ default: usage(); }ARGEND if(argc == 0){ argc++; *--argv = coredir(); } for(i=0; imtime < b->mtime) return 1; if(a->mtime > b->mtime) return -1; return 0; } void coreall(char *name) { Dir *d; int fd, i, n; char *p; if((d = dirstat(name)) == nil){ fprint(2, "%s: %r\n", name); return; } if((d->mode&DMDIR) == 0){ free(d); corefile(name, 1); return; } free(d); if((fd = open(name, OREAD)) < 0){ fprint(2, "open %s: %r\n", name); return; } n = dirreadall(fd, &d); qsort(d, n, sizeof(d[0]), timecmp); for(i=0; imtime)); t[strlen(t)-1] = 0; /* newline */ if((hdr = crackhdr(name, OREAD)) == nil){ if(explicit) fprint(2, "%s: %r\n", name); return; } if(hdr->ftype != FCORE){ uncrackhdr(hdr); if(explicit) fprint(2, "%s: not a core file\n", name); return; } print("stack %s\n\t# %s\n\t# %s\n", name, t, hdr->cmdline); uncrackhdr(hdr); }