mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-28 07:04:14 +00:00
127 lines
2.2 KiB
C
127 lines
2.2 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>
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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 specified path is a base name (contains no path delimiters)
|
||
|
*/
|
||
|
static inline bool is_basename(char const *path)
|
||
|
{
|
||
|
for (; *path; path++)
|
||
|
if (*path == '/')
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Return true if character 'c' occurs in null-terminated string 'str'
|
||
|
*/
|
||
|
static inline bool string_contains(char const *str, char c)
|
||
|
{
|
||
|
for (; *str; str++)
|
||
|
if (*str == c)
|
||
|
return true;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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;
|
||
|
|
||
|
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 (string_contains(str, '/') ||
|
||
|
string_contains(str, '\\') ||
|
||
|
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 (string_contains(str, '\\') ||
|
||
|
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_ */
|