genode/repos/gems/src/lib/vfs/trace/session_label.h
Sebastian Sumpf 18b3253cac vfs_trace: VFS plugin that offers trace buffer access
The plugin creates a file-system hierarchy that enabled the access of
trace buffers for each component and its threads.

issue #3294
2019-07-09 08:55:23 +02:00

70 lines
1.5 KiB
C++

/*
* \brief Session label extension
* \author Sebastian Sumpf
* \date 2019-06-04
*/
/*
* Copyright (C) 2019 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
#ifndef _SESSION_LABEL_H_
#define _SESSION_LABEL_H_
#include <base/snprintf.h>
#include <util/arg_string.h>
#include <util/string.h>
namespace Vfs {
using namespace Genode;
struct Session_label;
}
struct Vfs::Session_label : Genode::Session_label
{
private:
static char const *_separator() { return " -> "; }
static size_t _separator_len() { return 4; }
public:
using Genode::Session_label::Session_label;
Session_label first_element() const
{
char const * const full = string();
if (length() < _separator_len() + 1)
return Session_label(Cstring(full));
unsigned prefix_len;
for (prefix_len = 0; prefix_len < length() - 1; prefix_len++)
if (!strcmp(_separator(), full + prefix_len, _separator_len()))
break;
return Session_label(Cstring(full, prefix_len));
}
/**
* Return part of the label without first element
*/
Session_label suffix() const
{
if (length() < _separator_len() + 1)
return Session_label();
char const * const full = string();
for (unsigned prefix_len = 0; prefix_len < length() - 1; prefix_len++)
if (!strcmp(_separator(), full + prefix_len, _separator_len()))
return full + prefix_len + _separator_len();
return Session_label();
}
};
#endif /* _SESSION_LABEL_H_ */