[fb] Dynamically allocate log entry buffer

Since the kernel will tell us what size of buffer we need for
j6_system_get_log(), malloc the buffer for it from the heap instead of a
fixed array on the stack.
This commit is contained in:
Justin C. Miller
2021-02-05 23:51:34 -08:00
parent 335bc01185
commit b5885ae35f

View File

@@ -94,12 +94,26 @@ main(int argc, const char **argv)
int pending = 0; int pending = 0;
constexpr int pending_threshold = 10; constexpr int pending_threshold = 10;
char message_buffer[256]; j6_handle_t sys = __handle_sys;
size_t buffer_size = 0;
void *message_buffer = nullptr;
while (true) { while (true) {
size_t size = sizeof(message_buffer); size_t size = buffer_size;
j6_system_get_log(__handle_sys, message_buffer, &size); j6_status_t s = j6_system_get_log(sys, message_buffer, &size);
if (size != 0) {
entry *e = reinterpret_cast<entry*>(&message_buffer); if (s == j6_err_insufficient) {
free(message_buffer);
message_buffer = malloc(size);
buffer_size = size;
continue;
} else if (s != j6_status_ok) {
j6_system_log("fb driver got error from get_log, quitting");
return s;
}
if (size > 0) {
entry *e = reinterpret_cast<entry*>(message_buffer);
size_t eom = e->bytes - sizeof(entry); size_t eom = e->bytes - sizeof(entry);
e->message[eom] = 0; e->message[eom] = 0;
@@ -119,7 +133,6 @@ main(int argc, const char **argv)
} }
} }
j6_system_log("fb driver done, exiting"); j6_system_log("fb driver done, exiting");
return 0; return 0;
} }