os.odin 956 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #load "os_windows.odin" when ODIN_OS == "windows";
  2. #load "os_x.odin" when ODIN_OS == "osx";
  3. #load "os_linux.odin" when ODIN_OS == "linux";
  4. write_string :: proc(fd: Handle, str: string) -> (int, Errno) {
  5. return write(fd, []u8(str));
  6. }
  7. read_entire_file :: proc(name: string) -> ([]u8, bool) {
  8. fd, err := open(name, O_RDONLY, 0);
  9. if err != 0 {
  10. return nil, false;
  11. }
  12. defer close(fd);
  13. length: i64;
  14. if length, err = file_size(fd); err != 0 {
  15. return nil, false;
  16. }
  17. if length == 0 {
  18. return nil, true;
  19. }
  20. data := make([]u8, length);
  21. if data == nil {
  22. return nil, false;
  23. }
  24. bytes_read, read_err := read(fd, data);
  25. if read_err != 0 {
  26. free(data);
  27. return nil, false;
  28. }
  29. return data[0..<bytes_read], true;
  30. }
  31. write_entire_file :: proc(name: string, data: []u8) -> bool {
  32. fd, err := open(name, O_WRONLY, 0);
  33. if err != 0 {
  34. return false;
  35. }
  36. defer close(fd);
  37. bytes_written, write_err := write(fd, data);
  38. return write_err != 0;
  39. }