static bool debug_menu_display_syslog(Menu* menu, MenuItem* item) { ring_buffer* buffer = (ring_buffer*)gKernelArgs.debug_output; if (buffer == NULL) return true; struct TextSource : PagerTextSource { TextSource(ring_buffer* buffer) : fBuffer(buffer) { } virtual size_t BytesAvailable() const { return ring_buffer_readable(fBuffer); } virtual size_t Read(size_t offset, void* buffer, size_t size) const { return ring_buffer_peek(fBuffer, offset, buffer, size); } private: ring_buffer* fBuffer; }; pager(TextSource(buffer)); return true; }
static bool debug_menu_display_current_log(Menu* menu, MenuItem* item) { // get the buffer size_t bufferSize; const char* buffer = platform_debug_get_log_buffer(&bufferSize); if (buffer == NULL || bufferSize == 0) return true; struct TextSource : PagerTextSource { TextSource(const char* buffer, size_t size) : fBuffer(buffer), fSize(strnlen(buffer, size)) { } virtual size_t BytesAvailable() const { return fSize; } virtual size_t Read(size_t offset, void* buffer, size_t size) const { if (offset >= fSize) return 0; if (size > fSize - offset) size = fSize - offset; memcpy(buffer, fBuffer + offset, size); return size; } private: const char* fBuffer; size_t fSize; }; pager(TextSource(buffer, bufferSize)); return true; }