Beispiel #1
0
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;
}
Beispiel #2
0
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;
}