mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:42:43 +00:00 
			
		
		
		
	AK: Remove the LexicalPath::is_valid() API
Since this is always set to true on the non-default constructor and subsequently never modified, it is somewhat pointless. Furthermore, there are arguably no invalid relative paths.
This commit is contained in:
		
							parent
							
								
									caa9daf59e
								
							
						
					
					
						commit
						9b8f35259c
					
				
					 10 changed files with 14 additions and 66 deletions
				
			
		|  | @ -1,5 +1,6 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> |  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||||
|  |  * Copyright (c) 2021, Max Wipfli <max.wipfli@serenityos.org> | ||||||
|  * |  * | ||||||
|  * SPDX-License-Identifier: BSD-2-Clause |  * SPDX-License-Identifier: BSD-2-Clause | ||||||
|  */ |  */ | ||||||
|  | @ -15,7 +16,6 @@ LexicalPath::LexicalPath(String s) | ||||||
|     : m_string(move(s)) |     : m_string(move(s)) | ||||||
| { | { | ||||||
|     canonicalize(); |     canonicalize(); | ||||||
|     m_is_valid = true; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void LexicalPath::canonicalize() | void LexicalPath::canonicalize() | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| /*
 | /*
 | ||||||
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> |  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||||
|  |  * Copyright (c) 2021, Max Wipfli <max.wipfli@serenityos.org> | ||||||
|  * |  * | ||||||
|  * SPDX-License-Identifier: BSD-2-Clause |  * SPDX-License-Identifier: BSD-2-Clause | ||||||
|  */ |  */ | ||||||
|  | @ -16,7 +17,6 @@ public: | ||||||
|     LexicalPath() = default; |     LexicalPath() = default; | ||||||
|     explicit LexicalPath(String); |     explicit LexicalPath(String); | ||||||
| 
 | 
 | ||||||
|     bool is_valid() const { return m_is_valid; } |  | ||||||
|     bool is_absolute() const { return m_is_absolute; } |     bool is_absolute() const { return m_is_absolute; } | ||||||
|     String const& string() const { return m_string; } |     String const& string() const { return m_string; } | ||||||
| 
 | 
 | ||||||
|  | @ -53,7 +53,6 @@ private: | ||||||
|     String m_basename; |     String m_basename; | ||||||
|     String m_title; |     String m_title; | ||||||
|     String m_extension; |     String m_extension; | ||||||
|     bool m_is_valid { false }; |  | ||||||
|     bool m_is_absolute { false }; |     bool m_is_absolute { false }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -162,7 +162,7 @@ u16 URL::default_port_for_scheme(StringView const& scheme) | ||||||
| URL URL::create_with_file_scheme(String const& path, String const& fragment, String const& hostname) | URL URL::create_with_file_scheme(String const& path, String const& fragment, String const& hostname) | ||||||
| { | { | ||||||
|     LexicalPath lexical_path(path); |     LexicalPath lexical_path(path); | ||||||
|     if (!lexical_path.is_valid() || !lexical_path.is_absolute()) |     if (!lexical_path.is_absolute()) | ||||||
|         return {}; |         return {}; | ||||||
| 
 | 
 | ||||||
|     URL url; |     URL url; | ||||||
|  |  | ||||||
|  | @ -9,15 +9,9 @@ | ||||||
| #include <AK/LexicalPath.h> | #include <AK/LexicalPath.h> | ||||||
| #include <AK/String.h> | #include <AK/String.h> | ||||||
| 
 | 
 | ||||||
| TEST_CASE(construct) |  | ||||||
| { |  | ||||||
|     EXPECT_EQ(LexicalPath().is_valid(), false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TEST_CASE(basic) | TEST_CASE(basic) | ||||||
| { | { | ||||||
|     LexicalPath path("/abc/def/ghi.txt"); |     LexicalPath path("/abc/def/ghi.txt"); | ||||||
|     EXPECT_EQ(path.is_valid(), true); |  | ||||||
|     EXPECT_EQ(path.basename(), "ghi.txt"); |     EXPECT_EQ(path.basename(), "ghi.txt"); | ||||||
|     EXPECT_EQ(path.title(), "ghi"); |     EXPECT_EQ(path.title(), "ghi"); | ||||||
|     EXPECT_EQ(path.extension(), "txt"); |     EXPECT_EQ(path.extension(), "txt"); | ||||||
|  |  | ||||||
|  | @ -28,7 +28,6 @@ PropertiesWindow::PropertiesWindow(const String& path, bool disable_rename, Wind | ||||||
|     : Window(parent_window) |     : Window(parent_window) | ||||||
| { | { | ||||||
|     auto lexical_path = LexicalPath(path); |     auto lexical_path = LexicalPath(path); | ||||||
|     VERIFY(lexical_path.is_valid()); |  | ||||||
| 
 | 
 | ||||||
|     auto& main_widget = set_main_widget<GUI::Widget>(); |     auto& main_widget = set_main_widget<GUI::Widget>(); | ||||||
|     main_widget.set_layout<GUI::VerticalBoxLayout>(); |     main_widget.set_layout<GUI::VerticalBoxLayout>(); | ||||||
|  | @ -103,7 +102,6 @@ PropertiesWindow::PropertiesWindow(const String& path, bool disable_rename, Wind | ||||||
|             perror("readlink"); |             perror("readlink"); | ||||||
|         } else { |         } else { | ||||||
|             auto link_directory = LexicalPath(link_destination); |             auto link_directory = LexicalPath(link_destination); | ||||||
|             VERIFY(link_directory.is_valid()); |  | ||||||
|             auto link_parent = URL::create_with_file_protocol(link_directory.dirname(), link_directory.basename()); |             auto link_parent = URL::create_with_file_protocol(link_directory.dirname(), link_directory.basename()); | ||||||
|             properties.append({ "Link target:", link_destination, Optional(link_parent) }); |             properties.append({ "Link target:", link_destination, Optional(link_parent) }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -182,18 +182,10 @@ Optional<String> NewProjectDialog::get_project_full_path() | ||||||
|     auto create_in = m_create_in_input->text(); |     auto create_in = m_create_in_input->text(); | ||||||
|     auto maybe_project_name = get_available_project_name(); |     auto maybe_project_name = get_available_project_name(); | ||||||
| 
 | 
 | ||||||
|     if (!maybe_project_name.has_value()) { |     if (!maybe_project_name.has_value()) | ||||||
|         return {}; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     auto project_name = maybe_project_name.value(); |  | ||||||
|     auto full_path = LexicalPath(String::formatted("{}/{}", create_in, project_name)); |  | ||||||
| 
 |  | ||||||
|     // Do not permit otherwise invalid paths.
 |  | ||||||
|     if (!full_path.is_valid()) |  | ||||||
|         return {}; |         return {}; | ||||||
| 
 | 
 | ||||||
|     return full_path.string(); |     return LexicalPath::join(create_in, *maybe_project_name).string(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void NewProjectDialog::do_create_project() | void NewProjectDialog::do_create_project() | ||||||
|  |  | ||||||
|  | @ -74,13 +74,7 @@ static Optional<FileWatcherEvent> get_event_from_fd(int fd, HashMap<unsigned, St | ||||||
|     // We trust that the kernel only sends the name when appropriate.
 |     // We trust that the kernel only sends the name when appropriate.
 | ||||||
|     if (event->name_length > 0) { |     if (event->name_length > 0) { | ||||||
|         String child_name { event->name, event->name_length - 1 }; |         String child_name { event->name, event->name_length - 1 }; | ||||||
|         auto lexical_path = LexicalPath::join(path, child_name); |         result.event_path = LexicalPath::join(path, child_name).string(); | ||||||
|         if (!lexical_path.is_valid()) { |  | ||||||
|             dbgln_if(FILE_WATCHER_DEBUG, "get_event_from_fd: Reading from wd {}: Invalid child name '{}'", fd, child_name); |  | ||||||
|             return {}; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         result.event_path = lexical_path.string(); |  | ||||||
|     } else { |     } else { | ||||||
|         result.event_path = path; |         result.event_path = path; | ||||||
|     } |     } | ||||||
|  | @ -100,11 +94,6 @@ Result<bool, String> FileWatcherBase::add_watch(String path, FileWatcherEvent::T | ||||||
|         free(buf); |         free(buf); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!lexical_path.is_valid()) { |  | ||||||
|         dbgln_if(FILE_WATCHER_DEBUG, "add_watch: path '{}' invalid", path); |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     auto const& canonical_path = lexical_path.string(); |     auto const& canonical_path = lexical_path.string(); | ||||||
|     if (m_path_to_wd.find(canonical_path) != m_path_to_wd.end()) { |     if (m_path_to_wd.find(canonical_path) != m_path_to_wd.end()) { | ||||||
|         dbgln_if(FILE_WATCHER_DEBUG, "add_watch: path '{}' is already being watched", canonical_path); |         dbgln_if(FILE_WATCHER_DEBUG, "add_watch: path '{}' is already being watched", canonical_path); | ||||||
|  | @ -145,11 +134,6 @@ Result<bool, String> FileWatcherBase::remove_watch(String path) | ||||||
|         free(buf); |         free(buf); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!lexical_path.is_valid()) { |  | ||||||
|         dbgln_if(FILE_WATCHER_DEBUG, "remove_watch: path '{}' invalid", path); |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     auto const& canonical_path = lexical_path.string(); |     auto const& canonical_path = lexical_path.string(); | ||||||
|     auto it = m_path_to_wd.find(canonical_path); |     auto it = m_path_to_wd.find(canonical_path); | ||||||
|     if (it == m_path_to_wd.end()) { |     if (it == m_path_to_wd.end()) { | ||||||
|  |  | ||||||
|  | @ -14,10 +14,6 @@ namespace WindowServer { | ||||||
| CursorParams CursorParams::parse_from_filename(const StringView& cursor_path, const Gfx::IntPoint& default_hotspot) | CursorParams CursorParams::parse_from_filename(const StringView& cursor_path, const Gfx::IntPoint& default_hotspot) | ||||||
| { | { | ||||||
|     LexicalPath path(cursor_path); |     LexicalPath path(cursor_path); | ||||||
|     if (!path.is_valid()) { |  | ||||||
|         dbgln("Cannot parse invalid cursor path, use default cursor params"); |  | ||||||
|         return { default_hotspot }; |  | ||||||
|     } |  | ||||||
|     auto file_title = path.title(); |     auto file_title = path.title(); | ||||||
|     auto last_dot_in_title = StringView(file_title).find_last_of('.'); |     auto last_dot_in_title = StringView(file_title).find_last_of('.'); | ||||||
|     if (!last_dot_in_title.has_value() || last_dot_in_title.value() == 0) { |     if (!last_dot_in_title.has_value() || last_dot_in_title.value() == 0) { | ||||||
|  |  | ||||||
|  | @ -643,10 +643,6 @@ int Shell::builtin_popd(int argc, const char** argv) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     LexicalPath lexical_path(path.characters()); |     LexicalPath lexical_path(path.characters()); | ||||||
|     if (!lexical_path.is_valid()) { |  | ||||||
|         warnln("LexicalPath failed to canonicalize '{}'", path); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     const char* real_path = lexical_path.string().characters(); |     const char* real_path = lexical_path.string().characters(); | ||||||
| 
 | 
 | ||||||
|  | @ -729,16 +725,10 @@ int Shell::builtin_pushd(int argc, const char** argv) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     LexicalPath lexical_path(path_builder.to_string()); |     auto real_path = LexicalPath::canonicalized_path(path_builder.to_string()); | ||||||
|     if (!lexical_path.is_valid()) { |  | ||||||
|         warnln("LexicalPath failed to canonicalize '{}'", path_builder.string_view()); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const char* real_path = lexical_path.string().characters(); |  | ||||||
| 
 | 
 | ||||||
|     struct stat st; |     struct stat st; | ||||||
|     int rc = stat(real_path, &st); |     int rc = stat(real_path.characters(), &st); | ||||||
|     if (rc < 0) { |     if (rc < 0) { | ||||||
|         warnln("stat({}) failed: {}", real_path, strerror(errno)); |         warnln("stat({}) failed: {}", real_path, strerror(errno)); | ||||||
|         return 1; |         return 1; | ||||||
|  | @ -750,13 +740,13 @@ int Shell::builtin_pushd(int argc, const char** argv) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (should_switch) { |     if (should_switch) { | ||||||
|         int rc = chdir(real_path); |         int rc = chdir(real_path.characters()); | ||||||
|         if (rc < 0) { |         if (rc < 0) { | ||||||
|             warnln("chdir({}) failed: {}", real_path, strerror(errno)); |             warnln("chdir({}) failed: {}", real_path, strerror(errno)); | ||||||
|             return 1; |             return 1; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         cwd = lexical_path.string(); |         cwd = real_path; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|  | @ -97,20 +97,15 @@ int main(int argc, char** argv) | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     LexicalPath target_path(String::formatted("{}/{}", target_directory, file_template)); |     auto target_path = LexicalPath::join(target_directory, file_template).string(); | ||||||
|     if (!target_path.is_valid()) { |  | ||||||
|         if (!quiet) |  | ||||||
|             warnln("Invalid template path {}", target_path.string().characters()); |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     char* final_path = make_temp(target_path.string().characters(), create_directory, dry_run); |     char* final_path = make_temp(target_path.characters(), create_directory, dry_run); | ||||||
|     if (!final_path) { |     if (!final_path) { | ||||||
|         if (!quiet) { |         if (!quiet) { | ||||||
|             if (create_directory) |             if (create_directory) | ||||||
|                 warnln("Failed to create directory via template {}", target_path.string().characters()); |                 warnln("Failed to create directory via template {}", target_path.characters()); | ||||||
|             else |             else | ||||||
|                 warnln("Failed to create file via template {}", target_path.string().characters()); |                 warnln("Failed to create file via template {}", target_path.characters()); | ||||||
|         } |         } | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Max Wipfli
						Max Wipfli