void* sdgetfspart(int i, char *s, int chatty) { SDunit *unit; SDpart *p; Scsicrud *crud; if(cdmask&(1<<i)){ if(strcmp(s, "cdboot") != 0) return nil; }else if(sdmask&(1<<i)){ if(strcmp(s, "cdboot") == 0) return nil; } unit = sdindex2unit(i); if((p = sdfindpart(unit, s)) == nil){ if(chatty) print("unknown partition %s!%s\n", unit->name, s); return nil; } if(p->crud == nil) { crud = malloc(sizeof(Scsicrud)); crud->fs.dev = i; crud->fs.diskread = sdread; crud->fs.diskseek = sdseek; // crud->start = 0; crud->unit = unit; crud->part = p; if(dosinit(&crud->fs) < 0 && dosinit(&crud->fs) < 0 && kfsinit(&crud->fs) < 0){ if(chatty) print("partition %s!%s does not contain a DOS or KFS file system\n", unit->name, s); return nil; } p->crud = crud; } return p->crud; }
void* floppygetfspart(int i, char *name, int chatty) { static Fs fs; if(strcmp(name, "dos") != 0) { if(chatty) print("unknown partition fd%d!%s (use fd%d!dos)\n", i, name, i); return nil; } fs.dev = i; fs.diskread = floppyread; fs.diskseek = floppyseek; /* sometimes we get spurious errors and doing it again works */ if(dosinit(&fs) < 0 && dosinit(&fs) < 0) { if(chatty) print("fd%d!%s does not contain a FAT file system\n", i, name); return nil; } return &fs; }