userspace: Add basic find utility
This is mostly working but is missing -exec and -ok support. It can search files though :^)
This commit is contained in:
57
userspace/programs/find/Token.cpp
Normal file
57
userspace/programs/find/Token.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include "Token.h"
|
||||
|
||||
BAN::Vector<Token> tokenize(const char* const* strings)
|
||||
{
|
||||
constexpr Token type_map[] {
|
||||
{ Token::TOK_NOT, "!" },
|
||||
{ Token::TOK_LPAREN, "(" },
|
||||
{ Token::TOK_RPAREN, ")" },
|
||||
{ Token::TOK_CURLIES, "{}" },
|
||||
{ Token::TOK_PLUS, "+" },
|
||||
{ Token::TOK_SEMICOLON, ";" },
|
||||
{ Token::TOK_AND, "-a" },
|
||||
{ Token::TOK_OR, "-o" },
|
||||
{ Token::TOK_NAME, "-name" },
|
||||
{ Token::TOK_INAME, "-iname" },
|
||||
{ Token::TOK_PATH, "-path" },
|
||||
{ Token::TOK_NOUSER, "-nouser" },
|
||||
{ Token::TOK_NOGROUP, "-nogroup" },
|
||||
{ Token::TOK_MOUNT, "-mount" },
|
||||
{ Token::TOK_XDEV, "-xdev" },
|
||||
{ Token::TOK_PRUNE, "-prune" },
|
||||
{ Token::TOK_PERM, "-perm" },
|
||||
{ Token::TOK_TYPE, "-type" },
|
||||
{ Token::TOK_LINKS, "-links" },
|
||||
{ Token::TOK_USER, "-user" },
|
||||
{ Token::TOK_GROUP, "-group" },
|
||||
{ Token::TOK_SIZE, "-size" },
|
||||
{ Token::TOK_ATIME, "-atime" },
|
||||
{ Token::TOK_CTIME, "-ctime" },
|
||||
{ Token::TOK_MTIME, "-mtime" },
|
||||
{ Token::TOK_EXEC, "-exec" },
|
||||
{ Token::TOK_OK, "-ok" },
|
||||
{ Token::TOK_PRINT, "-print" },
|
||||
{ Token::TOK_PRINT0, "-print0" },
|
||||
{ Token::TOK_NEWER, "-newer" },
|
||||
{ Token::TOK_DEPTH, "-depth" },
|
||||
};
|
||||
|
||||
BAN::Vector<Token> tokens;
|
||||
|
||||
for (size_t i = 0; strings[i]; i++)
|
||||
{
|
||||
Token::Type type { Token::TOK_LITERAL };
|
||||
for (const auto& entry : type_map)
|
||||
{
|
||||
if (strcmp(strings[i], entry.string) != 0)
|
||||
continue;
|
||||
type = entry.type;
|
||||
break;
|
||||
}
|
||||
MUST(tokens.push_back({ type, strings[i] }));
|
||||
}
|
||||
|
||||
MUST(tokens.push_back({ Token::TOK_END, "<EOF>" }));
|
||||
|
||||
return tokens;
|
||||
}
|
||||
Reference in New Issue
Block a user