-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfkfs_log.cpp
More file actions
66 lines (52 loc) · 1.67 KB
/
fkfs_log.cpp
File metadata and controls
66 lines (52 loc) · 1.67 KB
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
#include "fkfs_log.h"
uint8_t fkfs_log_initialize(fkfs_log_t *log, fkfs_t *fs, uint8_t file) {
log->buffer[0] = 0;
log->fs = fs;
log->file = file;
return true;
}
uint8_t fkfs_log_flush(fkfs_log_t *log) {
if (!fkfs_file_append(log->fs, log->file, log->position, (uint8_t *)log->buffer)) {
return false;
}
log->buffer[0] = 0;
log->position = 0;
return true;
}
uint8_t fkfs_log_append_binary(fkfs_log_t *log, uint8_t *ptr, size_t length, bool canSplit) {
if (!canSplit && (FKFS_MAXIMUM_BLOCK_SIZE - log->position) < length) {
if (length >= FKFS_MAXIMUM_BLOCK_SIZE) {
return false;
}
if (!fkfs_log_flush(log)) {
return false;
}
}
size_t required = length;
while (required > 0) {
size_t available = FKFS_MAXIMUM_BLOCK_SIZE - log->position;
size_t copy = required > available ? available : required;
memcpy((uint8_t *)log->buffer + log->position, ptr, copy);
log->position += copy;
required -= copy;
ptr += copy;
if (log->position >= FKFS_MAXIMUM_BLOCK_SIZE) {
if (!fkfs_log_flush(log)) {
return false;
}
}
}
return true;
}
uint8_t fkfs_log_append(fkfs_log_t *log, const char *str) {
size_t required = strlen(str);
return fkfs_log_append_binary(log, (uint8_t *)str, required, true);
}
uint8_t fkfs_log_printf(fkfs_log_t *log, const char *format, ...) {
char incoming[FKFS_MAXIMUM_BLOCK_SIZE];
va_list args;
va_start(args, format);
vsnprintf(incoming, sizeof(incoming), format, args);
va_end(args);
return fkfs_log_append(log, incoming);
}