2
0

os.odin 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. when ODIN_OS == "windows" do export "core:os_windows.odin";
  2. when ODIN_OS == "osx" do export "core:os_x.odin";
  3. when ODIN_OS == "linux" do export "core:os_linux.odin";
  4. when ODIN_OS == "essence" do export "core:os_essence.odin";
  5. import "mem.odin";
  6. write_string :: proc(fd: Handle, str: string) -> (int, Errno) {
  7. return write(fd, cast([]byte)str);
  8. }
  9. write_byte :: proc(fd: Handle, b: byte) -> (int, Errno) {
  10. return write(fd, []byte{b});
  11. }
  12. read_entire_file :: proc(name: string) -> (data: []byte, success: bool) {
  13. fd, err := open(name, O_RDONLY, 0);
  14. if err != 0 {
  15. return nil, false;
  16. }
  17. defer close(fd);
  18. length: i64;
  19. if length, err = file_size(fd); err != 0 {
  20. return nil, false;
  21. }
  22. if length <= 0 {
  23. return nil, true;
  24. }
  25. data = make([]byte, int(length));
  26. if data == nil {
  27. return nil, false;
  28. }
  29. bytes_read, read_err := read(fd, data);
  30. if read_err != 0 {
  31. free(data);
  32. return nil, false;
  33. }
  34. return data[0..bytes_read], true;
  35. }
  36. write_entire_file :: proc(name: string, data: []byte, truncate := true) -> (success: bool) {
  37. flags: int = O_WRONLY|O_CREATE;
  38. if truncate {
  39. flags |= O_TRUNC;
  40. }
  41. fd, err := open(name, flags, 0);
  42. if err != 0 {
  43. return false;
  44. }
  45. defer close(fd);
  46. _, write_err := write(fd, data);
  47. return write_err == 0;
  48. }
  49. write_ptr :: proc(fd: Handle, data: rawptr, len: int) -> (int, Errno) {
  50. return write(fd, mem.slice_ptr(cast(^byte)data, len));
  51. }
  52. read_ptr :: proc(fd: Handle, data: rawptr, len: int) -> (int, Errno) {
  53. return read(fd, mem.slice_ptr(cast(^byte)data, len));
  54. }