summaryrefslogtreecommitdiff
path: root/src/sys/system.h
blob: 0947205201fdad4fc8ab2dcdc5021f517f09ab88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#ifndef TINY_CONVMEM_SYS_SYSTEM_H
#define TINY_CONVMEM_SYS_SYSTEM_H

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

typedef enum tiny_sys_status
{
  TINY_SYS_OK = 0,
  TINY_SYS_NOT_FOUND,
  TINY_SYS_BUSY,
  TINY_SYS_ERROR
} tiny_sys_status_t;

typedef enum tiny_sys_file_mode
{
  TINY_SYS_FILE_READ = 0,
  TINY_SYS_FILE_WRITE_NEW,
  TINY_SYS_FILE_READ_WRITE,
  TINY_SYS_FILE_READ_WRITE_CREATE,
  TINY_SYS_FILE_LOCK
} tiny_sys_file_mode_t;

typedef enum tiny_sys_seek_origin
{
  TINY_SYS_SEEK_BEGIN = 0,
  TINY_SYS_SEEK_CURRENT,
  TINY_SYS_SEEK_END
} tiny_sys_seek_origin_t;

typedef struct tiny_sys_file
{
  intptr_t native;
} tiny_sys_file_t;

typedef struct tiny_sys_arguments
{
  int count;
  char **values;
} tiny_sys_arguments_t;

typedef struct tiny_sys_io_counters
{
  uint64_t write_bytes;
  uint64_t write_calls;
  uint64_t flush_calls;
  uint64_t truncate_calls;
  uint64_t replace_calls;
} tiny_sys_io_counters_t;

void tiny_sys_io_counters_reset(void);
void tiny_sys_io_counters_get(tiny_sys_io_counters_t *counters);

/* Internal test seam. A call index of 1 fails the next matching operation. */
typedef enum tiny_sys_test_operation
{
  TINY_SYS_TEST_OPEN = 0,
  TINY_SYS_TEST_READ,
  TINY_SYS_TEST_WRITE,
  TINY_SYS_TEST_SEEK,
  TINY_SYS_TEST_SIZE,
  TINY_SYS_TEST_TRUNCATE,
  TINY_SYS_TEST_FLUSH,
  TINY_SYS_TEST_REPLACE,
  TINY_SYS_TEST_RANDOM,
  TINY_SYS_TEST_OPERATION_COUNT
} tiny_sys_test_operation_t;

void tiny_sys_test_reset(void);
bool tiny_sys_test_fail_after(tiny_sys_test_operation_t operation, size_t call_index);
void tiny_sys_test_max_transfer(uint32_t length);

bool tiny_sys_arguments_init(tiny_sys_arguments_t *arguments, int argc, char **argv);
void tiny_sys_arguments_free(tiny_sys_arguments_t *arguments);

char *tiny_sys_path_absolute(const char *path);
char *tiny_sys_path_join(const char *directory, const char *name);
char *tiny_sys_temp_directory_create(const char *prefix);
tiny_sys_status_t tiny_sys_directory_create(const char *path);
bool tiny_sys_file_remove(const char *path);
bool tiny_sys_directory_remove(const char *path);
bool tiny_sys_path_replace(const char *source, const char *destination);

void tiny_sys_file_init(tiny_sys_file_t *file);
bool tiny_sys_file_valid(const tiny_sys_file_t *file);
tiny_sys_status_t
tiny_sys_file_open(tiny_sys_file_t *file, const char *path, tiny_sys_file_mode_t mode);
void tiny_sys_file_close(tiny_sys_file_t *file);
bool tiny_sys_file_read(tiny_sys_file_t *file, void *data, uint32_t length, uint32_t *actual);
bool
tiny_sys_file_write(tiny_sys_file_t *file, const void *data, uint32_t length, uint32_t *actual);
bool tiny_sys_file_seek(tiny_sys_file_t *file, int64_t offset, tiny_sys_seek_origin_t origin);
bool tiny_sys_file_size(const tiny_sys_file_t *file, uint64_t *size);
bool tiny_sys_file_truncate(tiny_sys_file_t *file);
bool tiny_sys_file_flush(tiny_sys_file_t *file);

uint64_t tiny_sys_now_milliseconds(void);
uint64_t tiny_sys_monotonic_milliseconds(void);
bool tiny_sys_random_bytes(void *data, size_t length);

#endif