int _fsstat(int argc, char ** argv) { int data[8]; fsstat(data); printf("Free blocks: %d\n", data[0]); printf("Total blocks: %d\n", data[1]); printf("Free inodes: %d\n", data[2]); printf("Total inodes: %d\n", data[3]); printf("Free Bytes: %d\n", data[4]); printf("Total available bytes: %d\n", data[5]); }
static void load(const char *fname) { ufs_ino_t ino; EFI_STATUS status; EFI_HANDLE loaderhandle; EFI_LOADED_IMAGE *loaded_image; void *buffer; size_t bufsize; if ((ino = lookup(fname)) == 0) { printf("File %s not found\n", fname); return; } bufsize = fsstat(ino); status = systab->BootServices->AllocatePool(EfiLoaderData, bufsize, &buffer); fsread(ino, buffer, bufsize); /* XXX: For secure boot, we need our own loader here */ status = systab->BootServices->LoadImage(TRUE, image, bootdevpath, buffer, bufsize, &loaderhandle); if (EFI_ERROR(status)) printf("LoadImage failed with error %lu\n", EFI_ERROR_CODE(status)); status = systab->BootServices->HandleProtocol(loaderhandle, &LoadedImageGUID, (VOID**)&loaded_image); if (EFI_ERROR(status)) printf("HandleProtocol failed with error %lu\n", EFI_ERROR_CODE(status)); loaded_image->DeviceHandle = bootdevhandle; status = systab->BootServices->StartImage(loaderhandle, NULL, NULL); if (EFI_ERROR(status)) printf("StartImage failed with error %lu\n", EFI_ERROR_CODE(status)); }
void notefs(int fd) { uchar buf[IOHDRSZ+Maxfdata]; int i, n, ncpunote; Fcall f; Qid wqid[MAXWELEM]; Fid *fid, *nfid; int doreply; rfork(RFNOTEG); fmtinstall('F', fcallfmt); for(n = 0; n < Nfid; n++){ fids[n].file = -1; fids[n].omode = -1; } ncpunote = 0; for(;;){ n = read9pmsg(fd, buf, sizeof(buf)); if(n <= 0){ if(dbg) fprint(2, "read9pmsg(%d) returns %d: %r\n", fd, n); break; } if(convM2S(buf, n, &f) <= BIT16SZ) break; if(dbg) fprint(2, "notefs: ->%F\n", &f); doreply = 1; fid = getfid(f.fid); if(fid == nil){ nofids: f.type = Rerror; f.ename = Enofile; fsreply(fd, &f); continue; } switch(f.type++){ default: f.type = Rerror; f.ename = "unknown type"; break; case Tflush: flushreq(f.oldtag); break; case Tversion: if(f.msize > IOHDRSZ+Maxfdata) f.msize = IOHDRSZ+Maxfdata; break; case Tauth: f.type = Rerror; f.ename = "authentication not required"; break; case Tattach: f.qid = fstab[Qdir].qid; fid->file = Qdir; break; case Twalk: nfid = nil; if(f.newfid != f.fid){ nfid = getfid(f.newfid); if(nfid == nil) goto nofids; nfid->file = fid->file; fid = nfid; } for(i=0; i<f.nwname && i<MAXWELEM; i++){ if(fid->file != Qdir){ f.type = Rerror; f.ename = Enotdir; break; } if(strcmp(f.wname[i], "..") == 0){ wqid[i] = fstab[Qdir].qid; continue; } if(strcmp(f.wname[i], "cpunote") != 0){ if(i == 0){ f.type = Rerror; f.ename = "file does not exist"; } break; } fid->file = Qcpunote; wqid[i] = fstab[Qcpunote].qid; } if(nfid != nil && (f.type == Rerror || i < f.nwname)) nfid ->file = -1; if(f.type != Rerror){ f.nwqid = i; for(i=0; i<f.nwqid; i++) f.wqid[i] = wqid[i]; } break; case Topen: if(f.mode != OREAD){ f.type = Rerror; f.ename = Eperm; break; } fid->omode = f.mode; if(fid->file == Qcpunote) ncpunote++; f.qid = fstab[fid->file].qid; f.iounit = 0; break; case Tread: if(fsread(fd, fid, &f) < 0) goto err; doreply = 0; break; case Tclunk: if(fid->omode != -1 && fid->file == Qcpunote){ ncpunote--; if(ncpunote == 0) /* remote side is done */ goto err; } fid->file = -1; fid->omode = -1; break; case Tstat: if(fsstat(fd, fid, &f) < 0) goto err; doreply = 0; break; case Tcreate: case Twrite: case Tremove: case Twstat: f.type = Rerror; f.ename = Eperm; break; } if(doreply) if(fsreply(fd, &f) < 0) break; } err: if(dbg) fprint(2, "notefs exiting: %r\n"); werrstr("success"); postnote(PNGROUP, exportpid, "kill"); if(dbg) fprint(2, "postnote PNGROUP %d: %r\n", exportpid); close(fd); }