openfont.c 512 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "lib9.h"
  2. #include "kernel.h"
  3. #include "draw.h"
  4. Font*
  5. openfont(Display *d, char *name)
  6. {
  7. Font *fnt;
  8. int fd, i, n;
  9. char *buf;
  10. Dir *dir;
  11. fd = libopen(name, OREAD);
  12. if(fd < 0)
  13. return 0;
  14. if((dir = libdirfstat(fd)) == nil){
  15. Err0:
  16. libclose(fd);
  17. return 0;
  18. }
  19. n = dir->length;
  20. free(dir);
  21. buf = malloc(n+1);
  22. if(buf == 0)
  23. goto Err0;
  24. buf[n] = 0;
  25. i = libreadn(fd, buf, n);
  26. libclose(fd);
  27. if(i != n){
  28. free(buf);
  29. return 0;
  30. }
  31. fnt = buildfont(d, buf, name);
  32. free(buf);
  33. return fnt;
  34. }