tadd - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 58698c9c1205e44c77734e7a32338f6c08bc4aaa | |
parent 20173464d2169892bde1a91bbfd1c2a811a79ace | |
Author: rsc <devnull@localhost> | |
Date: Tue, 18 Jan 2005 20:45:12 +0000 | |
add | |
Diffstat: | |
A src/cmd/core.c | 102 +++++++++++++++++++++++++++++… | |
1 file changed, 102 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/src/cmd/core.c b/src/cmd/core.c | |
t@@ -0,0 +1,102 @@ | |
+#include <u.h> | |
+#include <libc.h> | |
+#include <mach.h> | |
+ | |
+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; i<argc; i++) | |
+ coreall(argv[i]); | |
+} | |
+ | |
+char* | |
+coredir(void) | |
+{ | |
+ char *dir; | |
+ | |
+ dir = getenv("COREDIR"); | |
+ if(dir == nil) | |
+ dir = "."; | |
+ return dir; | |
+} | |
+ | |
+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) | |
+ corefile(name, 1); | |
+ free(d); | |
+ if((fd = open(name, OREAD)) < 0){ | |
+ fprint(2, "open %s: %r\n", name); | |
+ return; | |
+ } | |
+ n = dirreadall(fd, &d); | |
+ for(i=0; i<n; i++){ | |
+ p = smprint("%s/%s", name, d[i].name); | |
+ if(p == nil) | |
+ sysfatal("out of memory"); | |
+ corefile(p, 0); | |
+ free(p); | |
+ } | |
+} | |
+ | |
+void | |
+corefile(char *name, int explicit) | |
+{ | |
+ Fhdr *hdr; | |
+ char t[100]; | |
+ Dir *d; | |
+ | |
+ if((d = dirstat(name)) == nil){ | |
+ if(explicit) | |
+ fprint(2, "%s; %r\n", name); | |
+ return; | |
+ } | |
+ strcpy(t, ctime(d->mtime)); | |
+ 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("acid %s # %s %s\n", name, t, hdr->cmd); | |
+ uncrackhdr(hdr); | |
+} |