last.c 812 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include <u.h>
  2. #include <libc.h>
  3. void
  4. usage(void)
  5. {
  6. fprint(2, "usage: fossil/last disk\n");
  7. exits("usage");
  8. }
  9. void
  10. main(int argc, char **argv)
  11. {
  12. int fd, bs, addr;
  13. char buf[20];
  14. ARGBEGIN{
  15. default:
  16. usage();
  17. }ARGEND
  18. if(argc != 1)
  19. usage();
  20. if((fd = open(argv[0], OREAD)) < 0)
  21. sysfatal("open %s: %r", argv[0]);
  22. werrstr("end of file");
  23. if(seek(fd, 131072, 0) < 0 || readn(fd, buf, 20) != 20)
  24. sysfatal("error reading %s: %r", argv[0]);
  25. fmtinstall('H', encodefmt);
  26. if(memcmp(buf, "\x37\x76\xAE\x89", 4) != 0)
  27. sysfatal("bad magic %.4H != 3776AE89", buf);
  28. bs = buf[7]|(buf[6]<<8);
  29. addr = (buf[8]<<24)|(buf[9]<<16)|(buf[10]<<8)|buf[11];
  30. if(seek(fd, (vlong)bs*addr+34, 0) < 0 || readn(fd, buf, 20) != 20)
  31. sysfatal("error reading %s: %r", argv[0]);
  32. print("vac:%.20lH\n", buf);
  33. exits(0);
  34. }