mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-13 08:19:56 +00:00
e370e08e01
Fixes #2105
104 lines
1.9 KiB
C++
104 lines
1.9 KiB
C++
/*
|
|
* \brief Utilities
|
|
* \author Norman Feske
|
|
* \author Christian Prochaska
|
|
* \date 2012-04-11
|
|
*/
|
|
|
|
#ifndef _UTIL_H_
|
|
#define _UTIL_H_
|
|
|
|
/* Genode includes */
|
|
#include <util/string.h>
|
|
#include <file_system/util.h>
|
|
|
|
|
|
/**
|
|
* Return base-name portion of null-terminated path string
|
|
*/
|
|
static inline char const *basename(char const *path)
|
|
{
|
|
char const *start = path;
|
|
|
|
for (; *path; path++)
|
|
if (*path == '/')
|
|
start = path + 1;
|
|
|
|
return start;
|
|
}
|
|
|
|
|
|
/**
|
|
* Return true if null-terminated string 'substr' occurs in null-terminated
|
|
* string 'str'
|
|
*/
|
|
static bool string_contains(char const *str, char const *substr)
|
|
{
|
|
using namespace Genode;
|
|
using Genode::size_t;
|
|
|
|
size_t str_len = strlen(str);
|
|
size_t substr_len = strlen(substr);
|
|
|
|
if (str_len < substr_len)
|
|
return false;
|
|
|
|
for (size_t i = 0; i <= (str_len - substr_len); i++)
|
|
if (strcmp(&str[i], substr, substr_len) == 0)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Return true if 'str' is a valid file name
|
|
*/
|
|
static inline bool valid_filename(char const *str)
|
|
{
|
|
if (!str) return false;
|
|
|
|
/* must have at least one character */
|
|
if (str[0] == 0) return false;
|
|
|
|
/* must not contain '/' or '\' or ':' */
|
|
if (File_system::string_contains(str, '/') ||
|
|
File_system::string_contains(str, '\\') ||
|
|
File_system::string_contains(str, ':'))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return true if 'str' is a valid path
|
|
*/
|
|
static inline bool valid_path(char const *str)
|
|
{
|
|
if (!str) return false;
|
|
|
|
/* must start with '/' */
|
|
if (str[0] != '/')
|
|
return false;
|
|
|
|
/* must not contain '\' or ':' */
|
|
if (File_system::string_contains(str, '\\') ||
|
|
File_system::string_contains(str, ':'))
|
|
return false;
|
|
|
|
/* must not contain "/../" */
|
|
if (string_contains(str, "/../")) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return true if 'str' is "/"
|
|
*/
|
|
static inline bool is_root(const char *str)
|
|
{
|
|
return (Genode::strcmp(str, "/") == 0);
|
|
}
|
|
|
|
#endif /* _UTIL_H_ */
|