Append data to the currently open log entry. * * This function requires that the log_lock is acquired by the caller. */
| 117 | * This function requires that the log_lock is acquired by the caller. |
| 118 | */ |
| 119 | static void log_append(const uint8_t *data, size_t len) |
| 120 | { |
| 121 | /* Cap the length so that the entry entirely fits into the buffer */ |
| 122 | if (len > LOG_LENGTH - log_current_len) { |
| 123 | len = LOG_LENGTH - log_current_len; |
| 124 | } |
| 125 | |
| 126 | if (len == 0) |
| 127 | return; |
| 128 | |
| 129 | size_t log_free = LOG_LENGTH - log_used - log_current_len; |
| 130 | |
| 131 | /* Discard older entries to make space, if necessary */ |
| 132 | while (len > log_free) { |
| 133 | size_t entry_len; |
| 134 | log_copy_from((uint8_t *) &entry_len, log_start, sizeof(size_t)); |
| 135 | log_start = (log_start + entry_len) % LOG_LENGTH; |
| 136 | log_used -= entry_len; |
| 137 | log_free += entry_len; |
| 138 | next_for_uspace -= entry_len; |
| 139 | } |
| 140 | |
| 141 | size_t pos = (log_current_start + log_current_len) % LOG_LENGTH; |
| 142 | log_copy_to(data, pos, len); |
| 143 | log_current_len += len; |
| 144 | } |
| 145 | |
| 146 | /** Begin writing an entry to the log. |
| 147 | * |
no test coverage detected