1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 07:24:58 +00:00

LibFileSystem+Userland: Return ByteString from absolute_path()

This commit is contained in:
Sam Atkins 2024-01-15 16:10:46 +00:00 committed by Sam Atkins
parent fb644d08ac
commit cdf17efb9a
7 changed files with 12 additions and 14 deletions

View file

@ -37,7 +37,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
parser.add_positional_argument(file_to_edit, "Theme file to edit", "file", Core::ArgsParser::Required::No); parser.add_positional_argument(file_to_edit, "Theme file to edit", "file", Core::ArgsParser::Required::No);
parser.parse(arguments); parser.parse(arguments);
Optional<String> path = {}; Optional<ByteString> path = {};
if (auto error_or_path = FileSystem::absolute_path(file_to_edit); !file_to_edit.is_empty() && !error_or_path.is_error()) if (auto error_or_path = FileSystem::absolute_path(file_to_edit); !file_to_edit.is_empty() && !error_or_path.is_error())
path = error_or_path.release_value(); path = error_or_path.release_value();
@ -57,7 +57,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
// Note: This is deferred to ensure that the window has already popped and any error dialog boxes would show up correctly. // Note: This is deferred to ensure that the window has already popped and any error dialog boxes would show up correctly.
app->event_loop().deferred_invoke( app->event_loop().deferred_invoke(
[&window, &path, &main_widget]() { [&window, &path, &main_widget]() {
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, path.value().to_byte_string()); auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, path.value());
if (!response.is_error()) { if (!response.is_error()) {
auto load_from_file_result = main_widget->load_from_file(response.value().filename(), response.value().release_stream()); auto load_from_file_result = main_widget->load_from_file(response.value().filename(), response.value().release_stream());
if (load_from_file_result.is_error()) if (load_from_file_result.is_error())

View file

@ -28,18 +28,16 @@ ErrorOr<ByteString> current_working_directory()
return Core::System::getcwd(); return Core::System::getcwd();
} }
ErrorOr<String> absolute_path(StringView path) ErrorOr<ByteString> absolute_path(StringView path)
{ {
if (exists(path)) if (exists(path))
return TRY(real_path(path)); return TRY(real_path(path)).to_byte_string();
if (path.starts_with("/"sv)) if (path.starts_with("/"sv))
return TRY(String::from_byte_string(LexicalPath::canonicalized_path(path))); return LexicalPath::canonicalized_path(path);
auto working_directory = TRY(current_working_directory()); auto working_directory = TRY(current_working_directory());
auto full_path = LexicalPath::join(working_directory, path).string(); return LexicalPath::absolute_path(working_directory, path);
return TRY(String::from_byte_string(LexicalPath::canonicalized_path(full_path)));
} }
ErrorOr<String> real_path(StringView path) ErrorOr<String> real_path(StringView path)

View file

@ -19,7 +19,7 @@ namespace FileSystem {
#define DEFAULT_PATH_SV "/usr/local/sbin:/usr/local/bin:/usr/bin:/bin"sv #define DEFAULT_PATH_SV "/usr/local/sbin:/usr/local/bin:/usr/bin:/bin"sv
ErrorOr<ByteString> current_working_directory(); ErrorOr<ByteString> current_working_directory();
ErrorOr<String> absolute_path(StringView path); ErrorOr<ByteString> absolute_path(StringView path);
ErrorOr<String> real_path(StringView path); ErrorOr<String> real_path(StringView path);
bool exists(StringView path); bool exists(StringView path);

View file

@ -35,8 +35,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
ByteString destination_dir = (sources.size() > 1 ? ByteString { destination } : LexicalPath::dirname(destination)); ByteString destination_dir = (sources.size() > 1 ? ByteString { destination } : LexicalPath::dirname(destination));
if (create_leading_dest_components) { if (create_leading_dest_components) {
String destination_dir_absolute = TRY(FileSystem::absolute_path(destination_dir)); auto destination_dir_absolute = TRY(FileSystem::absolute_path(destination_dir));
MUST(Core::Directory::create(destination_dir_absolute.to_byte_string(), Core::Directory::CreateDirectories::Yes)); MUST(Core::Directory::create(destination_dir_absolute, Core::Directory::CreateDirectories::Yes));
} }
for (auto const& source : sources) { for (auto const& source : sources) {

View file

@ -76,7 +76,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (target_directory.is_empty()) { if (target_directory.is_empty()) {
if (!file_template.is_empty()) { if (!file_template.is_empty()) {
auto resolved_path = LexicalPath(TRY(FileSystem::absolute_path(file_template)).to_byte_string()); auto resolved_path = LexicalPath(TRY(FileSystem::absolute_path(file_template)));
final_target_directory = TRY(String::from_utf8(resolved_path.dirname())); final_target_directory = TRY(String::from_utf8(resolved_path.dirname()));
final_file_template = TRY(String::from_utf8(resolved_path.basename())); final_file_template = TRY(String::from_utf8(resolved_path.basename()));
} else { } else {

View file

@ -952,7 +952,7 @@ ErrorOr<int> serenity_main(Main::Arguments args)
pos_args.remove(0); pos_args.remove(0);
} }
HashMap<String, String> paths_to_unveil; HashMap<ByteString, String> paths_to_unveil;
for (auto const& input_filename : TRY(script.input_filenames())) { for (auto const& input_filename : TRY(script.input_filenames())) {
TRY(paths_to_unveil.try_set(TRY(FileSystem::absolute_path(input_filename)), edit_in_place ? "rwc"_string : "r"_string)); TRY(paths_to_unveil.try_set(TRY(FileSystem::absolute_path(input_filename)), edit_in_place ? "rwc"_string : "r"_string));

View file

@ -167,7 +167,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
outln("{}", filename); outln("{}", filename);
if (extract) { if (extract) {
ByteString absolute_path = TRY(FileSystem::absolute_path(filename)).to_byte_string(); auto absolute_path = TRY(FileSystem::absolute_path(filename));
auto parent_path = LexicalPath(absolute_path).parent(); auto parent_path = LexicalPath(absolute_path).parent();
auto header_mode = TRY(header.mode()); auto header_mode = TRY(header.mode());