Annotation of researchv9/jtools/src/pi/kernmaster.c, revision 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.