|
|
1.1 root 1: #include "hostcore.h"
2: #include "master.pri"
3: #include "process.pri"
4: #include "symtab.pri"
5: #include <CC/stdio.h>
6: SRCFILE("kernmaster.c")
7:
8: Process *KernMaster::domakeproc(char *p, char *s, char* c)
9: {
10: return (Process*) new KernProcess(child, p, s, c);
11: }
12:
13: extern char *UNIX;
14:
15: KernMaster::KernMaster(SymTab *s)
16: {
17: trace( "%d.KernMaster()", this ); VOK;
18: pad = new Pad( (PadRcv*) this ); /* this code cannot */
19: pad->options(TRUNCATE|SORTED); /* be in base ctor */
20: pad->name("kpi");
21: pad->banner("Kernel pi:");
22: pad->makecurrent();
23: core = new KernCore(0,this);
24: core->_symtab = s;
25: refresh();
26: }
27:
28: void KernMaster::refresh()
29: {
30: trace( "%d.refresh()", this ); VOK;
31: pad->clear();
32: findcores("/tmp/dump");
33: findcores("/u/d");
34: findcores("/usr/dumps");
35: findcores("/usr1/dumps");
36: findcores("/usr2/dumps");
37: findcores("/usrc/dumps");
38: findcores(".");
39: for( Process *p = child; p; p = p->sibling )
40: if( p->core ) insert(p);
41: }
42:
43: void KernMaster::findcores(char *dir)
44: {
45: FILE *fp, *Popen(char*,char*);
46: void Pclose(FILE *);
47: char file[16], n;
48: int fd;
49:
50: trace( "%d.findcores(%s)", this, dir ); VOK;
51: fd = open(dir, 0);
52: if( fd < 0 ) return;
53: close(fd);
54: if( !(fp = Popen( sf("ls -t %s", dir), "r")) )
55: return;
56: for( int i = 0; i < 5; ++i ){
57: if( !fgets(file, 16, fp) )
58: break;
59: if( 1 == sscanf(file, "vmcore.%d", &n) )
60: makeproc(sf("%s/vmcore.%d",dir,n),sf("%s/unix.%d",dir,n));
61: }
62: Pclose(fp);
63: }
64: char *KernMaster::kbd(char *s)
65: {
66: char *corep, core[64], syms[64], star = 0;
67: KernProcess *p;
68:
69: trace( "%d.kbd(%s)", this, s ); OK("kbd");
70: while( *s == ' ' ) ++s;
71: while( *s==' ' ) ++s;
72: switch( *s ){
73: case '*':
74: star = 1;
75: for( ++s; *s==' '; ++s ) {}
76: default:
77: switch( sscanf(s, "%s %s \n", corep = core, syms) ){
78: case 1: syms[0] = '\0';
79: case 2: p = (KernProcess*) makeproc(corep, syms[0]?syms:0, 0);
80: if( star && p ) p->open();
81: break;
82: default:
83: return help();
84: }
85: }
86: return 0;
87: }
88:
89: char *KernMaster::help()
90: {
91: trace( "%d.help()", this );
92: return ".../vmcore.N [.../unix.N] {identify system dump}";
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.