Annotation of researchv9/jtools/src/pi/kernmaster.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.