mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:32:46 +00:00 
			
		
		
		
	Everywhere: Add sv suffix to strings relying on StringView(char const*)
Each of these strings would previously rely on StringView's char const* constructor overload, which would call __builtin_strlen on the string. Since we now have operator ""sv, we can replace these with much simpler versions. This opens the door to being able to remove StringView(char const*). No functional changes.
This commit is contained in:
		
							parent
							
								
									e5f09ea170
								
							
						
					
					
						commit
						3f3f45580a
					
				
					 762 changed files with 8315 additions and 8316 deletions
				
			
		|  | @ -12,29 +12,29 @@ | |||
| namespace AK { | ||||
| 
 | ||||
| static constexpr Array<StringView, 7> long_day_names = { | ||||
|     "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" | ||||
|     "Sunday"sv, "Monday"sv, "Tuesday"sv, "Wednesday"sv, "Thursday"sv, "Friday"sv, "Saturday"sv | ||||
| }; | ||||
| 
 | ||||
| static constexpr Array<StringView, 7> short_day_names = { | ||||
|     "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" | ||||
|     "Sun"sv, "Mon"sv, "Tue"sv, "Wed"sv, "Thu"sv, "Fri"sv, "Sat"sv | ||||
| }; | ||||
| 
 | ||||
| static constexpr Array<StringView, 7> mini_day_names = { | ||||
|     "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" | ||||
|     "Su"sv, "Mo"sv, "Tu"sv, "We"sv, "Th"sv, "Fr"sv, "Sa"sv | ||||
| }; | ||||
| 
 | ||||
| static constexpr Array<StringView, 7> micro_day_names = { | ||||
|     "S", "M", "T", "W", "T", "F", "S" | ||||
|     "S"sv, "M"sv, "T"sv, "W"sv, "T"sv, "F"sv, "S"sv | ||||
| }; | ||||
| 
 | ||||
| static constexpr Array<StringView, 12> long_month_names = { | ||||
|     "January", "February", "March", "April", "May", "June", | ||||
|     "July", "August", "September", "October", "November", "December" | ||||
|     "January"sv, "February"sv, "March"sv, "April"sv, "May"sv, "June"sv, | ||||
|     "July"sv, "August"sv, "September"sv, "October"sv, "November"sv, "December"sv | ||||
| }; | ||||
| 
 | ||||
| static constexpr Array<StringView, 12> short_month_names = { | ||||
|     "Jan", "Feb", "Mar", "Apr", "May", "Jun", | ||||
|     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" | ||||
|     "Jan"sv, "Feb"sv, "Mar"sv, "Apr"sv, "May"sv, "Jun"sv, | ||||
|     "Jul"sv, "Aug"sv, "Sep"sv, "Oct"sv, "Nov"sv, "Dec"sv | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -114,7 +114,7 @@ StringView FormatParser::consume_literal() | |||
|         if (consume_specific("}}")) | ||||
|             continue; | ||||
| 
 | ||||
|         if (next_is(is_any_of("{}"))) | ||||
|         if (next_is(is_any_of("{}"sv))) | ||||
|             return m_input.substring_view(begin, tell() - begin); | ||||
| 
 | ||||
|         consume(); | ||||
|  | @ -170,7 +170,7 @@ bool FormatParser::consume_specifier(FormatSpecifier& specifier) | |||
|         if (!consume_specific('}')) | ||||
|             VERIFY_NOT_REACHED(); | ||||
| 
 | ||||
|         specifier.flags = ""; | ||||
|         specifier.flags = ""sv; | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
|  | @ -287,16 +287,16 @@ ErrorOr<void> FormatBuilder::put_u64( | |||
|         if (prefix) { | ||||
|             if (base == 2) { | ||||
|                 if (upper_case) | ||||
|                     TRY(m_builder.try_append("0B")); | ||||
|                     TRY(m_builder.try_append("0B"sv)); | ||||
|                 else | ||||
|                     TRY(m_builder.try_append("0b")); | ||||
|                     TRY(m_builder.try_append("0b"sv)); | ||||
|             } else if (base == 8) { | ||||
|                 TRY(m_builder.try_append("0")); | ||||
|                 TRY(m_builder.try_append("0"sv)); | ||||
|             } else if (base == 16) { | ||||
|                 if (upper_case) | ||||
|                     TRY(m_builder.try_append("0X")); | ||||
|                     TRY(m_builder.try_append("0X"sv)); | ||||
|                 else | ||||
|                     TRY(m_builder.try_append("0x")); | ||||
|                     TRY(m_builder.try_append("0x"sv)); | ||||
|             } | ||||
|         } | ||||
|         return {}; | ||||
|  | @ -587,8 +587,8 @@ ErrorOr<void> vformat(StringBuilder& builder, StringView fmtstr, TypeErasedForma | |||
| 
 | ||||
| void StandardFormatter::parse(TypeErasedFormatParams& params, FormatParser& parser) | ||||
| { | ||||
|     if (StringView { "<^>" }.contains(parser.peek(1))) { | ||||
|         VERIFY(!parser.next_is(is_any_of("{}"))); | ||||
|     if ("<^>"sv.contains(parser.peek(1))) { | ||||
|         VERIFY(!parser.next_is(is_any_of("{}"sv))); | ||||
|         m_fill = parser.consume(); | ||||
|     } | ||||
| 
 | ||||
|  | @ -788,7 +788,7 @@ ErrorOr<void> Formatter<bool>::format(FormatBuilder& builder, bool value) | |||
|         return builder.put_hexdump({ &value, sizeof(value) }, m_width.value_or(32), m_fill); | ||||
|     } else { | ||||
|         Formatter<StringView> formatter { *this }; | ||||
|         return formatter.format(builder, value ? "true" : "false"); | ||||
|         return formatter.format(builder, value ? "true"sv : "false"sv); | ||||
|     } | ||||
| } | ||||
| #ifndef KERNEL | ||||
|  |  | |||
							
								
								
									
										16
									
								
								AK/Format.h
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								AK/Format.h
									
										
									
									
									
								
							|  | @ -638,7 +638,7 @@ template<typename T, bool Supported = false> | |||
| struct __FormatIfSupported : Formatter<StringView> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, FormatIfSupported<T> const&) | ||||
|     { | ||||
|         return Formatter<StringView>::format(builder, "?"); | ||||
|         return Formatter<StringView>::format(builder, "?"sv); | ||||
|     } | ||||
| }; | ||||
| template<typename T> | ||||
|  | @ -673,15 +673,15 @@ struct Formatter<Error> : Formatter<FormatString> { | |||
|     { | ||||
| #if defined(__serenity__) && defined(KERNEL) | ||||
|         if (error.is_errno()) | ||||
|             return Formatter<FormatString>::format(builder, "Error(errno={})", error.code()); | ||||
|         return Formatter<FormatString>::format(builder, "Error({})", error.string_literal()); | ||||
|             return Formatter<FormatString>::format(builder, "Error(errno={})"sv, error.code()); | ||||
|         return Formatter<FormatString>::format(builder, "Error({})"sv, error.string_literal()); | ||||
| #else | ||||
|         if (error.is_syscall()) | ||||
|             return Formatter<FormatString>::format(builder, "{}: {} (errno={})", error.string_literal(), strerror(error.code()), error.code()); | ||||
|             return Formatter<FormatString>::format(builder, "{}: {} (errno={})"sv, error.string_literal(), strerror(error.code()), error.code()); | ||||
|         if (error.is_errno()) | ||||
|             return Formatter<FormatString>::format(builder, "{} (errno={})", strerror(error.code()), error.code()); | ||||
|             return Formatter<FormatString>::format(builder, "{} (errno={})"sv, strerror(error.code()), error.code()); | ||||
| 
 | ||||
|         return Formatter<FormatString>::format(builder, "{}", error.string_literal()); | ||||
|         return Formatter<FormatString>::format(builder, "{}"sv, error.string_literal()); | ||||
| #endif | ||||
|     } | ||||
| }; | ||||
|  | @ -691,8 +691,8 @@ struct Formatter<ErrorOr<T, ErrorType>> : Formatter<FormatString> { | |||
|     ErrorOr<void> format(FormatBuilder& builder, ErrorOr<T, ErrorType> const& error_or) | ||||
|     { | ||||
|         if (error_or.is_error()) | ||||
|             return Formatter<FormatString>::format(builder, "{}", error_or.error()); | ||||
|         return Formatter<FormatString>::format(builder, "{{{}}}", error_or.value()); | ||||
|             return Formatter<FormatString>::format(builder, "{}"sv, error_or.error()); | ||||
|         return Formatter<FormatString>::format(builder, "{{{}}}"sv, error_or.value()); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ public: | |||
|         return consume_specific(StringView { next, __builtin_strlen(next) }); | ||||
|     } | ||||
| 
 | ||||
|     constexpr char consume_escaped_character(char escape_char = '\\', StringView escape_map = "n\nr\rt\tb\bf\f") | ||||
|     constexpr char consume_escaped_character(char escape_char = '\\', StringView escape_map = "n\nr\rt\tb\bf\f"sv) | ||||
|     { | ||||
|         if (!consume_specific(escape_char)) | ||||
|             return consume(); | ||||
|  | @ -234,8 +234,8 @@ constexpr auto is_not_any_of(StringView values) | |||
|     return [values](auto c) { return !values.contains(c); }; | ||||
| } | ||||
| 
 | ||||
| constexpr auto is_path_separator = is_any_of("/\\"); | ||||
| constexpr auto is_quote = is_any_of("'\""); | ||||
| constexpr auto is_path_separator = is_any_of("/\\"sv); | ||||
| constexpr auto is_quote = is_any_of("'\""sv); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -193,7 +193,7 @@ inline void JsonValue::serialize(Builder& builder) const | |||
|         m_value.as_object->serialize(builder); | ||||
|         break; | ||||
|     case Type::Bool: | ||||
|         builder.append(m_value.as_bool ? "true" : "false"); | ||||
|         builder.append(m_value.as_bool ? "true"sv : "false"sv); | ||||
|         break; | ||||
| #if !defined(KERNEL) | ||||
|     case Type::Double: | ||||
|  | @ -213,7 +213,7 @@ inline void JsonValue::serialize(Builder& builder) const | |||
|         builder.appendff("{}", as_u64()); | ||||
|         break; | ||||
|     case Type::Null: | ||||
|         builder.append("null"); | ||||
|         builder.append("null"sv); | ||||
|         break; | ||||
|     default: | ||||
|         VERIFY_NOT_REACHED(); | ||||
|  |  | |||
|  | @ -103,9 +103,9 @@ public: | |||
|     { | ||||
|         TRY(begin_item(key)); | ||||
|         if constexpr (IsLegacyBuilder<Builder>) | ||||
|             TRY(m_builder.try_append(value ? "true" : "false")); | ||||
|             TRY(m_builder.try_append(value ? "true"sv : "false"sv)); | ||||
|         else | ||||
|             TRY(m_builder.append(value ? "true" : "false")); | ||||
|             TRY(m_builder.append(value ? "true"sv : "false"sv)); | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|  | @ -234,11 +234,11 @@ private: | |||
|         if constexpr (IsLegacyBuilder<Builder>) { | ||||
|             TRY(m_builder.try_append('"')); | ||||
|             TRY(m_builder.try_append_escaped_for_json(key)); | ||||
|             TRY(m_builder.try_append("\":")); | ||||
|             TRY(m_builder.try_append("\":"sv)); | ||||
|         } else { | ||||
|             TRY(m_builder.append('"')); | ||||
|             TRY(m_builder.append_escaped_for_json(key)); | ||||
|             TRY(m_builder.append("\":")); | ||||
|             TRY(m_builder.append("\":"sv)); | ||||
|         } | ||||
|         return {}; | ||||
|     } | ||||
|  |  | |||
|  | @ -34,12 +34,12 @@ JsonValue JsonPath::resolve(JsonValue const& top_root) const | |||
| String JsonPath::to_string() const | ||||
| { | ||||
|     StringBuilder builder; | ||||
|     builder.append("{ ."); | ||||
|     builder.append("{ ."sv); | ||||
|     for (auto const& el : *this) { | ||||
|         builder.append(" > "); | ||||
|         builder.append("sv > "sv); | ||||
|         builder.append(el.to_string()); | ||||
|     } | ||||
|     builder.append(" }"); | ||||
|     builder.append("sv }"sv); | ||||
|     return builder.to_string(); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ String LexicalPath::relative_path(StringView a_path, StringView a_prefix) | |||
| { | ||||
|     if (!a_path.starts_with('/') || !a_prefix.starts_with('/')) { | ||||
|         // FIXME: This should probably VERIFY or return an Optional<String>.
 | ||||
|         return {}; | ||||
|         return ""sv; | ||||
|     } | ||||
| 
 | ||||
|     if (a_path == a_prefix) | ||||
|  | @ -171,7 +171,7 @@ LexicalPath LexicalPath::prepend(StringView value) const | |||
| 
 | ||||
| LexicalPath LexicalPath::parent() const | ||||
| { | ||||
|     return append(".."); | ||||
|     return append(".."sv); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ template<> | |||
| struct AK::Formatter<AK::SourceLocation> : AK::Formatter<FormatString> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, AK::SourceLocation location) | ||||
|     { | ||||
|         return AK::Formatter<FormatString>::format(builder, "[\x1b[34m{}\x1b[0m @ {}:{}]", location.function_name(), location.filename(), location.line_number()); | ||||
|         return AK::Formatter<FormatString>::format(builder, "[\x1b[34m{}\x1b[0m @ {}:{}]"sv, location.function_name(), location.filename(), location.line_number()); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -346,13 +346,13 @@ String escape_html_entities(StringView html) | |||
|     StringBuilder builder; | ||||
|     for (size_t i = 0; i < html.length(); ++i) { | ||||
|         if (html[i] == '<') | ||||
|             builder.append("<"); | ||||
|             builder.append("<"sv); | ||||
|         else if (html[i] == '>') | ||||
|             builder.append(">"); | ||||
|             builder.append(">"sv); | ||||
|         else if (html[i] == '&') | ||||
|             builder.append("&"); | ||||
|             builder.append("&"sv); | ||||
|         else if (html[i] == '"') | ||||
|             builder.append("""); | ||||
|             builder.append("""sv); | ||||
|         else | ||||
|             builder.append(html[i]); | ||||
|     } | ||||
|  |  | |||
|  | @ -180,19 +180,19 @@ ErrorOr<void> StringBuilder::try_append_escaped_for_json(StringView string) | |||
|     for (auto ch : string) { | ||||
|         switch (ch) { | ||||
|         case '\b': | ||||
|             TRY(try_append("\\b")); | ||||
|             TRY(try_append("\\b"sv)); | ||||
|             break; | ||||
|         case '\n': | ||||
|             TRY(try_append("\\n")); | ||||
|             TRY(try_append("\\n"sv)); | ||||
|             break; | ||||
|         case '\t': | ||||
|             TRY(try_append("\\t")); | ||||
|             TRY(try_append("\\t"sv)); | ||||
|             break; | ||||
|         case '\"': | ||||
|             TRY(try_append("\\\"")); | ||||
|             TRY(try_append("\\\""sv)); | ||||
|             break; | ||||
|         case '\\': | ||||
|             TRY(try_append("\\\\")); | ||||
|             TRY(try_append("\\\\"sv)); | ||||
|             break; | ||||
|         default: | ||||
|             if (ch >= 0 && ch <= 0x1f) | ||||
|  |  | |||
|  | @ -329,7 +329,7 @@ StringView trim(StringView str, StringView characters, TrimMode mode) | |||
|     if (mode == TrimMode::Left || mode == TrimMode::Both) { | ||||
|         for (size_t i = 0; i < str.length(); ++i) { | ||||
|             if (substring_length == 0) | ||||
|                 return ""; | ||||
|                 return ""sv; | ||||
|             if (!characters.contains(str[i])) | ||||
|                 break; | ||||
|             ++substring_start; | ||||
|  | @ -340,7 +340,7 @@ StringView trim(StringView str, StringView characters, TrimMode mode) | |||
|     if (mode == TrimMode::Right || mode == TrimMode::Both) { | ||||
|         for (size_t i = str.length() - 1; i > 0; --i) { | ||||
|             if (substring_length == 0) | ||||
|                 return ""; | ||||
|                 return ""sv; | ||||
|             if (!characters.contains(str[i])) | ||||
|                 break; | ||||
|             --substring_length; | ||||
|  | @ -352,7 +352,7 @@ StringView trim(StringView str, StringView characters, TrimMode mode) | |||
| 
 | ||||
| StringView trim_whitespace(StringView str, TrimMode mode) | ||||
| { | ||||
|     return trim(str, " \n\t\v\f\r", mode); | ||||
|     return trim(str, " \n\t\v\f\r"sv, mode); | ||||
| } | ||||
| 
 | ||||
| Optional<size_t> find(StringView haystack, char needle, size_t start) | ||||
|  |  | |||
							
								
								
									
										10
									
								
								AK/URL.cpp
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								AK/URL.cpp
									
										
									
									
									
								
							|  | @ -221,7 +221,7 @@ String URL::serialize_data_url() const | |||
|     builder.append(':'); | ||||
|     builder.append(m_data_mime_type); | ||||
|     if (m_data_payload_is_base64) | ||||
|         builder.append(";base64"); | ||||
|         builder.append(";base64"sv); | ||||
|     builder.append(','); | ||||
|     // NOTE: The specification does not say anything about encoding this, but we should encode at least control and non-ASCII
 | ||||
|     //       characters (since this is also a valid representation of the same data URL).
 | ||||
|  | @ -239,7 +239,7 @@ String URL::serialize(ExcludeFragment exclude_fragment) const | |||
|     builder.append(':'); | ||||
| 
 | ||||
|     if (!m_host.is_null()) { | ||||
|         builder.append("//"); | ||||
|         builder.append("//"sv); | ||||
| 
 | ||||
|         if (includes_credentials()) { | ||||
|             builder.append(percent_encode(m_username, PercentEncodeSet::Userinfo)); | ||||
|  | @ -259,7 +259,7 @@ String URL::serialize(ExcludeFragment exclude_fragment) const | |||
|         builder.append(percent_encode(m_paths[0], PercentEncodeSet::Path)); | ||||
|     } else { | ||||
|         if (m_host.is_null() && m_paths.size() > 1 && m_paths[0].is_empty()) | ||||
|             builder.append("/."); | ||||
|             builder.append("/."sv); | ||||
|         for (auto& segment : m_paths) { | ||||
|             builder.append('/'); | ||||
|             builder.append(percent_encode(segment, PercentEncodeSet::Path)); | ||||
|  | @ -293,7 +293,7 @@ String URL::serialize_for_display() const | |||
|     builder.append(':'); | ||||
| 
 | ||||
|     if (!m_host.is_null()) { | ||||
|         builder.append("//"); | ||||
|         builder.append("//"sv); | ||||
|         builder.append(m_host); | ||||
|         if (m_port.has_value()) | ||||
|             builder.appendff(":{}", *m_port); | ||||
|  | @ -303,7 +303,7 @@ String URL::serialize_for_display() const | |||
|         builder.append(percent_encode(m_paths[0], PercentEncodeSet::Path)); | ||||
|     } else { | ||||
|         if (m_host.is_null() && m_paths.size() > 1 && m_paths[0].is_empty()) | ||||
|             builder.append("/."); | ||||
|             builder.append("/."sv); | ||||
|         for (auto& segment : m_paths) { | ||||
|             builder.append('/'); | ||||
|             builder.append(percent_encode(segment, PercentEncodeSet::Path)); | ||||
|  |  | |||
|  | @ -155,18 +155,18 @@ static String percent_encode_after_encoding(StringView input, URL::PercentEncode | |||
| Optional<URL> URLParser::parse_data_url(StringView raw_input) | ||||
| { | ||||
|     dbgln_if(URL_PARSER_DEBUG, "URLParser::parse_data_url: Parsing '{}'.", raw_input); | ||||
|     VERIFY(raw_input.starts_with("data:")); | ||||
|     VERIFY(raw_input.starts_with("data:"sv)); | ||||
|     auto input = raw_input.substring_view(5); | ||||
|     auto comma_offset = input.find(','); | ||||
|     if (!comma_offset.has_value()) | ||||
|         return {}; | ||||
|     auto mime_type = StringUtils::trim(input.substring_view(0, comma_offset.value()), "\t\n\f\r ", TrimMode::Both); | ||||
|     auto mime_type = StringUtils::trim(input.substring_view(0, comma_offset.value()), "\t\n\f\r "sv, TrimMode::Both); | ||||
|     auto encoded_body = input.substring_view(comma_offset.value() + 1); | ||||
|     auto body = URL::percent_decode(encoded_body); | ||||
|     bool is_base64_encoded = false; | ||||
|     if (mime_type.ends_with("base64", CaseSensitivity::CaseInsensitive)) { | ||||
|     if (mime_type.ends_with("base64"sv, CaseSensitivity::CaseInsensitive)) { | ||||
|         auto substring_view = mime_type.substring_view(0, mime_type.length() - 6); | ||||
|         auto trimmed_substring_view = StringUtils::trim(substring_view, " ", TrimMode::Right); | ||||
|         auto trimmed_substring_view = StringUtils::trim(substring_view, " "sv, TrimMode::Right); | ||||
|         if (trimmed_substring_view.ends_with(';')) { | ||||
|             is_base64_encoded = true; | ||||
|             mime_type = trimmed_substring_view.substring_view(0, trimmed_substring_view.length() - 1); | ||||
|  | @ -174,14 +174,14 @@ Optional<URL> URLParser::parse_data_url(StringView raw_input) | |||
|     } | ||||
| 
 | ||||
|     StringBuilder builder; | ||||
|     if (mime_type.starts_with(";") || mime_type.is_empty()) { | ||||
|         builder.append("text/plain"); | ||||
|     if (mime_type.starts_with(";"sv) || mime_type.is_empty()) { | ||||
|         builder.append("text/plain"sv); | ||||
|         builder.append(mime_type); | ||||
|         mime_type = builder.string_view(); | ||||
|     } | ||||
| 
 | ||||
|     // FIXME: Parse the MIME type's components according to https://mimesniff.spec.whatwg.org/#parse-a-mime-type
 | ||||
|     URL url { StringUtils::trim(mime_type, "\n\r\t ", TrimMode::Both), move(body), is_base64_encoded }; | ||||
|     URL url { StringUtils::trim(mime_type, "\n\r\t "sv, TrimMode::Both), move(body), is_base64_encoded }; | ||||
|     dbgln_if(URL_PARSER_DEBUG, "URLParser::parse_data_url: Parsed data URL to be '{}'.", url.serialize()); | ||||
|     return url; | ||||
| } | ||||
|  | @ -202,7 +202,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|     if (raw_input.is_empty()) | ||||
|         return {}; | ||||
| 
 | ||||
|     if (raw_input.starts_with("data:")) { | ||||
|     if (raw_input.starts_with("data:"sv)) { | ||||
|         auto maybe_url = parse_data_url(raw_input); | ||||
|         if (!maybe_url.has_value()) | ||||
|             return {}; | ||||
|  | @ -243,9 +243,9 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|     String processed_input = raw_input.substring_view(start_index, end_index - start_index); | ||||
| 
 | ||||
|     // NOTE: This replaces all tab and newline characters with nothing.
 | ||||
|     if (processed_input.contains("\t") || processed_input.contains("\n")) { | ||||
|     if (processed_input.contains("\t"sv) || processed_input.contains("\n"sv)) { | ||||
|         report_validation_error(); | ||||
|         processed_input = processed_input.replace("\t", "", ReplaceMode::All).replace("\n", "", ReplaceMode::All); | ||||
|         processed_input = processed_input.replace("\t"sv, ""sv, ReplaceMode::All).replace("\n"sv, ""sv, ReplaceMode::All); | ||||
|     } | ||||
| 
 | ||||
|     State state = state_override.value_or(State::SchemeStart); | ||||
|  | @ -295,7 +295,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|                 url->m_scheme = buffer.to_string(); | ||||
|                 buffer.clear(); | ||||
|                 if (url->scheme() == "file") { | ||||
|                     if (!get_remaining().starts_with("//")) { | ||||
|                     if (!get_remaining().starts_with("//"sv)) { | ||||
|                         report_validation_error(); | ||||
|                     } | ||||
|                     state = State::File; | ||||
|  | @ -304,7 +304,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|                         state = State::SpecialRelativeOrAuthority; | ||||
|                     else | ||||
|                         state = State::SpecialAuthoritySlashes; | ||||
|                 } else if (get_remaining().starts_with("/")) { | ||||
|                 } else if (get_remaining().starts_with("/"sv)) { | ||||
|                     state = State::PathOrAuthority; | ||||
|                     ++iterator; | ||||
|                 } else { | ||||
|  | @ -339,7 +339,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|             } | ||||
|             break; | ||||
|         case State::SpecialRelativeOrAuthority: | ||||
|             if (code_point == '/' && get_remaining().starts_with("/")) { | ||||
|             if (code_point == '/' && get_remaining().starts_with("/"sv)) { | ||||
|                 state = State::SpecialAuthorityIgnoreSlashes; | ||||
|                 ++iterator; | ||||
|             } else { | ||||
|  | @ -403,7 +403,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|             } | ||||
|             break; | ||||
|         case State::SpecialAuthoritySlashes: | ||||
|             if (code_point == '/' && get_remaining().starts_with("/")) { | ||||
|             if (code_point == '/' && get_remaining().starts_with("/"sv)) { | ||||
|                 state = State::SpecialAuthorityIgnoreSlashes; | ||||
|                 ++iterator; | ||||
|             } else { | ||||
|  | @ -426,7 +426,7 @@ URL URLParser::parse(StringView raw_input, URL const* base_url, Optional<URL> ur | |||
|                 if (at_sign_seen) { | ||||
|                     auto content = buffer.to_string(); | ||||
|                     buffer.clear(); | ||||
|                     buffer.append("%40"); | ||||
|                     buffer.append("%40"sv); | ||||
|                     buffer.append(content); | ||||
|                 } | ||||
|                 at_sign_seen = true; | ||||
|  |  | |||
|  | @ -148,6 +148,6 @@ template<> | |||
| struct AK::Formatter<IOAddress> : AK::Formatter<FormatString> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, IOAddress value) | ||||
|     { | ||||
|         return Formatter<FormatString>::format(builder, "IO {:x}", value.get()); | ||||
|         return Formatter<FormatString>::format(builder, "IO {:x}"sv, value.get()); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -42,8 +42,8 @@ public: | |||
| 
 | ||||
|     void set_apic_id(u32 apic_id) { m_apic_id = apic_id; } | ||||
| 
 | ||||
|     static constexpr StringView s_amd_vendor_id = "AuthenticAMD"; | ||||
|     static constexpr StringView s_intel_vendor_id = "GenuineIntel"; | ||||
|     static constexpr StringView s_amd_vendor_id = "AuthenticAMD"sv; | ||||
|     static constexpr StringView s_intel_vendor_id = "GenuineIntel"sv; | ||||
| 
 | ||||
| private: | ||||
|     static NonnullOwnPtr<KString> build_vendor_id_string(); | ||||
|  |  | |||
|  | @ -126,7 +126,7 @@ UNMAP_AFTER_INIT PhysicalAddress InterruptManagement::search_for_madt() | |||
|     auto rsdp = ACPI::StaticParsing::find_rsdp(); | ||||
|     if (!rsdp.has_value()) | ||||
|         return {}; | ||||
|     auto apic = ACPI::StaticParsing::find_table(rsdp.value(), "APIC"); | ||||
|     auto apic = ACPI::StaticParsing::find_table(rsdp.value(), "APIC"sv); | ||||
|     if (!apic.has_value()) | ||||
|         return {}; | ||||
|     return apic.value(); | ||||
|  |  | |||
|  | @ -74,7 +74,7 @@ UNMAP_AFTER_INIT bool Access::find_and_register_pci_host_bridges_from_acpi_mcfg_ | |||
|         dbgln("Failed to round up length of {} to pages", length); | ||||
|         return false; | ||||
|     } | ||||
|     auto mcfg_region_or_error = MM.allocate_kernel_region(mcfg_table.page_base(), region_size_or_error.value(), "PCI Parsing MCFG", Memory::Region::Access::ReadWrite); | ||||
|     auto mcfg_region_or_error = MM.allocate_kernel_region(mcfg_table.page_base(), region_size_or_error.value(), "PCI Parsing MCFG"sv, Memory::Region::Access::ReadWrite); | ||||
|     if (mcfg_region_or_error.is_error()) | ||||
|         return false; | ||||
|     auto& mcfg = *(ACPI::Structures::MCFG*)mcfg_region_or_error.value()->vaddr().offset(mcfg_table.offset_in_page()).as_ptr(); | ||||
|  |  | |||
|  | @ -69,7 +69,7 @@ void MemoryBackedHostBridge::map_bus_region(BusNumber bus) | |||
|     if (m_mapped_bus == bus && m_mapped_bus_region) | ||||
|         return; | ||||
|     auto bus_base_address = determine_memory_mapped_bus_base_address(bus); | ||||
|     auto region_or_error = MM.allocate_kernel_region(bus_base_address, memory_range_per_bus, "PCI ECAM", Memory::Region::Access::ReadWrite); | ||||
|     auto region_or_error = MM.allocate_kernel_region(bus_base_address, memory_range_per_bus, "PCI ECAM"sv, Memory::Region::Access::ReadWrite); | ||||
|     // FIXME: Find a way to propagate error from here.
 | ||||
|     if (region_or_error.is_error()) | ||||
|         VERIFY_NOT_REACHED(); | ||||
|  |  | |||
|  | @ -300,7 +300,7 @@ struct AK::Formatter<Kernel::PCI::Address> : Formatter<FormatString> { | |||
|     { | ||||
|         return Formatter<FormatString>::format( | ||||
|             builder, | ||||
|             "PCI [{:04x}:{:02x}:{:02x}:{:02x}]", value.domain(), value.bus(), value.device(), value.function()); | ||||
|             "PCI [{:04x}:{:02x}:{:02x}:{:02x}]"sv, value.domain(), value.bus(), value.device(), value.function()); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
|  | @ -310,6 +310,6 @@ struct AK::Formatter<Kernel::PCI::HardwareID> : Formatter<FormatString> { | |||
|     { | ||||
|         return Formatter<FormatString>::format( | ||||
|             builder, | ||||
|             "PCI::HardwareID [{:04x}:{:04x}]", value.vendor_id, value.device_id); | ||||
|             "PCI::HardwareID [{:04x}:{:04x}]"sv, value.vendor_id, value.device_id); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ static bool test_pci_io(); | |||
| UNMAP_AFTER_INIT static PCIAccessLevel detect_optimal_access_type() | ||||
| { | ||||
|     auto boot_determined = kernel_command_line().pci_access_level(); | ||||
|     if (!ACPI::is_enabled() || !ACPI::Parser::the()->find_table("MCFG").has_value()) | ||||
|     if (!ACPI::is_enabled() || !ACPI::Parser::the()->find_table("MCFG"sv).has_value()) | ||||
|         return PCIAccessLevel::IOAddressing; | ||||
| 
 | ||||
|     if (boot_determined != PCIAccessLevel::IOAddressing) | ||||
|  | @ -44,7 +44,7 @@ UNMAP_AFTER_INIT void initialize() | |||
|         return; | ||||
|     switch (detect_optimal_access_type()) { | ||||
|     case PCIAccessLevel::MemoryAddressing: { | ||||
|         auto mcfg = ACPI::Parser::the()->find_table("MCFG"); | ||||
|         auto mcfg = ACPI::Parser::the()->find_table("MCFG"sv); | ||||
|         VERIFY(mcfg.has_value()); | ||||
|         auto success = Access::initialize_for_multiple_pci_domains(mcfg.value()); | ||||
|         VERIFY(success); | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ ErrorOr<void> UHCIController::reset() | |||
|     } | ||||
| 
 | ||||
|     // Let's allocate the physical page for the Frame List (which is 4KiB aligned)
 | ||||
|     m_framelist = TRY(MM.allocate_dma_buffer_page("UHCI Framelist", Memory::Region::Access::Write)); | ||||
|     m_framelist = TRY(MM.allocate_dma_buffer_page("UHCI Framelist"sv, Memory::Region::Access::Write)); | ||||
|     dbgln("UHCI: Allocated framelist at physical address {}", m_framelist->physical_page(0)->paddr()); | ||||
|     dbgln("UHCI: Framelist is at virtual address {}", m_framelist->vaddr()); | ||||
|     write_sofmod(64); // 1mS frame time
 | ||||
|  | @ -139,7 +139,7 @@ UNMAP_AFTER_INIT ErrorOr<void> UHCIController::create_structures() | |||
|     // Now the Transfer Descriptor pool
 | ||||
|     m_transfer_descriptor_pool = TRY(UHCIDescriptorPool<TransferDescriptor>::try_create("Transfer Descriptor Pool"sv)); | ||||
| 
 | ||||
|     m_isochronous_transfer_pool = TRY(MM.allocate_dma_buffer_page("UHCI Isochronous Descriptor Pool", Memory::Region::Access::ReadWrite)); | ||||
|     m_isochronous_transfer_pool = TRY(MM.allocate_dma_buffer_page("UHCI Isochronous Descriptor Pool"sv, Memory::Region::Access::ReadWrite)); | ||||
| 
 | ||||
|     // Set up the Isochronous Transfer Descriptor list
 | ||||
|     m_iso_td_list.resize(UHCI_NUMBER_OF_ISOCHRONOUS_TDS); | ||||
|  | @ -509,7 +509,7 @@ size_t UHCIController::poll_transfer_queue(QueueHead& transfer_queue) | |||
| ErrorOr<void> UHCIController::spawn_port_process() | ||||
| { | ||||
|     RefPtr<Thread> usb_hotplug_thread; | ||||
|     (void)Process::create_kernel_process(usb_hotplug_thread, TRY(KString::try_create("UHCI Hot Plug Task")), [&] { | ||||
|     (void)Process::create_kernel_process(usb_hotplug_thread, TRY(KString::try_create("UHCI Hot Plug Task"sv)), [&] { | ||||
|         for (;;) { | ||||
|             if (m_root_hub) | ||||
|                 m_root_hub->check_for_port_updates(); | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ class UHCIDescriptorPool { | |||
| public: | ||||
|     static ErrorOr<NonnullOwnPtr<UHCIDescriptorPool<T>>> try_create(StringView name) | ||||
|     { | ||||
|         auto pool_memory_block = TRY(MM.allocate_kernel_region(PAGE_SIZE, "UHCI Descriptor Pool", Memory::Region::Access::ReadWrite)); | ||||
|         auto pool_memory_block = TRY(MM.allocate_kernel_region(PAGE_SIZE, "UHCI Descriptor Pool"sv, Memory::Region::Access::ReadWrite)); | ||||
|         return adopt_nonnull_own_or_enomem(new (nothrow) UHCIDescriptorPool(move(pool_memory_block), name)); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ namespace Kernel::USB { | |||
| 
 | ||||
| ErrorOr<NonnullOwnPtr<Pipe>> Pipe::try_create_pipe(USBController const& controller, Type type, Direction direction, u8 endpoint_address, u16 max_packet_size, i8 device_address, u8 poll_interval) | ||||
| { | ||||
|     auto dma_region = TRY(MM.allocate_kernel_region(PAGE_SIZE, "USB device DMA buffer", Memory::Region::Access::ReadWrite)); | ||||
|     auto dma_region = TRY(MM.allocate_kernel_region(PAGE_SIZE, "USB device DMA buffer"sv, Memory::Region::Access::ReadWrite)); | ||||
|     return adopt_nonnull_own_or_enomem(new (nothrow) Pipe(controller, type, direction, endpoint_address, max_packet_size, poll_interval, device_address, move(dma_region))); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -79,7 +79,7 @@ private: | |||
|     u8 m_poll_interval { 0 };     // Polling interval (in frames)
 | ||||
|     bool m_data_toggle { false }; // Data toggle for stuffing bit
 | ||||
| 
 | ||||
|     Mutex m_dma_buffer_lock { "USB pipe mutex" }; | ||||
|     Mutex m_dma_buffer_lock { "USB pipe mutex"sv }; | ||||
| 
 | ||||
|     NonnullOwnPtr<Memory::Region> m_dma_buffer; | ||||
| }; | ||||
|  |  | |||
|  | @ -136,7 +136,7 @@ UNMAP_AFTER_INIT void Device::initialize() | |||
|                     dbgln_if(VIRTIO_DEBUG, "{}: Failed to round up size={} to pages", m_class_name, mapping.size); | ||||
|                     continue; | ||||
|                 } | ||||
|                 auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR(pci_address(), cfg.bar))), region_size_or_error.value(), "VirtIO MMIO", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|                 auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR(pci_address(), cfg.bar))), region_size_or_error.value(), "VirtIO MMIO"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|                 if (region_or_error.is_error()) { | ||||
|                     dbgln_if(VIRTIO_DEBUG, "{}: Failed to map bar {} - (size={}) {}", m_class_name, cfg.bar, mapping.size, region_or_error.error()); | ||||
|                 } else { | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ UNMAP_AFTER_INIT void RNG::initialize() | |||
|     } | ||||
|     if (success) { | ||||
|         finish_init(); | ||||
|         m_entropy_buffer = MM.allocate_contiguous_kernel_region(PAGE_SIZE, "VirtIO::RNG", Memory::Region::Access::ReadWrite).release_value(); | ||||
|         m_entropy_buffer = MM.allocate_contiguous_kernel_region(PAGE_SIZE, "VirtIO::RNG"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
|         if (m_entropy_buffer) { | ||||
|             memset(m_entropy_buffer->vaddr().as_ptr(), 0, m_entropy_buffer->size()); | ||||
|             request_entropy_from_host(); | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ | |||
| namespace Kernel { | ||||
| 
 | ||||
| static char s_cmd_line[1024]; | ||||
| static constexpr StringView s_embedded_cmd_line = ""; | ||||
| static constexpr StringView s_embedded_cmd_line = ""sv; | ||||
| static CommandLine* s_the; | ||||
| 
 | ||||
| UNMAP_AFTER_INIT void CommandLine::early_initialize(char const* cmd_line) | ||||
|  |  | |||
|  | @ -67,7 +67,7 @@ ErrorOr<Memory::Region*> MemoryDevice::mmap(Process& process, OpenFileDescriptio | |||
|         range, | ||||
|         move(vmobject), | ||||
|         0, | ||||
|         "Mapped Physical Memory", | ||||
|         "Mapped Physical Memory"sv, | ||||
|         prot, | ||||
|         shared); | ||||
| } | ||||
|  |  | |||
|  | @ -31,10 +31,10 @@ private: | |||
|     }; | ||||
| 
 | ||||
|     static constexpr BoardDefinition board_definitions[4] = { | ||||
|         { { PCI::VendorID::WCH, 0x3253 }, "WCH CH382 2S", 2, 0, 0xC0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0002 }, "QEMU PCI 16550A", 1, 0, 0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0003 }, "QEMU PCI Dual-port 16550A", 2, 0, 0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0004 }, "QEMU PCI Quad-port 16550A", 4, 0, 0, 8, SerialDevice::Baud::Baud115200 } | ||||
|         { { PCI::VendorID::WCH, 0x3253 }, "WCH CH382 2S"sv, 2, 0, 0xC0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0002 }, "QEMU PCI 16550A"sv, 1, 0, 0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0003 }, "QEMU PCI Dual-port 16550A"sv, 2, 0, 0, 8, SerialDevice::Baud::Baud115200 }, | ||||
|         { { PCI::VendorID::RedHat, 0x0004 }, "QEMU PCI Quad-port 16550A"sv, 4, 0, 0, 8, SerialDevice::Baud::Baud115200 } | ||||
|     }; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -72,7 +72,7 @@ private: | |||
|     size_t m_read_buffer_index { 0 }; | ||||
|     size_t m_space_for_writing { 0 }; | ||||
|     bool m_empty { true }; | ||||
|     mutable Mutex m_lock { "DoubleBuffer" }; | ||||
|     mutable Mutex m_lock { "DoubleBuffer"sv }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -103,8 +103,8 @@ ErrorOr<void> DevPtsFSInode::traverse_as_directory(Function<ErrorOr<void>(FileSy | |||
|     if (identifier().index() > 1) | ||||
|         return ENOTDIR; | ||||
| 
 | ||||
|     TRY(callback({ ".", identifier(), 0 })); | ||||
|     TRY(callback({ "..", identifier(), 0 })); | ||||
|     TRY(callback({ "."sv, identifier(), 0 })); | ||||
|     TRY(callback({ ".."sv, identifier(), 0 })); | ||||
| 
 | ||||
|     return SlavePTY::all_instances().with([&](auto& list) -> ErrorOr<void> { | ||||
|         StringBuilder builder; | ||||
|  |  | |||
|  | @ -205,8 +205,8 @@ DevTmpFSDirectoryInode::~DevTmpFSDirectoryInode() = default; | |||
| ErrorOr<void> DevTmpFSDirectoryInode::traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     MutexLocker locker(m_inode_lock); | ||||
|     TRY(callback({ ".", identifier(), 0 })); | ||||
|     TRY(callback({ "..", identifier(), 0 })); | ||||
|     TRY(callback({ "."sv, identifier(), 0 })); | ||||
|     TRY(callback({ ".."sv, identifier(), 0 })); | ||||
|     for (auto& node : m_nodes) { | ||||
|         InodeIdentifier identifier = { fsid(), node.index() }; | ||||
|         TRY(callback({ node.name(), identifier, 0 })); | ||||
|  |  | |||
|  | @ -153,7 +153,7 @@ class DevTmpFSRootDirectoryInode final : public DevTmpFSDirectoryInode { | |||
| 
 | ||||
| public: | ||||
|     virtual ~DevTmpFSRootDirectoryInode() override; | ||||
|     virtual StringView name() const override { return "."; } | ||||
|     virtual StringView name() const override { return "."sv; } | ||||
| 
 | ||||
| private: | ||||
|     // ^DevTmpFSInode
 | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ ErrorOr<NonnullRefPtr<OpenFileDescription>> FIFO::open_direction_blocking(FIFO:: | |||
| 
 | ||||
|         if (m_writers == 0) { | ||||
|             locker.unlock(); | ||||
|             m_write_open_queue.wait_forever("FIFO"); | ||||
|             m_write_open_queue.wait_forever("FIFO"sv); | ||||
|             locker.lock(); | ||||
|         } | ||||
|     } | ||||
|  | @ -51,7 +51,7 @@ ErrorOr<NonnullRefPtr<OpenFileDescription>> FIFO::open_direction_blocking(FIFO:: | |||
| 
 | ||||
|         if (m_readers == 0) { | ||||
|             locker.unlock(); | ||||
|             m_read_open_queue.wait_forever("FIFO"); | ||||
|             m_read_open_queue.wait_forever("FIFO"sv); | ||||
|             locker.lock(); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -67,7 +67,7 @@ protected: | |||
|     void set_block_size(u64 size) { m_block_size = size; } | ||||
|     void set_fragment_size(size_t size) { m_fragment_size = size; } | ||||
| 
 | ||||
|     mutable Mutex m_lock { "FS" }; | ||||
|     mutable Mutex m_lock { "FS"sv }; | ||||
| 
 | ||||
| private: | ||||
|     FileSystemID m_fsid; | ||||
|  |  | |||
|  | @ -239,7 +239,7 @@ ErrorOr<void> ISO9660FS::parse_volume_set() | |||
|         } | ||||
| 
 | ||||
|         auto const* header = reinterpret_cast<ISO::VolumeDescriptorHeader const*>(block->data()); | ||||
|         if (StringView { header->identifier, 5 } != "CD001") { | ||||
|         if (StringView { header->identifier, 5 } != "CD001"sv) { | ||||
|             dbgln_if(ISO9660_DEBUG, "Header magic at volume descriptor {} is not valid", current_block_index - first_data_area_block); | ||||
|             return EIO; | ||||
|         } | ||||
|  |  | |||
|  | @ -109,7 +109,7 @@ protected: | |||
|     void did_modify_contents(); | ||||
|     void did_delete_self(); | ||||
| 
 | ||||
|     mutable Mutex m_inode_lock { "Inode" }; | ||||
|     mutable Mutex m_inode_lock { "Inode"sv }; | ||||
| 
 | ||||
| private: | ||||
|     FileSystem& m_file_system; | ||||
|  |  | |||
|  | @ -56,6 +56,6 @@ template<> | |||
| struct AK::Formatter<Kernel::InodeIdentifier> : AK::Formatter<FormatString> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, Kernel::InodeIdentifier value) | ||||
|     { | ||||
|         return AK::Formatter<FormatString>::format(builder, "{}:{}", value.fsid(), value.index()); | ||||
|         return AK::Formatter<FormatString>::format(builder, "{}:{}"sv, value.fsid(), value.index()); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -201,7 +201,7 @@ ErrorOr<void> Plan9FS::initialize() | |||
|     ensure_thread(); | ||||
| 
 | ||||
|     Message version_message { *this, Message::Type::Tversion }; | ||||
|     version_message << (u32)m_max_message_size << "9P2000.L"; | ||||
|     version_message << (u32)m_max_message_size << "9P2000.L"sv; | ||||
| 
 | ||||
|     TRY(post_message_and_wait_for_a_reply(version_message)); | ||||
| 
 | ||||
|  | @ -218,8 +218,8 @@ ErrorOr<void> Plan9FS::initialize() | |||
|     Message attach_message { *this, Message::Type::Tattach }; | ||||
|     // FIXME: This needs a user name and an "export" name; but how do we get them?
 | ||||
|     // Perhaps initialize() should accept a string of FS-specific options...
 | ||||
|     attach_message << root_fid << (u32)-1 << "sergey" | ||||
|                    << "/"; | ||||
|     attach_message << root_fid << (u32)-1 << "sergey"sv | ||||
|                    << "/"sv; | ||||
|     if (m_remote_protocol_version >= ProtocolVersion::v9P2000u) | ||||
|         attach_message << (u32)-1; | ||||
| 
 | ||||
|  | @ -653,7 +653,7 @@ void Plan9FS::ensure_thread() | |||
| { | ||||
|     SpinlockLocker lock(m_thread_lock); | ||||
|     if (!m_thread_running.exchange(true, AK::MemoryOrder::memory_order_acq_rel)) { | ||||
|         auto process_name = KString::try_create("Plan9FS"); | ||||
|         auto process_name = KString::try_create("Plan9FS"sv); | ||||
|         if (process_name.is_error()) | ||||
|             TODO(); | ||||
|         (void)Process::create_kernel_process(m_thread, process_name.release_value(), [&]() { | ||||
|  |  | |||
|  | @ -135,7 +135,7 @@ private: | |||
|     ProtocolVersion m_remote_protocol_version { ProtocolVersion::v9P2000 }; | ||||
|     size_t m_max_message_size { 4 * KiB }; | ||||
| 
 | ||||
|     Mutex m_send_lock { "Plan9FS send" }; | ||||
|     Mutex m_send_lock { "Plan9FS send"sv }; | ||||
|     Plan9FSBlockerSet m_completion_blocker; | ||||
|     HashMap<u16, NonnullRefPtr<ReceiveCompletion>> m_completions; | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,8 +35,8 @@ ErrorOr<void> SysFSDirectory::traverse_as_directory(FileSystemID fsid, Function< | |||
| { | ||||
|     MutexLocker locker(SysFSComponentRegistry::the().get_lock()); | ||||
|     VERIFY(m_parent_directory); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_parent_directory->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_parent_directory->component_index() }, 0 })); | ||||
| 
 | ||||
|     for (auto& component : m_components) { | ||||
|         InodeIdentifier identifier = { fsid, component.component_index() }; | ||||
|  |  | |||
|  | @ -20,8 +20,8 @@ NonnullRefPtr<SysFSRootDirectory> SysFSRootDirectory::create() | |||
| ErrorOr<void> SysFSRootDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     MutexLocker locker(SysFSComponentRegistry::the().get_lock()); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, 0 }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, 0 }, 0 })); | ||||
| 
 | ||||
|     for (auto const& component : m_components) { | ||||
|         InodeIdentifier identifier = { fsid, component.component_index() }; | ||||
|  |  | |||
|  | @ -17,8 +17,8 @@ ErrorOr<void> SysFSUSBBusDirectory::traverse_as_directory(FileSystemID fsid, Fun | |||
|     SpinlockLocker lock(m_lock); | ||||
|     // Note: if the parent directory is null, it means something bad happened as this should not happen for the USB directory.
 | ||||
|     VERIFY(m_parent_directory); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_parent_directory->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_parent_directory->component_index() }, 0 })); | ||||
| 
 | ||||
|     for (auto const& device_node : m_device_nodes) { | ||||
|         InodeIdentifier identifier = { fsid, device_node.component_index() }; | ||||
|  |  | |||
|  | @ -26,56 +26,56 @@ ErrorOr<void> SysFSUSBDeviceInformation::try_generate(KBufferBuilder& builder) | |||
|     auto array = TRY(JsonArraySerializer<>::try_create(builder)); | ||||
| 
 | ||||
|     auto obj = TRY(array.add_object()); | ||||
|     TRY(obj.add("device_address", m_device->address())); | ||||
|     TRY(obj.add("usb_spec_compliance_bcd", m_device->device_descriptor().usb_spec_compliance_bcd)); | ||||
|     TRY(obj.add("device_class", m_device->device_descriptor().device_class)); | ||||
|     TRY(obj.add("device_sub_class", m_device->device_descriptor().device_sub_class)); | ||||
|     TRY(obj.add("device_protocol", m_device->device_descriptor().device_protocol)); | ||||
|     TRY(obj.add("max_packet_size", m_device->device_descriptor().max_packet_size)); | ||||
|     TRY(obj.add("vendor_id", m_device->device_descriptor().vendor_id)); | ||||
|     TRY(obj.add("product_id", m_device->device_descriptor().product_id)); | ||||
|     TRY(obj.add("device_release_bcd", m_device->device_descriptor().device_release_bcd)); | ||||
|     TRY(obj.add("manufacturer_id_descriptor_index", m_device->device_descriptor().manufacturer_id_descriptor_index)); | ||||
|     TRY(obj.add("product_string_descriptor_index", m_device->device_descriptor().product_string_descriptor_index)); | ||||
|     TRY(obj.add("serial_number_descriptor_index", m_device->device_descriptor().serial_number_descriptor_index)); | ||||
|     TRY(obj.add("num_configurations", m_device->device_descriptor().num_configurations)); | ||||
|     TRY(obj.add("length", m_device->device_descriptor().descriptor_header.length)); | ||||
|     TRY(obj.add("descriptor_type", m_device->device_descriptor().descriptor_header.descriptor_type)); | ||||
|     TRY(obj.add("device_address"sv, m_device->address())); | ||||
|     TRY(obj.add("usb_spec_compliance_bcd"sv, m_device->device_descriptor().usb_spec_compliance_bcd)); | ||||
|     TRY(obj.add("device_class"sv, m_device->device_descriptor().device_class)); | ||||
|     TRY(obj.add("device_sub_class"sv, m_device->device_descriptor().device_sub_class)); | ||||
|     TRY(obj.add("device_protocol"sv, m_device->device_descriptor().device_protocol)); | ||||
|     TRY(obj.add("max_packet_size"sv, m_device->device_descriptor().max_packet_size)); | ||||
|     TRY(obj.add("vendor_id"sv, m_device->device_descriptor().vendor_id)); | ||||
|     TRY(obj.add("product_id"sv, m_device->device_descriptor().product_id)); | ||||
|     TRY(obj.add("device_release_bcd"sv, m_device->device_descriptor().device_release_bcd)); | ||||
|     TRY(obj.add("manufacturer_id_descriptor_index"sv, m_device->device_descriptor().manufacturer_id_descriptor_index)); | ||||
|     TRY(obj.add("product_string_descriptor_index"sv, m_device->device_descriptor().product_string_descriptor_index)); | ||||
|     TRY(obj.add("serial_number_descriptor_index"sv, m_device->device_descriptor().serial_number_descriptor_index)); | ||||
|     TRY(obj.add("num_configurations"sv, m_device->device_descriptor().num_configurations)); | ||||
|     TRY(obj.add("length"sv, m_device->device_descriptor().descriptor_header.length)); | ||||
|     TRY(obj.add("descriptor_type"sv, m_device->device_descriptor().descriptor_header.descriptor_type)); | ||||
| 
 | ||||
|     auto configuration_array = TRY(obj.add_array("configurations")); | ||||
|     auto configuration_array = TRY(obj.add_array("configurations"sv)); | ||||
|     for (auto const& configuration : m_device->configurations()) { | ||||
|         auto configuration_object = TRY(configuration_array.add_object()); | ||||
|         auto const& configuration_descriptor = configuration.descriptor(); | ||||
|         TRY(configuration_object.add("length", configuration_descriptor.descriptor_header.length)); | ||||
|         TRY(configuration_object.add("descriptor_type", configuration_descriptor.descriptor_header.descriptor_type)); | ||||
|         TRY(configuration_object.add("total_length", configuration_descriptor.total_length)); | ||||
|         TRY(configuration_object.add("number_of_interfaces", configuration_descriptor.number_of_interfaces)); | ||||
|         TRY(configuration_object.add("attributes_bitmap", configuration_descriptor.attributes_bitmap)); | ||||
|         TRY(configuration_object.add("max_power", configuration_descriptor.max_power_in_ma)); | ||||
|         TRY(configuration_object.add("length"sv, configuration_descriptor.descriptor_header.length)); | ||||
|         TRY(configuration_object.add("descriptor_type"sv, configuration_descriptor.descriptor_header.descriptor_type)); | ||||
|         TRY(configuration_object.add("total_length"sv, configuration_descriptor.total_length)); | ||||
|         TRY(configuration_object.add("number_of_interfaces"sv, configuration_descriptor.number_of_interfaces)); | ||||
|         TRY(configuration_object.add("attributes_bitmap"sv, configuration_descriptor.attributes_bitmap)); | ||||
|         TRY(configuration_object.add("max_power"sv, configuration_descriptor.max_power_in_ma)); | ||||
| 
 | ||||
|         auto interface_array = TRY(configuration_object.add_array("interfaces")); | ||||
|         auto interface_array = TRY(configuration_object.add_array("interfaces"sv)); | ||||
|         for (auto const& interface : configuration.interfaces()) { | ||||
|             auto interface_object = TRY(interface_array.add_object()); | ||||
|             auto const& interface_descriptor = interface.descriptor(); | ||||
|             TRY(interface_object.add("length", interface_descriptor.descriptor_header.length)); | ||||
|             TRY(interface_object.add("descriptor_type", interface_descriptor.descriptor_header.descriptor_type)); | ||||
|             TRY(interface_object.add("interface_number", interface_descriptor.interface_id)); | ||||
|             TRY(interface_object.add("alternate_setting", interface_descriptor.alternate_setting)); | ||||
|             TRY(interface_object.add("num_endpoints", interface_descriptor.number_of_endpoints)); | ||||
|             TRY(interface_object.add("interface_class_code", interface_descriptor.interface_class_code)); | ||||
|             TRY(interface_object.add("interface_sub_class_code", interface_descriptor.interface_sub_class_code)); | ||||
|             TRY(interface_object.add("interface_protocol", interface_descriptor.interface_protocol)); | ||||
|             TRY(interface_object.add("interface_string_desc_index", interface_descriptor.interface_string_descriptor_index)); | ||||
|             TRY(interface_object.add("length"sv, interface_descriptor.descriptor_header.length)); | ||||
|             TRY(interface_object.add("descriptor_type"sv, interface_descriptor.descriptor_header.descriptor_type)); | ||||
|             TRY(interface_object.add("interface_number"sv, interface_descriptor.interface_id)); | ||||
|             TRY(interface_object.add("alternate_setting"sv, interface_descriptor.alternate_setting)); | ||||
|             TRY(interface_object.add("num_endpoints"sv, interface_descriptor.number_of_endpoints)); | ||||
|             TRY(interface_object.add("interface_class_code"sv, interface_descriptor.interface_class_code)); | ||||
|             TRY(interface_object.add("interface_sub_class_code"sv, interface_descriptor.interface_sub_class_code)); | ||||
|             TRY(interface_object.add("interface_protocol"sv, interface_descriptor.interface_protocol)); | ||||
|             TRY(interface_object.add("interface_string_desc_index"sv, interface_descriptor.interface_string_descriptor_index)); | ||||
| 
 | ||||
|             auto endpoint_array = TRY(interface_object.add_array("endpoints")); | ||||
|             auto endpoint_array = TRY(interface_object.add_array("endpoints"sv)); | ||||
|             for (auto const& endpoint : interface.endpoints()) { | ||||
|                 auto endpoint_object = TRY(endpoint_array.add_object()); | ||||
|                 TRY(endpoint_object.add("length", endpoint.descriptor_header.length)); | ||||
|                 TRY(endpoint_object.add("descriptor_length", endpoint.descriptor_header.descriptor_type)); | ||||
|                 TRY(endpoint_object.add("endpoint_address", endpoint.endpoint_address)); | ||||
|                 TRY(endpoint_object.add("attribute_bitmap", endpoint.endpoint_attributes_bitmap)); | ||||
|                 TRY(endpoint_object.add("max_packet_size", endpoint.max_packet_size)); | ||||
|                 TRY(endpoint_object.add("polling_interval", endpoint.poll_interval_in_frames)); | ||||
|                 TRY(endpoint_object.add("length"sv, endpoint.descriptor_header.length)); | ||||
|                 TRY(endpoint_object.add("descriptor_length"sv, endpoint.descriptor_header.descriptor_type)); | ||||
|                 TRY(endpoint_object.add("endpoint_address"sv, endpoint.endpoint_address)); | ||||
|                 TRY(endpoint_object.add("attribute_bitmap"sv, endpoint.endpoint_attributes_bitmap)); | ||||
|                 TRY(endpoint_object.add("max_packet_size"sv, endpoint.max_packet_size)); | ||||
|                 TRY(endpoint_object.add("polling_interval"sv, endpoint.poll_interval_in_frames)); | ||||
|                 TRY(endpoint_object.finish()); | ||||
|             } | ||||
|             TRY(endpoint_array.finish()); | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ protected: | |||
| private: | ||||
|     ErrorOr<void> try_generate(KBufferBuilder&); | ||||
|     virtual ErrorOr<void> refresh_data(OpenFileDescription& description) const override; | ||||
|     mutable Mutex m_lock { "SysFSUSBDeviceInformation" }; | ||||
|     mutable Mutex m_lock { "SysFSUSBDeviceInformation"sv }; | ||||
|     NonnullOwnPtr<KString> m_device_name; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -22,8 +22,8 @@ SysFSBlockDevicesDirectory::SysFSBlockDevicesDirectory(SysFSDevicesDirectory con | |||
| ErrorOr<void> SysFSBlockDevicesDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     VERIFY(m_parent_directory); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_parent_directory->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_parent_directory->component_index() }, 0 })); | ||||
| 
 | ||||
|     return SysFSComponentRegistry::the().devices_list().with_exclusive([&](auto& list) -> ErrorOr<void> { | ||||
|         for (auto& exposed_device : list) { | ||||
|  |  | |||
|  | @ -21,8 +21,8 @@ SysFSCharacterDevicesDirectory::SysFSCharacterDevicesDirectory(SysFSDevicesDirec | |||
| ErrorOr<void> SysFSCharacterDevicesDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     VERIFY(m_parent_directory); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_parent_directory->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_parent_directory->component_index() }, 0 })); | ||||
| 
 | ||||
|     return SysFSComponentRegistry::the().devices_list().with_exclusive([&](auto& list) -> ErrorOr<void> { | ||||
|         for (auto& exposed_device : list) { | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ UNMAP_AFTER_INIT Optional<PhysicalAddress> BIOSSysFSDirectory::find_dmi_entry64b | |||
|     auto bios_or_error = map_bios(); | ||||
|     if (bios_or_error.is_error()) | ||||
|         return {}; | ||||
|     return bios_or_error.value().find_chunk_starting_with("_SM3_", 16); | ||||
|     return bios_or_error.value().find_chunk_starting_with("_SM3_"sv, 16); | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT Optional<PhysicalAddress> BIOSSysFSDirectory::find_dmi_entry32bit_point() | ||||
|  | @ -104,7 +104,7 @@ UNMAP_AFTER_INIT Optional<PhysicalAddress> BIOSSysFSDirectory::find_dmi_entry32b | |||
|     auto bios_or_error = map_bios(); | ||||
|     if (bios_or_error.is_error()) | ||||
|         return {}; | ||||
|     return bios_or_error.value().find_chunk_starting_with("_SM_", 16); | ||||
|     return bios_or_error.value().find_chunk_starting_with("_SM_"sv, 16); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -77,9 +77,9 @@ ErrorOr<void> TmpFSInode::traverse_as_directory(Function<ErrorOr<void>(FileSyste | |||
|     if (!is_directory()) | ||||
|         return ENOTDIR; | ||||
| 
 | ||||
|     TRY(callback({ ".", identifier(), 0 })); | ||||
|     TRY(callback({ "."sv, identifier(), 0 })); | ||||
|     if (auto parent = m_parent.strong_ref()) | ||||
|         TRY(callback({ "..", parent->identifier(), 0 })); | ||||
|         TRY(callback({ ".."sv, parent->identifier(), 0 })); | ||||
| 
 | ||||
|     for (auto& child : m_children) { | ||||
|         TRY(callback({ child.name->view(), child.inode->identifier(), 0 })); | ||||
|  |  | |||
|  | @ -128,7 +128,7 @@ ErrorOr<void> VirtualFileSystem::mount_root(FileSystem& fs) | |||
|         mounts.append(move(mount)); | ||||
|     }); | ||||
| 
 | ||||
|     m_root_custody = TRY(Custody::try_create(nullptr, "", *m_root_inode, root_mount_flags)); | ||||
|     m_root_custody = TRY(Custody::try_create(nullptr, ""sv, *m_root_inode, root_mount_flags)); | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
|  | @ -376,7 +376,7 @@ ErrorOr<void> VirtualFileSystem::mkdir(StringView path, mode_t mode, Custody& ba | |||
|     path = path.trim("/"sv, TrimMode::Right); | ||||
|     if (path.is_empty()) { | ||||
|         // NOTE: This means the path was a series of slashes, which resolves to "/".
 | ||||
|         path = "/"; | ||||
|         path = "/"sv; | ||||
|     } | ||||
| 
 | ||||
|     RefPtr<Custody> parent_custody; | ||||
|  | @ -736,8 +736,8 @@ ErrorOr<void> VirtualFileSystem::rmdir(StringView path, Custody& base) | |||
|     if (custody->is_readonly()) | ||||
|         return EROFS; | ||||
| 
 | ||||
|     TRY(inode.remove_child(".")); | ||||
|     TRY(inode.remove_child("..")); | ||||
|     TRY(inode.remove_child("."sv)); | ||||
|     TRY(inode.remove_child(".."sv)); | ||||
| 
 | ||||
|     return parent_inode.remove_child(KLexicalPath::basename(path)); | ||||
| } | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ UNMAP_AFTER_INIT void initialize() | |||
|     if (!rsdp.has_value()) | ||||
|         return; | ||||
| 
 | ||||
|     auto facp = StaticParsing::find_table(rsdp.value(), "FACP"); | ||||
|     auto facp = StaticParsing::find_table(rsdp.value(), "FACP"sv); | ||||
|     if (!facp.has_value()) | ||||
|         return; | ||||
|     auto facp_table_or_error = Memory::map_typed<Structures::FADT>(facp.value()); | ||||
|  |  | |||
|  | @ -84,13 +84,13 @@ UNMAP_AFTER_INIT void ACPISysFSDirectory::find_tables_and_register_them_as_compo | |||
|     m_components = components; | ||||
| 
 | ||||
|     auto rsdp = Memory::map_typed<Structures::RSDPDescriptor20>(ACPI::Parser::the()->rsdp()).release_value_but_fixme_should_propagate_errors(); | ||||
|     m_components.append(ACPISysFSComponent::create("RSDP", ACPI::Parser::the()->rsdp(), rsdp->base.revision == 0 ? sizeof(Structures::RSDPDescriptor) : rsdp->length)); | ||||
|     m_components.append(ACPISysFSComponent::create("RSDP"sv, ACPI::Parser::the()->rsdp(), rsdp->base.revision == 0 ? sizeof(Structures::RSDPDescriptor) : rsdp->length)); | ||||
| 
 | ||||
|     auto main_system_description_table = Memory::map_typed<Structures::SDTHeader>(ACPI::Parser::the()->main_system_description_table()).release_value_but_fixme_should_propagate_errors(); | ||||
|     if (ACPI::Parser::the()->is_xsdt_supported()) { | ||||
|         m_components.append(ACPISysFSComponent::create("XSDT", ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); | ||||
|         m_components.append(ACPISysFSComponent::create("XSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); | ||||
|     } else { | ||||
|         m_components.append(ACPISysFSComponent::create("RSDT", ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); | ||||
|         m_components.append(ACPISysFSComponent::create("RSDT"sv, ACPI::Parser::the()->main_system_description_table(), main_system_description_table->length)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,24 +46,24 @@ private: | |||
|         auto array = TRY(JsonArraySerializer<>::try_create(builder)); | ||||
|         TRY(NetworkingManagement::the().try_for_each([&array](auto& adapter) -> ErrorOr<void> { | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             TRY(obj.add("name", adapter.name())); | ||||
|             TRY(obj.add("class_name", adapter.class_name())); | ||||
|             TRY(obj.add("name"sv, adapter.name())); | ||||
|             TRY(obj.add("class_name"sv, adapter.class_name())); | ||||
|             auto mac_address = TRY(adapter.mac_address().to_string()); | ||||
|             TRY(obj.add("mac_address", mac_address->view())); | ||||
|             TRY(obj.add("mac_address"sv, mac_address->view())); | ||||
|             if (!adapter.ipv4_address().is_zero()) { | ||||
|                 auto ipv4_address = TRY(adapter.ipv4_address().to_string()); | ||||
|                 TRY(obj.add("ipv4_address", ipv4_address->view())); | ||||
|                 TRY(obj.add("ipv4_address"sv, ipv4_address->view())); | ||||
|                 auto ipv4_netmask = TRY(adapter.ipv4_netmask().to_string()); | ||||
|                 TRY(obj.add("ipv4_netmask", ipv4_netmask->view())); | ||||
|                 TRY(obj.add("ipv4_netmask"sv, ipv4_netmask->view())); | ||||
|             } | ||||
|             TRY(obj.add("packets_in", adapter.packets_in())); | ||||
|             TRY(obj.add("bytes_in", adapter.bytes_in())); | ||||
|             TRY(obj.add("packets_out", adapter.packets_out())); | ||||
|             TRY(obj.add("bytes_out", adapter.bytes_out())); | ||||
|             TRY(obj.add("link_up", adapter.link_up())); | ||||
|             TRY(obj.add("link_speed", adapter.link_speed())); | ||||
|             TRY(obj.add("link_full_duplex", adapter.link_full_duplex())); | ||||
|             TRY(obj.add("mtu", adapter.mtu())); | ||||
|             TRY(obj.add("packets_in"sv, adapter.packets_in())); | ||||
|             TRY(obj.add("bytes_in"sv, adapter.bytes_in())); | ||||
|             TRY(obj.add("packets_out"sv, adapter.packets_out())); | ||||
|             TRY(obj.add("bytes_out"sv, adapter.bytes_out())); | ||||
|             TRY(obj.add("link_up"sv, adapter.link_up())); | ||||
|             TRY(obj.add("link_speed"sv, adapter.link_speed())); | ||||
|             TRY(obj.add("link_full_duplex"sv, adapter.link_full_duplex())); | ||||
|             TRY(obj.add("mtu"sv, adapter.mtu())); | ||||
|             TRY(obj.finish()); | ||||
|             return {}; | ||||
|         })); | ||||
|  | @ -85,9 +85,9 @@ private: | |||
|             for (auto& it : table) { | ||||
|                 auto obj = TRY(array.add_object()); | ||||
|                 auto mac_address = TRY(it.value.to_string()); | ||||
|                 TRY(obj.add("mac_address", mac_address->view())); | ||||
|                 TRY(obj.add("mac_address"sv, mac_address->view())); | ||||
|                 auto ip_address = TRY(it.key.to_string()); | ||||
|                 TRY(obj.add("ip_address", ip_address->view())); | ||||
|                 TRY(obj.add("ip_address"sv, ip_address->view())); | ||||
|                 TRY(obj.finish()); | ||||
|             } | ||||
|             return {}; | ||||
|  | @ -110,13 +110,13 @@ private: | |||
|             for (auto& it : table) { | ||||
|                 auto obj = TRY(array.add_object()); | ||||
|                 auto destination = TRY(it.destination.to_string()); | ||||
|                 TRY(obj.add("destination", destination->view())); | ||||
|                 TRY(obj.add("destination"sv, destination->view())); | ||||
|                 auto gateway = TRY(it.gateway.to_string()); | ||||
|                 TRY(obj.add("gateway", gateway->view())); | ||||
|                 TRY(obj.add("gateway"sv, gateway->view())); | ||||
|                 auto netmask = TRY(it.netmask.to_string()); | ||||
|                 TRY(obj.add("genmask", netmask->view())); | ||||
|                 TRY(obj.add("flags", it.flags)); | ||||
|                 TRY(obj.add("interface", it.adapter->name())); | ||||
|                 TRY(obj.add("genmask"sv, netmask->view())); | ||||
|                 TRY(obj.add("flags"sv, it.flags)); | ||||
|                 TRY(obj.add("interface"sv, it.adapter->name())); | ||||
|                 TRY(obj.finish()); | ||||
|             } | ||||
|             return {}; | ||||
|  | @ -138,22 +138,22 @@ private: | |||
|         TRY(TCPSocket::try_for_each([&array](auto& socket) -> ErrorOr<void> { | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             auto local_address = TRY(socket.local_address().to_string()); | ||||
|             TRY(obj.add("local_address", local_address->view())); | ||||
|             TRY(obj.add("local_port", socket.local_port())); | ||||
|             TRY(obj.add("local_address"sv, local_address->view())); | ||||
|             TRY(obj.add("local_port"sv, socket.local_port())); | ||||
|             auto peer_address = TRY(socket.peer_address().to_string()); | ||||
|             TRY(obj.add("peer_address", peer_address->view())); | ||||
|             TRY(obj.add("peer_port", socket.peer_port())); | ||||
|             TRY(obj.add("state", TCPSocket::to_string(socket.state()))); | ||||
|             TRY(obj.add("ack_number", socket.ack_number())); | ||||
|             TRY(obj.add("sequence_number", socket.sequence_number())); | ||||
|             TRY(obj.add("packets_in", socket.packets_in())); | ||||
|             TRY(obj.add("bytes_in", socket.bytes_in())); | ||||
|             TRY(obj.add("packets_out", socket.packets_out())); | ||||
|             TRY(obj.add("bytes_out", socket.bytes_out())); | ||||
|             TRY(obj.add("peer_address"sv, peer_address->view())); | ||||
|             TRY(obj.add("peer_port"sv, socket.peer_port())); | ||||
|             TRY(obj.add("state"sv, TCPSocket::to_string(socket.state()))); | ||||
|             TRY(obj.add("ack_number"sv, socket.ack_number())); | ||||
|             TRY(obj.add("sequence_number"sv, socket.sequence_number())); | ||||
|             TRY(obj.add("packets_in"sv, socket.packets_in())); | ||||
|             TRY(obj.add("bytes_in"sv, socket.bytes_in())); | ||||
|             TRY(obj.add("packets_out"sv, socket.packets_out())); | ||||
|             TRY(obj.add("bytes_out"sv, socket.bytes_out())); | ||||
|             if (Process::current().is_superuser() || Process::current().uid() == socket.origin_uid()) { | ||||
|                 TRY(obj.add("origin_pid", socket.origin_pid().value())); | ||||
|                 TRY(obj.add("origin_uid", socket.origin_uid().value())); | ||||
|                 TRY(obj.add("origin_gid", socket.origin_gid().value())); | ||||
|                 TRY(obj.add("origin_pid"sv, socket.origin_pid().value())); | ||||
|                 TRY(obj.add("origin_uid"sv, socket.origin_uid().value())); | ||||
|                 TRY(obj.add("origin_gid"sv, socket.origin_gid().value())); | ||||
|             } | ||||
|             TRY(obj.finish()); | ||||
|             return {}; | ||||
|  | @ -174,13 +174,13 @@ private: | |||
|         auto array = TRY(JsonArraySerializer<>::try_create(builder)); | ||||
|         TRY(LocalSocket::try_for_each([&array](auto& socket) -> ErrorOr<void> { | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             TRY(obj.add("path", socket.socket_path())); | ||||
|             TRY(obj.add("origin_pid", socket.origin_pid().value())); | ||||
|             TRY(obj.add("origin_uid", socket.origin_uid().value())); | ||||
|             TRY(obj.add("origin_gid", socket.origin_gid().value())); | ||||
|             TRY(obj.add("acceptor_pid", socket.acceptor_pid().value())); | ||||
|             TRY(obj.add("acceptor_uid", socket.acceptor_uid().value())); | ||||
|             TRY(obj.add("acceptor_gid", socket.acceptor_gid().value())); | ||||
|             TRY(obj.add("path"sv, socket.socket_path())); | ||||
|             TRY(obj.add("origin_pid"sv, socket.origin_pid().value())); | ||||
|             TRY(obj.add("origin_uid"sv, socket.origin_uid().value())); | ||||
|             TRY(obj.add("origin_gid"sv, socket.origin_gid().value())); | ||||
|             TRY(obj.add("acceptor_pid"sv, socket.acceptor_pid().value())); | ||||
|             TRY(obj.add("acceptor_uid"sv, socket.acceptor_uid().value())); | ||||
|             TRY(obj.add("acceptor_gid"sv, socket.acceptor_gid().value())); | ||||
|             TRY(obj.finish()); | ||||
|             return {}; | ||||
|         })); | ||||
|  | @ -201,15 +201,15 @@ private: | |||
|         TRY(UDPSocket::try_for_each([&array](auto& socket) -> ErrorOr<void> { | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             auto local_address = TRY(socket.local_address().to_string()); | ||||
|             TRY(obj.add("local_address", local_address->view())); | ||||
|             TRY(obj.add("local_port", socket.local_port())); | ||||
|             TRY(obj.add("local_address"sv, local_address->view())); | ||||
|             TRY(obj.add("local_port"sv, socket.local_port())); | ||||
|             auto peer_address = TRY(socket.peer_address().to_string()); | ||||
|             TRY(obj.add("peer_address", peer_address->view())); | ||||
|             TRY(obj.add("peer_port", socket.peer_port())); | ||||
|             TRY(obj.add("peer_address"sv, peer_address->view())); | ||||
|             TRY(obj.add("peer_port"sv, socket.peer_port())); | ||||
|             if (Process::current().is_superuser() || Process::current().uid() == socket.origin_uid()) { | ||||
|                 TRY(obj.add("origin_pid", socket.origin_pid().value())); | ||||
|                 TRY(obj.add("origin_uid", socket.origin_uid().value())); | ||||
|                 TRY(obj.add("origin_gid", socket.origin_gid().value())); | ||||
|                 TRY(obj.add("origin_pid"sv, socket.origin_pid().value())); | ||||
|                 TRY(obj.add("origin_uid"sv, socket.origin_uid().value())); | ||||
|                 TRY(obj.add("origin_gid"sv, socket.origin_gid().value())); | ||||
|             } | ||||
|             TRY(obj.finish()); | ||||
|             return {}; | ||||
|  | @ -402,22 +402,22 @@ private: | |||
|         TRY(VirtualFileSystem::the().for_each_mount([&array](auto& mount) -> ErrorOr<void> { | ||||
|             auto& fs = mount.guest_fs(); | ||||
|             auto fs_object = TRY(array.add_object()); | ||||
|             TRY(fs_object.add("class_name", fs.class_name())); | ||||
|             TRY(fs_object.add("total_block_count", fs.total_block_count())); | ||||
|             TRY(fs_object.add("free_block_count", fs.free_block_count())); | ||||
|             TRY(fs_object.add("total_inode_count", fs.total_inode_count())); | ||||
|             TRY(fs_object.add("free_inode_count", fs.free_inode_count())); | ||||
|             TRY(fs_object.add("class_name"sv, fs.class_name())); | ||||
|             TRY(fs_object.add("total_block_count"sv, fs.total_block_count())); | ||||
|             TRY(fs_object.add("free_block_count"sv, fs.free_block_count())); | ||||
|             TRY(fs_object.add("total_inode_count"sv, fs.total_inode_count())); | ||||
|             TRY(fs_object.add("free_inode_count"sv, fs.free_inode_count())); | ||||
|             auto mount_point = TRY(mount.absolute_path()); | ||||
|             TRY(fs_object.add("mount_point", mount_point->view())); | ||||
|             TRY(fs_object.add("block_size", static_cast<u64>(fs.block_size()))); | ||||
|             TRY(fs_object.add("readonly", fs.is_readonly())); | ||||
|             TRY(fs_object.add("mount_flags", mount.flags())); | ||||
|             TRY(fs_object.add("mount_point"sv, mount_point->view())); | ||||
|             TRY(fs_object.add("block_size"sv, static_cast<u64>(fs.block_size()))); | ||||
|             TRY(fs_object.add("readonly"sv, fs.is_readonly())); | ||||
|             TRY(fs_object.add("mount_flags"sv, mount.flags())); | ||||
| 
 | ||||
|             if (fs.is_file_backed()) { | ||||
|                 auto pseudo_path = TRY(static_cast<const FileBackedFileSystem&>(fs).file_description().pseudo_path()); | ||||
|                 TRY(fs_object.add("source", pseudo_path->view())); | ||||
|                 TRY(fs_object.add("source"sv, pseudo_path->view())); | ||||
|             } else { | ||||
|                 TRY(fs_object.add("source", "none")); | ||||
|                 TRY(fs_object.add("source"sv, "none")); | ||||
|             } | ||||
| 
 | ||||
|             TRY(fs_object.finish()); | ||||
|  | @ -444,16 +444,16 @@ private: | |||
|         auto system_memory = MM.get_system_memory_info(); | ||||
| 
 | ||||
|         auto json = TRY(JsonObjectSerializer<>::try_create(builder)); | ||||
|         TRY(json.add("kmalloc_allocated", stats.bytes_allocated)); | ||||
|         TRY(json.add("kmalloc_available", stats.bytes_free)); | ||||
|         TRY(json.add("user_physical_allocated", system_memory.user_physical_pages_used)); | ||||
|         TRY(json.add("user_physical_available", system_memory.user_physical_pages - system_memory.user_physical_pages_used)); | ||||
|         TRY(json.add("user_physical_committed", system_memory.user_physical_pages_committed)); | ||||
|         TRY(json.add("user_physical_uncommitted", system_memory.user_physical_pages_uncommitted)); | ||||
|         TRY(json.add("super_physical_allocated", system_memory.super_physical_pages_used)); | ||||
|         TRY(json.add("super_physical_available", system_memory.super_physical_pages - system_memory.super_physical_pages_used)); | ||||
|         TRY(json.add("kmalloc_call_count", stats.kmalloc_call_count)); | ||||
|         TRY(json.add("kfree_call_count", stats.kfree_call_count)); | ||||
|         TRY(json.add("kmalloc_allocated"sv, stats.bytes_allocated)); | ||||
|         TRY(json.add("kmalloc_available"sv, stats.bytes_free)); | ||||
|         TRY(json.add("user_physical_allocated"sv, system_memory.user_physical_pages_used)); | ||||
|         TRY(json.add("user_physical_available"sv, system_memory.user_physical_pages - system_memory.user_physical_pages_used)); | ||||
|         TRY(json.add("user_physical_committed"sv, system_memory.user_physical_pages_committed)); | ||||
|         TRY(json.add("user_physical_uncommitted"sv, system_memory.user_physical_pages_uncommitted)); | ||||
|         TRY(json.add("super_physical_allocated"sv, system_memory.super_physical_pages_used)); | ||||
|         TRY(json.add("super_physical_available"sv, system_memory.super_physical_pages - system_memory.super_physical_pages_used)); | ||||
|         TRY(json.add("kmalloc_call_count"sv, stats.kmalloc_call_count)); | ||||
|         TRY(json.add("kfree_call_count"sv, stats.kfree_call_count)); | ||||
|         TRY(json.finish()); | ||||
|         return {}; | ||||
|     } | ||||
|  | @ -469,14 +469,14 @@ private: | |||
|     { | ||||
|         auto json = TRY(JsonObjectSerializer<>::try_create(builder)); | ||||
|         auto total_time_scheduled = Scheduler::get_total_time_scheduled(); | ||||
|         TRY(json.add("total_time", total_time_scheduled.total)); | ||||
|         TRY(json.add("kernel_time", total_time_scheduled.total_kernel)); | ||||
|         TRY(json.add("user_time", total_time_scheduled.total - total_time_scheduled.total_kernel)); | ||||
|         TRY(json.add("total_time"sv, total_time_scheduled.total)); | ||||
|         TRY(json.add("kernel_time"sv, total_time_scheduled.total_kernel)); | ||||
|         TRY(json.add("user_time"sv, total_time_scheduled.total - total_time_scheduled.total_kernel)); | ||||
|         u64 idle_time = 0; | ||||
|         Processor::for_each([&](Processor& processor) { | ||||
|             idle_time += processor.time_spent_idle(); | ||||
|         }); | ||||
|         TRY(json.add("idle_time", idle_time)); | ||||
|         TRY(json.add("idle_time"sv, idle_time)); | ||||
|         TRY(json.finish()); | ||||
|         return {}; | ||||
|     } | ||||
|  | @ -501,78 +501,78 @@ private: | |||
| 
 | ||||
| #define __ENUMERATE_PLEDGE_PROMISE(promise)    \ | ||||
|     if (process.has_promised(Pledge::promise)) \ | ||||
|         TRY(pledge_builder.try_append(#promise " ")); | ||||
|         TRY(pledge_builder.try_append(#promise " "sv)); | ||||
|                 ENUMERATE_PLEDGE_PROMISES | ||||
| #undef __ENUMERATE_PLEDGE_PROMISE | ||||
| 
 | ||||
|                 TRY(process_object.add("pledge", pledge_builder.string_view())); | ||||
|                 TRY(process_object.add("pledge"sv, pledge_builder.string_view())); | ||||
| 
 | ||||
|                 switch (process.veil_state()) { | ||||
|                 case VeilState::None: | ||||
|                     TRY(process_object.add("veil", "None")); | ||||
|                     TRY(process_object.add("veil"sv, "None")); | ||||
|                     break; | ||||
|                 case VeilState::Dropped: | ||||
|                     TRY(process_object.add("veil", "Dropped")); | ||||
|                     TRY(process_object.add("veil"sv, "Dropped")); | ||||
|                     break; | ||||
|                 case VeilState::Locked: | ||||
|                     TRY(process_object.add("veil", "Locked")); | ||||
|                     TRY(process_object.add("veil"sv, "Locked")); | ||||
|                     break; | ||||
|                 } | ||||
|             } else { | ||||
|                 TRY(process_object.add("pledge", ""sv)); | ||||
|                 TRY(process_object.add("veil", ""sv)); | ||||
|                 TRY(process_object.add("pledge"sv, ""sv)); | ||||
|                 TRY(process_object.add("veil"sv, ""sv)); | ||||
|             } | ||||
| 
 | ||||
|             TRY(process_object.add("pid", process.pid().value())); | ||||
|             TRY(process_object.add("pgid", process.tty() ? process.tty()->pgid().value() : 0)); | ||||
|             TRY(process_object.add("pgp", process.pgid().value())); | ||||
|             TRY(process_object.add("sid", process.sid().value())); | ||||
|             TRY(process_object.add("uid", process.uid().value())); | ||||
|             TRY(process_object.add("gid", process.gid().value())); | ||||
|             TRY(process_object.add("ppid", process.ppid().value())); | ||||
|             TRY(process_object.add("pid"sv, process.pid().value())); | ||||
|             TRY(process_object.add("pgid"sv, process.tty() ? process.tty()->pgid().value() : 0)); | ||||
|             TRY(process_object.add("pgp"sv, process.pgid().value())); | ||||
|             TRY(process_object.add("sid"sv, process.sid().value())); | ||||
|             TRY(process_object.add("uid"sv, process.uid().value())); | ||||
|             TRY(process_object.add("gid"sv, process.gid().value())); | ||||
|             TRY(process_object.add("ppid"sv, process.ppid().value())); | ||||
|             if (process.tty()) { | ||||
|                 auto tty_pseudo_name = TRY(process.tty()->pseudo_name()); | ||||
|                 TRY(process_object.add("tty", tty_pseudo_name->view())); | ||||
|                 TRY(process_object.add("tty"sv, tty_pseudo_name->view())); | ||||
|             } else { | ||||
|                 TRY(process_object.add("tty", "")); | ||||
|                 TRY(process_object.add("tty"sv, "")); | ||||
|             } | ||||
|             TRY(process_object.add("nfds", process.fds().with_shared([](auto& fds) { return fds.open_count(); }))); | ||||
|             TRY(process_object.add("name", process.name())); | ||||
|             TRY(process_object.add("executable", process.executable() ? TRY(process.executable()->try_serialize_absolute_path())->view() : ""sv)); | ||||
|             TRY(process_object.add("amount_virtual", process.address_space().amount_virtual())); | ||||
|             TRY(process_object.add("amount_resident", process.address_space().amount_resident())); | ||||
|             TRY(process_object.add("amount_dirty_private", process.address_space().amount_dirty_private())); | ||||
|             TRY(process_object.add("amount_clean_inode", TRY(process.address_space().amount_clean_inode()))); | ||||
|             TRY(process_object.add("amount_shared", process.address_space().amount_shared())); | ||||
|             TRY(process_object.add("amount_purgeable_volatile", process.address_space().amount_purgeable_volatile())); | ||||
|             TRY(process_object.add("amount_purgeable_nonvolatile", process.address_space().amount_purgeable_nonvolatile())); | ||||
|             TRY(process_object.add("dumpable", process.is_dumpable())); | ||||
|             TRY(process_object.add("kernel", process.is_kernel_process())); | ||||
|             auto thread_array = TRY(process_object.add_array("threads")); | ||||
|             TRY(process_object.add("nfds"sv, process.fds().with_shared([](auto& fds) { return fds.open_count(); }))); | ||||
|             TRY(process_object.add("name"sv, process.name())); | ||||
|             TRY(process_object.add("executable"sv, process.executable() ? TRY(process.executable()->try_serialize_absolute_path())->view() : ""sv)); | ||||
|             TRY(process_object.add("amount_virtual"sv, process.address_space().amount_virtual())); | ||||
|             TRY(process_object.add("amount_resident"sv, process.address_space().amount_resident())); | ||||
|             TRY(process_object.add("amount_dirty_private"sv, process.address_space().amount_dirty_private())); | ||||
|             TRY(process_object.add("amount_clean_inode"sv, TRY(process.address_space().amount_clean_inode()))); | ||||
|             TRY(process_object.add("amount_shared"sv, process.address_space().amount_shared())); | ||||
|             TRY(process_object.add("amount_purgeable_volatile"sv, process.address_space().amount_purgeable_volatile())); | ||||
|             TRY(process_object.add("amount_purgeable_nonvolatile"sv, process.address_space().amount_purgeable_nonvolatile())); | ||||
|             TRY(process_object.add("dumpable"sv, process.is_dumpable())); | ||||
|             TRY(process_object.add("kernel"sv, process.is_kernel_process())); | ||||
|             auto thread_array = TRY(process_object.add_array("threads"sv)); | ||||
|             TRY(process.try_for_each_thread([&](const Thread& thread) -> ErrorOr<void> { | ||||
|                 SpinlockLocker locker(thread.get_lock()); | ||||
|                 auto thread_object = TRY(thread_array.add_object()); | ||||
| #if LOCK_DEBUG | ||||
|                 TRY(thread_object.add("lock_count", thread.lock_count())); | ||||
|                 TRY(thread_object.add("lock_count"sv, thread.lock_count())); | ||||
| #endif | ||||
|                 TRY(thread_object.add("tid", thread.tid().value())); | ||||
|                 TRY(thread_object.add("name", thread.name())); | ||||
|                 TRY(thread_object.add("times_scheduled", thread.times_scheduled())); | ||||
|                 TRY(thread_object.add("time_user", thread.time_in_user())); | ||||
|                 TRY(thread_object.add("time_kernel", thread.time_in_kernel())); | ||||
|                 TRY(thread_object.add("state", thread.state_string())); | ||||
|                 TRY(thread_object.add("cpu", thread.cpu())); | ||||
|                 TRY(thread_object.add("priority", thread.priority())); | ||||
|                 TRY(thread_object.add("syscall_count", thread.syscall_count())); | ||||
|                 TRY(thread_object.add("inode_faults", thread.inode_faults())); | ||||
|                 TRY(thread_object.add("zero_faults", thread.zero_faults())); | ||||
|                 TRY(thread_object.add("cow_faults", thread.cow_faults())); | ||||
|                 TRY(thread_object.add("file_read_bytes", thread.file_read_bytes())); | ||||
|                 TRY(thread_object.add("file_write_bytes", thread.file_write_bytes())); | ||||
|                 TRY(thread_object.add("unix_socket_read_bytes", thread.unix_socket_read_bytes())); | ||||
|                 TRY(thread_object.add("unix_socket_write_bytes", thread.unix_socket_write_bytes())); | ||||
|                 TRY(thread_object.add("ipv4_socket_read_bytes", thread.ipv4_socket_read_bytes())); | ||||
|                 TRY(thread_object.add("ipv4_socket_write_bytes", thread.ipv4_socket_write_bytes())); | ||||
|                 TRY(thread_object.add("tid"sv, thread.tid().value())); | ||||
|                 TRY(thread_object.add("name"sv, thread.name())); | ||||
|                 TRY(thread_object.add("times_scheduled"sv, thread.times_scheduled())); | ||||
|                 TRY(thread_object.add("time_user"sv, thread.time_in_user())); | ||||
|                 TRY(thread_object.add("time_kernel"sv, thread.time_in_kernel())); | ||||
|                 TRY(thread_object.add("state"sv, thread.state_string())); | ||||
|                 TRY(thread_object.add("cpu"sv, thread.cpu())); | ||||
|                 TRY(thread_object.add("priority"sv, thread.priority())); | ||||
|                 TRY(thread_object.add("syscall_count"sv, thread.syscall_count())); | ||||
|                 TRY(thread_object.add("inode_faults"sv, thread.inode_faults())); | ||||
|                 TRY(thread_object.add("zero_faults"sv, thread.zero_faults())); | ||||
|                 TRY(thread_object.add("cow_faults"sv, thread.cow_faults())); | ||||
|                 TRY(thread_object.add("file_read_bytes"sv, thread.file_read_bytes())); | ||||
|                 TRY(thread_object.add("file_write_bytes"sv, thread.file_write_bytes())); | ||||
|                 TRY(thread_object.add("unix_socket_read_bytes"sv, thread.unix_socket_read_bytes())); | ||||
|                 TRY(thread_object.add("unix_socket_write_bytes"sv, thread.unix_socket_write_bytes())); | ||||
|                 TRY(thread_object.add("ipv4_socket_read_bytes"sv, thread.ipv4_socket_read_bytes())); | ||||
|                 TRY(thread_object.add("ipv4_socket_write_bytes"sv, thread.ipv4_socket_write_bytes())); | ||||
| 
 | ||||
|                 TRY(thread_object.finish()); | ||||
|                 return {}; | ||||
|  | @ -585,7 +585,7 @@ private: | |||
|         SpinlockLocker lock(g_scheduler_lock); | ||||
|         { | ||||
|             { | ||||
|                 auto array = TRY(json.add_array("processes")); | ||||
|                 auto array = TRY(json.add_array("processes"sv)); | ||||
|                 TRY(build_process(array, *Scheduler::colonel())); | ||||
|                 TRY(Process::all_instances().with([&](auto& processes) -> ErrorOr<void> { | ||||
|                     for (auto& process : processes) | ||||
|  | @ -596,8 +596,8 @@ private: | |||
|             } | ||||
| 
 | ||||
|             auto total_time_scheduled = Scheduler::get_total_time_scheduled(); | ||||
|             TRY(json.add("total_time", total_time_scheduled.total)); | ||||
|             TRY(json.add("total_time_kernel", total_time_scheduled.total_kernel)); | ||||
|             TRY(json.add("total_time"sv, total_time_scheduled.total)); | ||||
|             TRY(json.add("total_time_kernel"sv, total_time_scheduled.total_kernel)); | ||||
|         } | ||||
|         TRY(json.finish()); | ||||
|         return {}; | ||||
|  | @ -616,13 +616,13 @@ private: | |||
|             [&](Processor& proc) -> ErrorOr<void> { | ||||
|                 auto& info = proc.info(); | ||||
|                 auto obj = TRY(array.add_object()); | ||||
|                 TRY(obj.add("processor", proc.id())); | ||||
|                 TRY(obj.add("vendor_id", info.vendor_id_string())); | ||||
|                 TRY(obj.add("family", info.display_family())); | ||||
|                 TRY(obj.add("processor"sv, proc.id())); | ||||
|                 TRY(obj.add("vendor_id"sv, info.vendor_id_string())); | ||||
|                 TRY(obj.add("family"sv, info.display_family())); | ||||
|                 if (!info.hypervisor_vendor_id_string().is_null()) | ||||
|                     TRY(obj.add("hypervisor_vendor_id", info.hypervisor_vendor_id_string())); | ||||
|                     TRY(obj.add("hypervisor_vendor_id"sv, info.hypervisor_vendor_id_string())); | ||||
| 
 | ||||
|                 auto features_array = TRY(obj.add_array("features")); | ||||
|                 auto features_array = TRY(obj.add_array("features"sv)); | ||||
|                 auto keep_empty = false; | ||||
| 
 | ||||
|                 ErrorOr<void> result; // FIXME: Make this nicer
 | ||||
|  | @ -635,29 +635,29 @@ private: | |||
| 
 | ||||
|                 TRY(features_array.finish()); | ||||
| 
 | ||||
|                 TRY(obj.add("model", info.display_model())); | ||||
|                 TRY(obj.add("stepping", info.stepping())); | ||||
|                 TRY(obj.add("type", info.type())); | ||||
|                 TRY(obj.add("brand", info.brand_string())); | ||||
|                 TRY(obj.add("model"sv, info.display_model())); | ||||
|                 TRY(obj.add("stepping"sv, info.stepping())); | ||||
|                 TRY(obj.add("type"sv, info.type())); | ||||
|                 TRY(obj.add("brand"sv, info.brand_string())); | ||||
| 
 | ||||
|                 auto caches = TRY(obj.add_object("caches")); | ||||
|                 auto caches = TRY(obj.add_object("caches"sv)); | ||||
| 
 | ||||
|                 auto add_cache_info = [&](StringView name, ProcessorInfo::Cache const& cache) -> ErrorOr<void> { | ||||
|                     auto cache_object = TRY(caches.add_object(name)); | ||||
|                     TRY(cache_object.add("size", cache.size)); | ||||
|                     TRY(cache_object.add("line_size", cache.line_size)); | ||||
|                     TRY(cache_object.add("size"sv, cache.size)); | ||||
|                     TRY(cache_object.add("line_size"sv, cache.line_size)); | ||||
|                     TRY(cache_object.finish()); | ||||
|                     return {}; | ||||
|                 }; | ||||
| 
 | ||||
|                 if (info.l1_data_cache().has_value()) | ||||
|                     TRY(add_cache_info("l1_data", *info.l1_data_cache())); | ||||
|                     TRY(add_cache_info("l1_data"sv, *info.l1_data_cache())); | ||||
|                 if (info.l1_data_cache().has_value()) | ||||
|                     TRY(add_cache_info("l1_instruction", *info.l1_instruction_cache())); | ||||
|                     TRY(add_cache_info("l1_instruction"sv, *info.l1_instruction_cache())); | ||||
|                 if (info.l1_data_cache().has_value()) | ||||
|                     TRY(add_cache_info("l2", *info.l2_cache())); | ||||
|                     TRY(add_cache_info("l2"sv, *info.l2_cache())); | ||||
|                 if (info.l1_data_cache().has_value()) | ||||
|                     TRY(add_cache_info("l3", *info.l3_cache())); | ||||
|                     TRY(add_cache_info("l3"sv, *info.l3_cache())); | ||||
| 
 | ||||
|                 TRY(caches.finish()); | ||||
| 
 | ||||
|  | @ -701,12 +701,12 @@ private: | |||
|                 return; | ||||
|             result = ([&]() -> ErrorOr<void> { | ||||
|                 auto obj = TRY(array.add_object()); | ||||
|                 TRY(obj.add("purpose", handler.purpose())); | ||||
|                 TRY(obj.add("interrupt_line", handler.interrupt_number())); | ||||
|                 TRY(obj.add("controller", handler.controller())); | ||||
|                 TRY(obj.add("cpu_handler", 0)); // FIXME: Determine the responsible CPU for each interrupt handler.
 | ||||
|                 TRY(obj.add("device_sharing", (unsigned)handler.sharing_devices_count())); | ||||
|                 TRY(obj.add("call_count", (unsigned)handler.get_invoking_count())); | ||||
|                 TRY(obj.add("purpose"sv, handler.purpose())); | ||||
|                 TRY(obj.add("interrupt_line"sv, handler.interrupt_number())); | ||||
|                 TRY(obj.add("controller"sv, handler.controller())); | ||||
|                 TRY(obj.add("cpu_handler"sv, 0)); // FIXME: Determine the responsible CPU for each interrupt handler.
 | ||||
|                 TRY(obj.add("device_sharing"sv, (unsigned)handler.sharing_devices_count())); | ||||
|                 TRY(obj.add("call_count"sv, (unsigned)handler.get_invoking_count())); | ||||
|                 TRY(obj.finish()); | ||||
|                 return {}; | ||||
|             })(); | ||||
|  | @ -726,7 +726,7 @@ private: | |||
|     { | ||||
|         auto json = TRY(JsonObjectSerializer<>::try_create(builder)); | ||||
|         TRY(HIDManagement::the().keymap_data().with([&](auto const& keymap_data) { | ||||
|             return json.add("keymap", keymap_data.character_map_name->view()); | ||||
|             return json.add("keymap"sv, keymap_data.character_map_name->view()); | ||||
|         })); | ||||
|         TRY(json.finish()); | ||||
|         return {}; | ||||
|  | @ -749,17 +749,17 @@ private: | |||
|                 return; | ||||
|             result = ([&]() -> ErrorOr<void> { | ||||
|                 auto obj = TRY(array.add_object()); | ||||
|                 TRY(obj.add("domain", device_identifier.address().domain())); | ||||
|                 TRY(obj.add("bus", device_identifier.address().bus())); | ||||
|                 TRY(obj.add("device", device_identifier.address().device())); | ||||
|                 TRY(obj.add("function", device_identifier.address().function())); | ||||
|                 TRY(obj.add("vendor_id", device_identifier.hardware_id().vendor_id)); | ||||
|                 TRY(obj.add("device_id", device_identifier.hardware_id().device_id)); | ||||
|                 TRY(obj.add("revision_id", device_identifier.revision_id().value())); | ||||
|                 TRY(obj.add("subclass", device_identifier.subclass_code().value())); | ||||
|                 TRY(obj.add("class", device_identifier.class_code().value())); | ||||
|                 TRY(obj.add("subsystem_id", device_identifier.subsystem_id().value())); | ||||
|                 TRY(obj.add("subsystem_vendor_id", device_identifier.subsystem_vendor_id().value())); | ||||
|                 TRY(obj.add("domain"sv, device_identifier.address().domain())); | ||||
|                 TRY(obj.add("bus"sv, device_identifier.address().bus())); | ||||
|                 TRY(obj.add("device"sv, device_identifier.address().device())); | ||||
|                 TRY(obj.add("function"sv, device_identifier.address().function())); | ||||
|                 TRY(obj.add("vendor_id"sv, device_identifier.hardware_id().vendor_id)); | ||||
|                 TRY(obj.add("device_id"sv, device_identifier.hardware_id().device_id)); | ||||
|                 TRY(obj.add("revision_id"sv, device_identifier.revision_id().value())); | ||||
|                 TRY(obj.add("subclass"sv, device_identifier.subclass_code().value())); | ||||
|                 TRY(obj.add("class"sv, device_identifier.class_code().value())); | ||||
|                 TRY(obj.add("subsystem_id"sv, device_identifier.subsystem_id().value())); | ||||
|                 TRY(obj.add("subsystem_vendor_id"sv, device_identifier.subsystem_vendor_id().value())); | ||||
|                 TRY(obj.finish()); | ||||
|                 return {}; | ||||
|             })(); | ||||
|  | @ -781,14 +781,14 @@ private: | |||
|         auto array = TRY(JsonArraySerializer<>::try_create(builder)); | ||||
|         TRY(DeviceManagement::the().try_for_each([&array](auto& device) -> ErrorOr<void> { | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             TRY(obj.add("major", device.major().value())); | ||||
|             TRY(obj.add("minor", device.minor().value())); | ||||
|             TRY(obj.add("class_name", device.class_name())); | ||||
|             TRY(obj.add("major"sv, device.major().value())); | ||||
|             TRY(obj.add("minor"sv, device.minor().value())); | ||||
|             TRY(obj.add("class_name"sv, device.class_name())); | ||||
| 
 | ||||
|             if (device.is_block_device()) | ||||
|                 TRY(obj.add("type", "block")); | ||||
|                 TRY(obj.add("type"sv, "block")); | ||||
|             else if (device.is_character_device()) | ||||
|                 TRY(obj.add("type", "character")); | ||||
|                 TRY(obj.add("type"sv, "character")); | ||||
|             else | ||||
|                 VERIFY_NOT_REACHED(); | ||||
|             TRY(obj.finish()); | ||||
|  | @ -1048,8 +1048,8 @@ UNMAP_AFTER_INIT NonnullRefPtr<ProcFSRootDirectory> ProcFSRootDirectory::must_cr | |||
| ErrorOr<void> ProcFSRootDirectory::traverse_as_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     MutexLocker locker(ProcFSComponentRegistry::the().get_lock()); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, 0 }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, 0 }, 0 })); | ||||
| 
 | ||||
|     for (auto const& component : m_components) { | ||||
|         InodeIdentifier identifier = { fsid, component.component_index() }; | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ void ContiguousFramebufferConsole::set_resolution(size_t width, size_t height, s | |||
| 
 | ||||
|     size_t size = Memory::page_round_up(pitch * height).release_value_but_fixme_should_propagate_errors(); | ||||
|     dbgln("Framebuffer Console: taking {} bytes", size); | ||||
|     auto region_or_error = MM.allocate_kernel_region(m_framebuffer_address, size, "Framebuffer Console", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::Yes); | ||||
|     auto region_or_error = MM.allocate_kernel_region(m_framebuffer_address, size, "Framebuffer Console"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::Yes); | ||||
|     VERIFY(!region_or_error.is_error()); | ||||
|     m_framebuffer_region = region_or_error.release_value(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ namespace Kernel::Graphics { | |||
| 
 | ||||
| UNMAP_AFTER_INIT VGAConsole::VGAConsole(Mode mode, size_t width, size_t height) | ||||
|     : Console(width, height) | ||||
|     , m_vga_region(MM.allocate_kernel_region(PhysicalAddress(0xa0000), Memory::page_round_up(0xc0000 - 0xa0000).release_value_but_fixme_should_propagate_errors(), "VGA Display", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_vga_region(MM.allocate_kernel_region(PhysicalAddress(0xa0000), Memory::page_round_up(0xc0000 - 0xa0000).release_value_but_fixme_should_propagate_errors(), "VGA Display"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_mode(mode) | ||||
| { | ||||
| } | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ ErrorOr<Memory::Region*> DisplayConnector::mmap(Process& process, OpenFileDescri | |||
|         range, | ||||
|         *m_shared_framebuffer_vmobject, | ||||
|         0, | ||||
|         "Mapped Framebuffer", | ||||
|         "Mapped Framebuffer"sv, | ||||
|         prot, | ||||
|         shared); | ||||
| } | ||||
|  |  | |||
|  | @ -177,7 +177,7 @@ Optional<IntelGraphics::PLLSettings> IntelNativeDisplayConnector::create_pll_set | |||
| 
 | ||||
| NonnullRefPtr<IntelNativeDisplayConnector> IntelNativeDisplayConnector::must_create(PhysicalAddress framebuffer_address, size_t framebuffer_resource_size, PhysicalAddress registers_region_address, size_t registers_region_length) | ||||
| { | ||||
|     auto registers_region = MUST(MM.allocate_kernel_region(PhysicalAddress(registers_region_address), registers_region_length, "Intel Native Graphics Registers", Memory::Region::Access::ReadWrite)); | ||||
|     auto registers_region = MUST(MM.allocate_kernel_region(PhysicalAddress(registers_region_address), registers_region_length, "Intel Native Graphics Registers"sv, Memory::Region::Access::ReadWrite)); | ||||
|     auto device_or_error = DeviceManagement::try_create_device<IntelNativeDisplayConnector>(framebuffer_address, framebuffer_resource_size, move(registers_region)); | ||||
|     VERIFY(!device_or_error.is_error()); | ||||
|     auto connector = device_or_error.release_value(); | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ NonnullRefPtr<VirtIOGPU3DDevice> VirtIOGPU3DDevice::must_create(VirtIOGraphicsAd | |||
|     // Setup memory transfer region
 | ||||
|     auto region_result = MM.allocate_kernel_region( | ||||
|         NUM_TRANSFER_REGION_PAGES * PAGE_SIZE, | ||||
|         "VIRGL3D kernel upload buffer", | ||||
|         "VIRGL3D kernel upload buffer"sv, | ||||
|         Memory::Region::Access::ReadWrite, | ||||
|         AllocationStrategy::AllocateNow); | ||||
|     VERIFY(!region_result.is_error()); | ||||
|  |  | |||
|  | @ -106,7 +106,7 @@ private: | |||
|         { | ||||
|             auto region_result = TRY(MM.allocate_kernel_region( | ||||
|                 NUM_TRANSFER_REGION_PAGES * PAGE_SIZE, | ||||
|                 "VIRGL3D userspace upload buffer", | ||||
|                 "VIRGL3D userspace upload buffer"sv, | ||||
|                 Memory::Region::Access::ReadWrite, | ||||
|                 AllocationStrategy::AllocateNow)); | ||||
|             return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) PerContextState(context_id, move(region_result)))); | ||||
|  | @ -125,7 +125,7 @@ private: | |||
|     virtual bool can_write(OpenFileDescription const&, u64) const override { return true; } | ||||
|     virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return ENOTSUP; } | ||||
|     virtual ErrorOr<size_t> write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override { return ENOTSUP; } | ||||
|     virtual StringView class_name() const override { return "virgl3d"; } | ||||
|     virtual StringView class_name() const override { return "virgl3d"sv; } | ||||
| 
 | ||||
|     virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override; | ||||
|     virtual void detach(OpenFileDescription&) override; | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ NonnullRefPtr<VirtIOGraphicsAdapter> VirtIOGraphicsAdapter::initialize(PCI::Devi | |||
|     // Setup memory transfer region
 | ||||
|     auto scratch_space_region = MUST(MM.allocate_contiguous_kernel_region( | ||||
|         32 * PAGE_SIZE, | ||||
|         "VirtGPU Scratch Space", | ||||
|         "VirtGPU Scratch Space"sv, | ||||
|         Memory::Region::Access::ReadWrite)); | ||||
| 
 | ||||
|     auto adapter = adopt_ref(*new (nothrow) VirtIOGraphicsAdapter(device_identifier, move(scratch_space_region))); | ||||
|  |  | |||
|  | @ -271,7 +271,7 @@ UNMAP_AFTER_INIT bool APIC::init_bsp() | |||
|         dbgln("APIC: RSDP not found"); | ||||
|         return false; | ||||
|     } | ||||
|     auto madt_address = ACPI::StaticParsing::find_table(rsdp.value(), "APIC"); | ||||
|     auto madt_address = ACPI::StaticParsing::find_table(rsdp.value(), "APIC"sv); | ||||
|     if (!madt_address.has_value()) { | ||||
|         dbgln("APIC: MADT table not found"); | ||||
|         return false; | ||||
|  |  | |||
|  | @ -110,7 +110,7 @@ void SpuriousInterruptHandler::disable_interrupt_vector() | |||
| StringView SpuriousInterruptHandler::controller() const | ||||
| { | ||||
|     if (m_responsible_irq_controller->type() == IRQControllerType::i82093AA) | ||||
|         return ""; | ||||
|         return ""sv; | ||||
|     return m_responsible_irq_controller->model(); | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -105,19 +105,19 @@ ErrorOr<void> KBufferBuilder::append_escaped_for_json(StringView string) | |||
|     for (auto ch : string) { | ||||
|         switch (ch) { | ||||
|         case '\b': | ||||
|             TRY(append("\\b")); | ||||
|             TRY(append("\\b"sv)); | ||||
|             break; | ||||
|         case '\n': | ||||
|             TRY(append("\\n")); | ||||
|             TRY(append("\\n"sv)); | ||||
|             break; | ||||
|         case '\t': | ||||
|             TRY(append("\\t")); | ||||
|             TRY(append("\\t"sv)); | ||||
|             break; | ||||
|         case '\"': | ||||
|             TRY(append("\\\"")); | ||||
|             TRY(append("\\\""sv)); | ||||
|             break; | ||||
|         case '\\': | ||||
|             TRY(append("\\\\")); | ||||
|             TRY(append("\\\\"sv)); | ||||
|             break; | ||||
|         default: | ||||
|             if (ch >= 0 && ch <= 0x1f) | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ bool is_canonical(StringView path) | |||
|         return false; | ||||
|     if (path.starts_with("./"sv) || path.contains("/./"sv) || path.ends_with("/."sv)) | ||||
|         return false; | ||||
|     if (path.starts_with("../"sv) || path.contains("/../"sv) || path.ends_with("/..")) | ||||
|     if (path.starts_with("../"sv) || path.contains("/../"sv) || path.ends_with("/.."sv)) | ||||
|         return false; | ||||
|     if (path.contains("//"sv)) | ||||
|         return false; | ||||
|  |  | |||
|  | @ -986,7 +986,7 @@ ErrorOr<NonnullRefPtrVector<PhysicalPage>> MemoryManager::allocate_contiguous_us | |||
|         auto physical_pages = physical_region.take_contiguous_free_pages(page_count); | ||||
|         if (!physical_pages.is_empty()) { | ||||
|             { | ||||
|                 auto cleanup_region = TRY(MM.allocate_kernel_region(physical_pages[0].paddr(), PAGE_SIZE * page_count, "MemoryManager Allocation Sanitization", Region::Access::Read | Region::Access::Write)); | ||||
|                 auto cleanup_region = TRY(MM.allocate_kernel_region(physical_pages[0].paddr(), PAGE_SIZE * page_count, "MemoryManager Allocation Sanitization"sv, Region::Access::Read | Region::Access::Write)); | ||||
|                 memset(cleanup_region->vaddr().as_ptr(), 0, PAGE_SIZE * page_count); | ||||
|             } | ||||
|             m_system_memory_info.user_physical_pages_uncommitted -= page_count; | ||||
|  | @ -1012,7 +1012,7 @@ ErrorOr<NonnullRefPtrVector<PhysicalPage>> MemoryManager::allocate_contiguous_su | |||
|     } | ||||
| 
 | ||||
|     { | ||||
|         auto cleanup_region = TRY(MM.allocate_kernel_region(physical_pages[0].paddr(), PAGE_SIZE * count, "MemoryManager Allocation Sanitization", Region::Access::Read | Region::Access::Write)); | ||||
|         auto cleanup_region = TRY(MM.allocate_kernel_region(physical_pages[0].paddr(), PAGE_SIZE * count, "MemoryManager Allocation Sanitization"sv, Region::Access::Read | Region::Access::Write)); | ||||
|         memset(cleanup_region->vaddr().as_ptr(), 0, PAGE_SIZE * count); | ||||
|     } | ||||
|     m_system_memory_info.super_physical_pages_used += count; | ||||
|  |  | |||
|  | @ -51,10 +51,10 @@ enum class UsedMemoryRangeType { | |||
| }; | ||||
| 
 | ||||
| static constexpr StringView UserMemoryRangeTypeNames[] { | ||||
|     "Low memory", | ||||
|     "Kernel", | ||||
|     "Boot module", | ||||
|     "Physical Pages" | ||||
|     "Low memory"sv, | ||||
|     "Kernel"sv, | ||||
|     "Boot module"sv, | ||||
|     "Physical Pages"sv | ||||
| }; | ||||
| static_assert(array_size(UserMemoryRangeTypeNames) == to_underlying(UsedMemoryRangeType::__Count)); | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ RefPtr<ScatterGatherList> ScatterGatherList::try_create(AsyncBlockDeviceRequest& | |||
| ScatterGatherList::ScatterGatherList(NonnullRefPtr<AnonymousVMObject> vm_object, AsyncBlockDeviceRequest& request, size_t device_block_size) | ||||
|     : m_vm_object(move(vm_object)) | ||||
| { | ||||
|     auto region_or_error = MM.allocate_kernel_region_with_vmobject(m_vm_object, page_round_up((request.block_count() * device_block_size)).release_value_but_fixme_should_propagate_errors(), "AHCI Scattered DMA", Region::Access::Read | Region::Access::Write, Region::Cacheable::Yes); | ||||
|     auto region_or_error = MM.allocate_kernel_region_with_vmobject(m_vm_object, page_round_up((request.block_count() * device_block_size)).release_value_but_fixme_should_propagate_errors(), "AHCI Scattered DMA"sv, Region::Access::Read | Region::Access::Write, Region::Cacheable::Yes); | ||||
|     if (region_or_error.is_error()) | ||||
|         TODO(); | ||||
|     m_dma_region = region_or_error.release_value(); | ||||
|  |  | |||
|  | @ -64,6 +64,6 @@ template<> | |||
| struct AK::Formatter<Kernel::Memory::VirtualRange> : Formatter<FormatString> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, Kernel::Memory::VirtualRange value) | ||||
|     { | ||||
|         return Formatter<FormatString>::format(builder, "{} - {} (size {:p})", value.base().as_ptr(), value.base().offset(value.size() - 1).as_ptr(), value.size()); | ||||
|         return Formatter<FormatString>::format(builder, "{} - {} (size {:p})"sv, value.base().as_ptr(), value.base().offset(value.size() - 1).as_ptr(), value.size()); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -474,7 +474,7 @@ ErrorOr<NonnullOwnPtr<KString>> IPv4Socket::pseudo_path(OpenFileDescription cons | |||
|         return KString::try_create("socket"sv); | ||||
| 
 | ||||
|     StringBuilder builder; | ||||
|     TRY(builder.try_append("socket:")); | ||||
|     TRY(builder.try_append("socket:"sv)); | ||||
| 
 | ||||
|     TRY(builder.try_appendff("{}:{}", m_local_address.to_string(), m_local_port)); | ||||
|     if (m_role == Role::Accepted || m_role == Role::Connected) | ||||
|  | @ -482,16 +482,16 @@ ErrorOr<NonnullOwnPtr<KString>> IPv4Socket::pseudo_path(OpenFileDescription cons | |||
| 
 | ||||
|     switch (m_role) { | ||||
|     case Role::Listener: | ||||
|         TRY(builder.try_append(" (listening)")); | ||||
|         TRY(builder.try_append(" (listening)"sv)); | ||||
|         break; | ||||
|     case Role::Accepted: | ||||
|         TRY(builder.try_append(" (accepted)")); | ||||
|         TRY(builder.try_append(" (accepted)"sv)); | ||||
|         break; | ||||
|     case Role::Connected: | ||||
|         TRY(builder.try_append(" (connected)")); | ||||
|         TRY(builder.try_append(" (connected)"sv)); | ||||
|         break; | ||||
|     case Role::Connecting: | ||||
|         TRY(builder.try_append(" (connecting)")); | ||||
|         TRY(builder.try_append(" (connecting)"sv)); | ||||
|         break; | ||||
|     default: | ||||
|         VERIFY_NOT_REACHED(); | ||||
|  |  | |||
|  | @ -209,7 +209,7 @@ UNMAP_AFTER_INIT bool E1000ENetworkAdapter::initialize() | |||
|     enable_bus_mastering(pci_address()); | ||||
| 
 | ||||
|     size_t mmio_base_size = PCI::get_BAR_space_size(pci_address(), 0); | ||||
|     auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR0(pci_address()))), Memory::page_round_up(mmio_base_size).release_value_but_fixme_should_propagate_errors(), "E1000e MMIO", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|     auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR0(pci_address()))), Memory::page_round_up(mmio_base_size).release_value_but_fixme_should_propagate_errors(), "E1000e MMIO"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|     if (region_or_error.is_error()) | ||||
|         return false; | ||||
|     m_mmio_region = region_or_error.release_value(); | ||||
|  |  | |||
|  | @ -200,7 +200,7 @@ UNMAP_AFTER_INIT bool E1000NetworkAdapter::initialize() | |||
|     m_io_base = IOAddress(PCI::get_BAR1(pci_address()) & ~1); | ||||
| 
 | ||||
|     size_t mmio_base_size = PCI::get_BAR_space_size(pci_address(), 0); | ||||
|     auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR0(pci_address()))), Memory::page_round_up(mmio_base_size).release_value_but_fixme_should_propagate_errors(), "E1000 MMIO", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|     auto region_or_error = MM.allocate_kernel_region(PhysicalAddress(page_base_of(PCI::get_BAR0(pci_address()))), Memory::page_round_up(mmio_base_size).release_value_but_fixme_should_propagate_errors(), "E1000 MMIO"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No); | ||||
|     if (region_or_error.is_error()) | ||||
|         return false; | ||||
|     m_mmio_region = region_or_error.release_value(); | ||||
|  | @ -231,8 +231,8 @@ UNMAP_AFTER_INIT E1000NetworkAdapter::E1000NetworkAdapter(PCI::Address address, | |||
|     : NetworkAdapter(move(interface_name)) | ||||
|     , PCI::Device(address) | ||||
|     , IRQHandler(irq) | ||||
|     , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 RX Descriptors", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 TX Descriptors", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_rx_desc) * number_of_rx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 RX Descriptors"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(e1000_tx_desc) * number_of_tx_descriptors).release_value_but_fixme_should_propagate_errors(), "E1000 TX Descriptors"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
| { | ||||
| } | ||||
| 
 | ||||
|  | @ -324,7 +324,7 @@ UNMAP_AFTER_INIT void E1000NetworkAdapter::initialize_rx_descriptors() | |||
|     constexpr auto rx_buffer_size = 8192; | ||||
|     constexpr auto rx_buffer_page_count = rx_buffer_size / PAGE_SIZE; | ||||
| 
 | ||||
|     m_rx_buffer_region = MM.allocate_contiguous_kernel_region(rx_buffer_size * number_of_rx_descriptors, "E1000 RX buffers", Memory::Region::Access::ReadWrite).release_value(); | ||||
|     m_rx_buffer_region = MM.allocate_contiguous_kernel_region(rx_buffer_size * number_of_rx_descriptors, "E1000 RX buffers"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
|     for (size_t i = 0; i < number_of_rx_descriptors; ++i) { | ||||
|         auto& descriptor = rx_descriptors[i]; | ||||
|         m_rx_buffers[i] = m_rx_buffer_region->vaddr().as_ptr() + rx_buffer_size * i; | ||||
|  | @ -347,7 +347,7 @@ UNMAP_AFTER_INIT void E1000NetworkAdapter::initialize_tx_descriptors() | |||
| 
 | ||||
|     constexpr auto tx_buffer_size = 8192; | ||||
|     constexpr auto tx_buffer_page_count = tx_buffer_size / PAGE_SIZE; | ||||
|     m_tx_buffer_region = MM.allocate_contiguous_kernel_region(tx_buffer_size * number_of_tx_descriptors, "E1000 TX buffers", Memory::Region::Access::ReadWrite).release_value(); | ||||
|     m_tx_buffer_region = MM.allocate_contiguous_kernel_region(tx_buffer_size * number_of_tx_descriptors, "E1000 TX buffers"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
| 
 | ||||
|     for (size_t i = 0; i < number_of_tx_descriptors; ++i) { | ||||
|         auto& descriptor = tx_descriptors[i]; | ||||
|  | @ -446,7 +446,7 @@ void E1000NetworkAdapter::send_raw(ReadonlyBytes payload) | |||
|             sti(); | ||||
|             break; | ||||
|         } | ||||
|         m_wait_queue.wait_forever("E1000NetworkAdapter"); | ||||
|         m_wait_queue.wait_forever("E1000NetworkAdapter"sv); | ||||
|     } | ||||
|     dbgln_if(E1000_DEBUG, "E1000: Sent packet, status is now {:#02x}!", (u8)descriptor.status); | ||||
| } | ||||
|  |  | |||
|  | @ -368,12 +368,12 @@ StringView LocalSocket::socket_path() const | |||
| ErrorOr<NonnullOwnPtr<KString>> LocalSocket::pseudo_path(OpenFileDescription const& description) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
|     TRY(builder.try_append("socket:")); | ||||
|     TRY(builder.try_append("socket:"sv)); | ||||
|     TRY(builder.try_append(socket_path())); | ||||
| 
 | ||||
|     switch (role(description)) { | ||||
|     case Role::Listener: | ||||
|         TRY(builder.try_append(" (listening)")); | ||||
|         TRY(builder.try_append(" (listening)"sv)); | ||||
|         break; | ||||
|     case Role::Accepted: | ||||
|         TRY(builder.try_appendff(" (accepted from pid {})", origin_pid())); | ||||
|  | @ -382,7 +382,7 @@ ErrorOr<NonnullOwnPtr<KString>> LocalSocket::pseudo_path(OpenFileDescription con | |||
|         TRY(builder.try_appendff(" (connected to pid {})", acceptor_pid())); | ||||
|         break; | ||||
|     case Role::Connecting: | ||||
|         TRY(builder.try_append(" (connecting)")); | ||||
|         TRY(builder.try_append(" (connecting)"sv)); | ||||
|         break; | ||||
|     default: | ||||
|         break; | ||||
|  |  | |||
|  | @ -379,7 +379,7 @@ void NE2000NetworkAdapter::send_raw(ReadonlyBytes payload) | |||
|     } | ||||
| 
 | ||||
|     while (in8(REG_RW_COMMAND) & BIT_COMMAND_TXP) | ||||
|         m_wait_queue.wait_forever("NE2000NetworkAdapter"); | ||||
|         m_wait_queue.wait_forever("NE2000NetworkAdapter"sv); | ||||
| 
 | ||||
|     disable_irq(); | ||||
|     size_t packet_size = payload.size(); | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ static HashTable<RefPtr<TCPSocket>>* delayed_ack_sockets; | |||
| void NetworkTask::spawn() | ||||
| { | ||||
|     RefPtr<Thread> thread; | ||||
|     auto name = KString::try_create("Network Task"); | ||||
|     auto name = KString::try_create("Network Task"sv); | ||||
|     if (name.is_error()) | ||||
|         TODO(); | ||||
|     (void)Process::create_kernel_process(thread, name.release_value(), NetworkTask_main, nullptr); | ||||
|  | @ -90,7 +90,7 @@ void NetworkTask_main(void*) | |||
|     }; | ||||
| 
 | ||||
|     size_t buffer_size = 64 * KiB; | ||||
|     auto region_or_error = MM.allocate_kernel_region(buffer_size, "Kernel Packet Buffer", Memory::Region::Access::ReadWrite); | ||||
|     auto region_or_error = MM.allocate_kernel_region(buffer_size, "Kernel Packet Buffer"sv, Memory::Region::Access::ReadWrite); | ||||
|     if (region_or_error.is_error()) | ||||
|         TODO(); | ||||
|     auto buffer_region = region_or_error.release_value(); | ||||
|  | @ -104,7 +104,7 @@ void NetworkTask_main(void*) | |||
|         if (!packet_size) { | ||||
|             auto timeout_time = Time::from_milliseconds(500); | ||||
|             auto timeout = Thread::BlockTimeout { false, &timeout_time }; | ||||
|             [[maybe_unused]] auto result = packet_wait_queue.wait_on(timeout, "NetworkTask"); | ||||
|             [[maybe_unused]] auto result = packet_wait_queue.wait_on(timeout, "NetworkTask"sv); | ||||
|             continue; | ||||
|         } | ||||
|         if (packet_size < sizeof(EthernetFrameHeader)) { | ||||
|  |  | |||
|  | @ -131,8 +131,8 @@ UNMAP_AFTER_INIT RTL8139NetworkAdapter::RTL8139NetworkAdapter(PCI::Address addre | |||
|     , PCI::Device(address) | ||||
|     , IRQHandler(irq) | ||||
|     , m_io_base(PCI::get_BAR0(pci_address()) & ~1) | ||||
|     , m_rx_buffer(MM.allocate_contiguous_kernel_region(Memory::page_round_up(RX_BUFFER_SIZE + PACKET_SIZE_MAX).release_value_but_fixme_should_propagate_errors(), "RTL8139 RX", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_packet_buffer(MM.allocate_contiguous_kernel_region(Memory::page_round_up(PACKET_SIZE_MAX).release_value_but_fixme_should_propagate_errors(), "RTL8139 Packet buffer", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_rx_buffer(MM.allocate_contiguous_kernel_region(Memory::page_round_up(RX_BUFFER_SIZE + PACKET_SIZE_MAX).release_value_but_fixme_should_propagate_errors(), "RTL8139 RX"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_packet_buffer(MM.allocate_contiguous_kernel_region(Memory::page_round_up(PACKET_SIZE_MAX).release_value_but_fixme_should_propagate_errors(), "RTL8139 Packet buffer"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
| { | ||||
|     m_tx_buffers.ensure_capacity(RTL8139_TX_BUFFER_COUNT); | ||||
| 
 | ||||
|  | @ -149,7 +149,7 @@ UNMAP_AFTER_INIT RTL8139NetworkAdapter::RTL8139NetworkAdapter(PCI::Address addre | |||
|     dbgln("RTL8139: RX buffer: {}", m_rx_buffer->physical_page(0)->paddr()); | ||||
| 
 | ||||
|     for (int i = 0; i < RTL8139_TX_BUFFER_COUNT; i++) { | ||||
|         m_tx_buffers.append(MM.allocate_contiguous_kernel_region(Memory::page_round_up(TX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8139 TX", Memory::Region::Access::Write | Memory::Region::Access::Read).release_value()); | ||||
|         m_tx_buffers.append(MM.allocate_contiguous_kernel_region(Memory::page_round_up(TX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8139 TX"sv, Memory::Region::Access::Write | Memory::Region::Access::Read).release_value()); | ||||
|         dbgln("RTL8139: TX buffer {}: {}", i, m_tx_buffers[i]->physical_page(0)->paddr()); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -246,8 +246,8 @@ UNMAP_AFTER_INIT RTL8168NetworkAdapter::RTL8168NetworkAdapter(PCI::Address addre | |||
|     , PCI::Device(address) | ||||
|     , IRQHandler(irq) | ||||
|     , m_io_base(PCI::get_BAR0(pci_address()) & ~1) | ||||
|     , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(TXDescriptor) * (number_of_rx_descriptors + 1)).release_value_but_fixme_should_propagate_errors(), "RTL8168 RX", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(RXDescriptor) * (number_of_tx_descriptors + 1)).release_value_but_fixme_should_propagate_errors(), "RTL8168 TX", Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_rx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(TXDescriptor) * (number_of_rx_descriptors + 1)).release_value_but_fixme_should_propagate_errors(), "RTL8168 RX"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
|     , m_tx_descriptors_region(MM.allocate_contiguous_kernel_region(Memory::page_round_up(sizeof(RXDescriptor) * (number_of_tx_descriptors + 1)).release_value_but_fixme_should_propagate_errors(), "RTL8168 TX"sv, Memory::Region::Access::ReadWrite).release_value()) | ||||
| { | ||||
|     dmesgln("RTL8168: Found @ {}", pci_address()); | ||||
|     dmesgln("RTL8168: I/O port base: {}", m_io_base); | ||||
|  | @ -1095,7 +1095,7 @@ UNMAP_AFTER_INIT void RTL8168NetworkAdapter::initialize_rx_descriptors() | |||
|     auto* rx_descriptors = (RXDescriptor*)m_rx_descriptors_region->vaddr().as_ptr(); | ||||
|     for (size_t i = 0; i < number_of_rx_descriptors; ++i) { | ||||
|         auto& descriptor = rx_descriptors[i]; | ||||
|         auto region = MM.allocate_contiguous_kernel_region(Memory::page_round_up(RX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8168 RX buffer", Memory::Region::Access::ReadWrite).release_value(); | ||||
|         auto region = MM.allocate_contiguous_kernel_region(Memory::page_round_up(RX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8168 RX buffer"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
|         memset(region->vaddr().as_ptr(), 0, region->size()); // MM already zeros out newly allocated pages, but we do it again in case that ever changes
 | ||||
|         m_rx_buffers_regions.append(move(region)); | ||||
| 
 | ||||
|  | @ -1113,7 +1113,7 @@ UNMAP_AFTER_INIT void RTL8168NetworkAdapter::initialize_tx_descriptors() | |||
|     auto* tx_descriptors = (TXDescriptor*)m_tx_descriptors_region->vaddr().as_ptr(); | ||||
|     for (size_t i = 0; i < number_of_tx_descriptors; ++i) { | ||||
|         auto& descriptor = tx_descriptors[i]; | ||||
|         auto region = MM.allocate_contiguous_kernel_region(Memory::page_round_up(TX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8168 TX buffer", Memory::Region::Access::ReadWrite).release_value(); | ||||
|         auto region = MM.allocate_contiguous_kernel_region(Memory::page_round_up(TX_BUFFER_SIZE).release_value_but_fixme_should_propagate_errors(), "RTL8168 TX buffer"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
|         memset(region->vaddr().as_ptr(), 0, region->size()); // MM already zeros out newly allocated pages, but we do it again in case that ever changes
 | ||||
|         m_tx_buffers_regions.append(move(region)); | ||||
| 
 | ||||
|  | @ -1204,7 +1204,7 @@ void RTL8168NetworkAdapter::send_raw(ReadonlyBytes payload) | |||
| 
 | ||||
|     if ((free_descriptor.flags & TXDescriptor::Ownership) != 0) { | ||||
|         dbgln_if(RTL8168_DEBUG, "RTL8168: No free TX buffers, sleeping until one is available"); | ||||
|         m_wait_queue.wait_forever("RTL8168NetworkAdapter"); | ||||
|         m_wait_queue.wait_forever("RTL8168NetworkAdapter"sv); | ||||
|         return send_raw(payload); | ||||
|         // if we woke up a TX descriptor is guaranteed to be available, so this should never recurse more than once
 | ||||
|         // but this can probably be done more cleanly
 | ||||
|  | @ -1664,7 +1664,7 @@ StringView RTL8168NetworkAdapter::possible_device_name() | |||
|     case ChipVersion::Version19: | ||||
|         return "RTL8168F/8111F"sv; // 35, 36
 | ||||
|     case ChipVersion::Version20: | ||||
|         return "RTL8411"; // 38
 | ||||
|         return "RTL8411"sv; // 38
 | ||||
|     case ChipVersion::Version21: | ||||
|     case ChipVersion::Version22: | ||||
|         return "RTL8168G/8111G"sv; // 40, 41, 42
 | ||||
|  | @ -1676,7 +1676,7 @@ StringView RTL8168NetworkAdapter::possible_device_name() | |||
|     case ChipVersion::Version25: | ||||
|         return "RTL8168GU/8111GU"sv; // ???
 | ||||
|     case ChipVersion::Version26: | ||||
|         return "RTL8411B"; // 44
 | ||||
|         return "RTL8411B"sv; // 44
 | ||||
|     case ChipVersion::Version29: | ||||
|     case ChipVersion::Version30: | ||||
|         return "RTL8168H/8111H"sv; // 45, 46
 | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ public: | |||
|         case State::TimeWait: | ||||
|             return "TimeWait"sv; | ||||
|         default: | ||||
|             return "None"; | ||||
|             return "None"sv; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -191,7 +191,7 @@ template<typename Serializer> | |||
| ErrorOr<void> PerformanceEventBuffer::to_json_impl(Serializer& object) const | ||||
| { | ||||
|     { | ||||
|         auto strings = TRY(object.add_array("strings")); | ||||
|         auto strings = TRY(object.add_array("strings"sv)); | ||||
|         Vector<KString*> strings_sorted_by_index; | ||||
|         TRY(strings_sorted_by_index.try_resize(m_strings.size())); | ||||
| 
 | ||||
|  | @ -207,7 +207,7 @@ ErrorOr<void> PerformanceEventBuffer::to_json_impl(Serializer& object) const | |||
|     } | ||||
| 
 | ||||
|     bool show_kernel_addresses = Process::current().is_superuser(); | ||||
|     auto array = TRY(object.add_array("events")); | ||||
|     auto array = TRY(object.add_array("events"sv)); | ||||
|     bool seen_first_sample = false; | ||||
|     for (size_t i = 0; i < m_count; ++i) { | ||||
|         auto const& event = at(i); | ||||
|  | @ -220,67 +220,67 @@ ErrorOr<void> PerformanceEventBuffer::to_json_impl(Serializer& object) const | |||
|         auto event_object = TRY(array.add_object()); | ||||
|         switch (event.type) { | ||||
|         case PERF_EVENT_SAMPLE: | ||||
|             TRY(event_object.add("type", "sample")); | ||||
|             TRY(event_object.add("type"sv, "sample")); | ||||
|             break; | ||||
|         case PERF_EVENT_MALLOC: | ||||
|             TRY(event_object.add("type", "malloc")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.malloc.ptr))); | ||||
|             TRY(event_object.add("size", static_cast<u64>(event.data.malloc.size))); | ||||
|             TRY(event_object.add("type"sv, "malloc")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.malloc.ptr))); | ||||
|             TRY(event_object.add("size"sv, static_cast<u64>(event.data.malloc.size))); | ||||
|             break; | ||||
|         case PERF_EVENT_FREE: | ||||
|             TRY(event_object.add("type", "free")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.free.ptr))); | ||||
|             TRY(event_object.add("type"sv, "free")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.free.ptr))); | ||||
|             break; | ||||
|         case PERF_EVENT_MMAP: | ||||
|             TRY(event_object.add("type", "mmap")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.mmap.ptr))); | ||||
|             TRY(event_object.add("size", static_cast<u64>(event.data.mmap.size))); | ||||
|             TRY(event_object.add("name", event.data.mmap.name)); | ||||
|             TRY(event_object.add("type"sv, "mmap")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.mmap.ptr))); | ||||
|             TRY(event_object.add("size"sv, static_cast<u64>(event.data.mmap.size))); | ||||
|             TRY(event_object.add("name"sv, event.data.mmap.name)); | ||||
|             break; | ||||
|         case PERF_EVENT_MUNMAP: | ||||
|             TRY(event_object.add("type", "munmap")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.munmap.ptr))); | ||||
|             TRY(event_object.add("size", static_cast<u64>(event.data.munmap.size))); | ||||
|             TRY(event_object.add("type"sv, "munmap")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.munmap.ptr))); | ||||
|             TRY(event_object.add("size"sv, static_cast<u64>(event.data.munmap.size))); | ||||
|             break; | ||||
|         case PERF_EVENT_PROCESS_CREATE: | ||||
|             TRY(event_object.add("type", "process_create")); | ||||
|             TRY(event_object.add("parent_pid", static_cast<u64>(event.data.process_create.parent_pid))); | ||||
|             TRY(event_object.add("executable", event.data.process_create.executable)); | ||||
|             TRY(event_object.add("type"sv, "process_create")); | ||||
|             TRY(event_object.add("parent_pid"sv, static_cast<u64>(event.data.process_create.parent_pid))); | ||||
|             TRY(event_object.add("executable"sv, event.data.process_create.executable)); | ||||
|             break; | ||||
|         case PERF_EVENT_PROCESS_EXEC: | ||||
|             TRY(event_object.add("type", "process_exec")); | ||||
|             TRY(event_object.add("executable", event.data.process_exec.executable)); | ||||
|             TRY(event_object.add("type"sv, "process_exec")); | ||||
|             TRY(event_object.add("executable"sv, event.data.process_exec.executable)); | ||||
|             break; | ||||
|         case PERF_EVENT_PROCESS_EXIT: | ||||
|             TRY(event_object.add("type", "process_exit")); | ||||
|             TRY(event_object.add("type"sv, "process_exit")); | ||||
|             break; | ||||
|         case PERF_EVENT_THREAD_CREATE: | ||||
|             TRY(event_object.add("type", "thread_create")); | ||||
|             TRY(event_object.add("parent_tid", static_cast<u64>(event.data.thread_create.parent_tid))); | ||||
|             TRY(event_object.add("type"sv, "thread_create")); | ||||
|             TRY(event_object.add("parent_tid"sv, static_cast<u64>(event.data.thread_create.parent_tid))); | ||||
|             break; | ||||
|         case PERF_EVENT_THREAD_EXIT: | ||||
|             TRY(event_object.add("type", "thread_exit")); | ||||
|             TRY(event_object.add("type"sv, "thread_exit")); | ||||
|             break; | ||||
|         case PERF_EVENT_CONTEXT_SWITCH: | ||||
|             TRY(event_object.add("type", "context_switch")); | ||||
|             TRY(event_object.add("next_pid", static_cast<u64>(event.data.context_switch.next_pid))); | ||||
|             TRY(event_object.add("next_tid", static_cast<u64>(event.data.context_switch.next_tid))); | ||||
|             TRY(event_object.add("type"sv, "context_switch")); | ||||
|             TRY(event_object.add("next_pid"sv, static_cast<u64>(event.data.context_switch.next_pid))); | ||||
|             TRY(event_object.add("next_tid"sv, static_cast<u64>(event.data.context_switch.next_tid))); | ||||
|             break; | ||||
|         case PERF_EVENT_KMALLOC: | ||||
|             TRY(event_object.add("type", "kmalloc")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.kmalloc.ptr))); | ||||
|             TRY(event_object.add("size", static_cast<u64>(event.data.kmalloc.size))); | ||||
|             TRY(event_object.add("type"sv, "kmalloc")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.kmalloc.ptr))); | ||||
|             TRY(event_object.add("size"sv, static_cast<u64>(event.data.kmalloc.size))); | ||||
|             break; | ||||
|         case PERF_EVENT_KFREE: | ||||
|             TRY(event_object.add("type", "kfree")); | ||||
|             TRY(event_object.add("ptr", static_cast<u64>(event.data.kfree.ptr))); | ||||
|             TRY(event_object.add("size", static_cast<u64>(event.data.kfree.size))); | ||||
|             TRY(event_object.add("type"sv, "kfree")); | ||||
|             TRY(event_object.add("ptr"sv, static_cast<u64>(event.data.kfree.ptr))); | ||||
|             TRY(event_object.add("size"sv, static_cast<u64>(event.data.kfree.size))); | ||||
|             break; | ||||
|         case PERF_EVENT_PAGE_FAULT: | ||||
|             TRY(event_object.add("type", "page_fault")); | ||||
|             TRY(event_object.add("type"sv, "page_fault")); | ||||
|             break; | ||||
|         case PERF_EVENT_SYSCALL: | ||||
|             TRY(event_object.add("type", "syscall")); | ||||
|             TRY(event_object.add("type"sv, "syscall")); | ||||
|             break; | ||||
|         case PERF_EVENT_SIGNPOST: | ||||
|             TRY(event_object.add("type"sv, "signpost"sv)); | ||||
|  | @ -288,21 +288,21 @@ ErrorOr<void> PerformanceEventBuffer::to_json_impl(Serializer& object) const | |||
|             TRY(event_object.add("arg2"sv, event.data.signpost.arg2)); | ||||
|             break; | ||||
|         case PERF_EVENT_READ: | ||||
|             TRY(event_object.add("type", "read")); | ||||
|             TRY(event_object.add("fd", event.data.read.fd)); | ||||
|             TRY(event_object.add("type"sv, "read")); | ||||
|             TRY(event_object.add("fd"sv, event.data.read.fd)); | ||||
|             TRY(event_object.add("size"sv, event.data.read.size)); | ||||
|             TRY(event_object.add("filename_index"sv, event.data.read.filename_index)); | ||||
|             TRY(event_object.add("start_timestamp"sv, event.data.read.start_timestamp)); | ||||
|             TRY(event_object.add("success"sv, event.data.read.success)); | ||||
|             break; | ||||
|         } | ||||
|         TRY(event_object.add("pid", event.pid)); | ||||
|         TRY(event_object.add("tid", event.tid)); | ||||
|         TRY(event_object.add("timestamp", event.timestamp)); | ||||
|         TRY(event_object.add("lost_samples", seen_first_sample ? event.lost_samples : 0)); | ||||
|         TRY(event_object.add("pid"sv, event.pid)); | ||||
|         TRY(event_object.add("tid"sv, event.tid)); | ||||
|         TRY(event_object.add("timestamp"sv, event.timestamp)); | ||||
|         TRY(event_object.add("lost_samples"sv, seen_first_sample ? event.lost_samples : 0)); | ||||
|         if (event.type == PERF_EVENT_SAMPLE) | ||||
|             seen_first_sample = true; | ||||
|         auto stack_array = TRY(event_object.add_array("stack")); | ||||
|         auto stack_array = TRY(event_object.add_array("stack"sv)); | ||||
|         for (size_t j = 0; j < event.stack_size; ++j) { | ||||
|             auto address = event.stack[j]; | ||||
|             if (!show_kernel_addresses && !Memory::is_user_address(VirtualAddress { address })) | ||||
|  |  | |||
|  | @ -149,7 +149,7 @@ public: | |||
|                 return; | ||||
|             filepath_string_index = registered_result.value(); | ||||
|         } else { | ||||
|             auto invalid_path_string = KString::try_create("<INVALID_FILE_PATH>"); // TODO: Performance, unecessary allocations.
 | ||||
|             auto invalid_path_string = KString::try_create("<INVALID_FILE_PATH>"sv); // TODO: Performance, unecessary allocations.
 | ||||
|             if (invalid_path_string.is_error()) | ||||
|                 return; | ||||
|             auto registered_result = event_buffer->register_string(move(invalid_path_string.value())); | ||||
|  |  | |||
|  | @ -61,8 +61,8 @@ struct AK::Formatter<PhysicalAddress> : AK::Formatter<FormatString> { | |||
|     ErrorOr<void> format(FormatBuilder& builder, PhysicalAddress value) | ||||
|     { | ||||
|         if constexpr (sizeof(PhysicalPtr) == sizeof(u64)) | ||||
|             return AK::Formatter<FormatString>::format(builder, "P{:016x}", value.get()); | ||||
|             return AK::Formatter<FormatString>::format(builder, "P{:016x}"sv, value.get()); | ||||
|         else | ||||
|             return AK::Formatter<FormatString>::format(builder, "P{}", value.as_ptr()); | ||||
|             return AK::Formatter<FormatString>::format(builder, "P{}"sv, value.as_ptr()); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -374,7 +374,7 @@ extern "C" char const asm_signal_trampoline_end[]; | |||
| void create_signal_trampoline() | ||||
| { | ||||
|     // NOTE: We leak this region.
 | ||||
|     g_signal_trampoline_region = MM.allocate_kernel_region(PAGE_SIZE, "Signal trampolines", Memory::Region::Access::ReadWrite).release_value().leak_ptr(); | ||||
|     g_signal_trampoline_region = MM.allocate_kernel_region(PAGE_SIZE, "Signal trampolines"sv, Memory::Region::Access::ReadWrite).release_value().leak_ptr(); | ||||
|     g_signal_trampoline_region->set_syscall_region(true); | ||||
| 
 | ||||
|     size_t trampoline_size = asm_signal_trampoline_end - asm_signal_trampoline; | ||||
|  | @ -905,7 +905,7 @@ static constexpr StringView to_string(Pledge promise) | |||
| { | ||||
| #define __ENUMERATE_PLEDGE_PROMISE(x) \ | ||||
|     case Pledge::x:                   \ | ||||
|         return #x; | ||||
|         return #x##sv; | ||||
|     switch (promise) { | ||||
|         ENUMERATE_PLEDGE_PROMISES | ||||
|     } | ||||
|  |  | |||
|  | @ -819,8 +819,8 @@ private: | |||
|     size_t m_master_tls_size { 0 }; | ||||
|     size_t m_master_tls_alignment { 0 }; | ||||
| 
 | ||||
|     Mutex m_big_lock { "Process", Mutex::MutexBehavior::BigLock }; | ||||
|     Mutex m_ptrace_lock { "ptrace" }; | ||||
|     Mutex m_big_lock { "Process"sv, Mutex::MutexBehavior::BigLock }; | ||||
|     Mutex m_ptrace_lock { "ptrace"sv }; | ||||
| 
 | ||||
|     RefPtr<Timer> m_alarm_timer; | ||||
| 
 | ||||
|  | @ -1036,6 +1036,6 @@ template<> | |||
| struct AK::Formatter<Kernel::Process> : AK::Formatter<FormatString> { | ||||
|     ErrorOr<void> format(FormatBuilder& builder, Kernel::Process const& value) | ||||
|     { | ||||
|         return AK::Formatter<FormatString>::format(builder, "{}({})", value.name(), value.pid().value()); | ||||
|         return AK::Formatter<FormatString>::format(builder, "{}({})"sv, value.name(), value.pid().value()); | ||||
|     } | ||||
| }; | ||||
|  |  | |||
|  | @ -241,8 +241,8 @@ ErrorOr<void> ProcFSExposedDirectory::traverse_as_directory(FileSystemID fsid, F | |||
|     auto parent_directory = m_parent_directory.strong_ref(); | ||||
|     if (parent_directory.is_null()) | ||||
|         return Error::from_errno(EINVAL); | ||||
|     TRY(callback({ ".", { fsid, component_index() }, DT_DIR })); | ||||
|     TRY(callback({ "..", { fsid, parent_directory->component_index() }, DT_DIR })); | ||||
|     TRY(callback({ "."sv, { fsid, component_index() }, DT_DIR })); | ||||
|     TRY(callback({ ".."sv, { fsid, parent_directory->component_index() }, DT_DIR })); | ||||
| 
 | ||||
|     for (auto const& component : m_components) { | ||||
|         InodeIdentifier identifier = { fsid, component.component_index() }; | ||||
|  |  | |||
|  | @ -138,7 +138,7 @@ public: | |||
| protected: | ||||
|     virtual bool acquire_link(KBufferBuilder& builder) = 0; | ||||
|     explicit ProcFSExposedLink(StringView name); | ||||
|     mutable Mutex m_lock { "ProcFSLink" }; | ||||
|     mutable Mutex m_lock { "ProcFSLink"sv }; | ||||
| }; | ||||
| 
 | ||||
| namespace PCI { | ||||
|  |  | |||
|  | @ -51,19 +51,19 @@ ErrorOr<void> Process::ProcessProcFSTraits::traverse_as_directory(FileSystemID f | |||
|     if (!process) | ||||
|         return ESRCH; | ||||
| 
 | ||||
|     TRY(callback({ ".", { fsid, SegmentedProcFSIndex::build_segmented_index_for_pid_directory(process->pid()) }, DT_DIR })); | ||||
|     TRY(callback({ "..", { fsid, ProcFSComponentRegistry::the().root_directory().component_index() }, DT_DIR })); | ||||
|     TRY(callback({ "fd", { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::OpenFileDescriptions) }, DT_DIR })); | ||||
|     TRY(callback({ "stacks", { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks) }, DT_DIR })); | ||||
|     TRY(callback({ "children", { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::Children) }, DT_DIR })); | ||||
|     TRY(callback({ "unveil", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::Unveil) }, DT_REG })); | ||||
|     TRY(callback({ "pledge", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::Pledge) }, DT_REG })); | ||||
|     TRY(callback({ "fds", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::OpenFileDescriptions) }, DT_DIR })); | ||||
|     TRY(callback({ "exe", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::BinaryLink) }, DT_LNK })); | ||||
|     TRY(callback({ "cwd", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::CurrentWorkDirectoryLink) }, DT_LNK })); | ||||
|     TRY(callback({ "perf_events", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::PerformanceEvents) }, DT_REG })); | ||||
|     TRY(callback({ "vm", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::VirtualMemoryStats) }, DT_REG })); | ||||
|     TRY(callback({ "cmdline", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::CommandLine) }, DT_REG })); | ||||
|     TRY(callback({ "."sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_pid_directory(process->pid()) }, DT_DIR })); | ||||
|     TRY(callback({ ".."sv, { fsid, ProcFSComponentRegistry::the().root_directory().component_index() }, DT_DIR })); | ||||
|     TRY(callback({ "fd"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::OpenFileDescriptions) }, DT_DIR })); | ||||
|     TRY(callback({ "stacks"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks) }, DT_DIR })); | ||||
|     TRY(callback({ "children"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(process->pid(), SegmentedProcFSIndex::ProcessSubDirectory::Children) }, DT_DIR })); | ||||
|     TRY(callback({ "unveil"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::Unveil) }, DT_REG })); | ||||
|     TRY(callback({ "pledge"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::Pledge) }, DT_REG })); | ||||
|     TRY(callback({ "fds"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::OpenFileDescriptions) }, DT_DIR })); | ||||
|     TRY(callback({ "exe"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::BinaryLink) }, DT_LNK })); | ||||
|     TRY(callback({ "cwd"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::CurrentWorkDirectoryLink) }, DT_LNK })); | ||||
|     TRY(callback({ "perf_events"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::PerformanceEvents) }, DT_REG })); | ||||
|     TRY(callback({ "vm"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::VirtualMemoryStats) }, DT_REG })); | ||||
|     TRY(callback({ "cmdline"sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property_in_pid_directory(process->pid(), SegmentedProcFSIndex::MainProcessProperty::CommandLine) }, DT_REG })); | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,8 +43,8 @@ ErrorOr<void> Process::procfs_get_thread_stack(ThreadID thread_id, KBufferBuilde | |||
| 
 | ||||
| ErrorOr<void> Process::traverse_stacks_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     TRY(callback({ ".", { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks, SegmentedProcFSIndex::MainProcessProperty::Reserved) }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_main_property(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Stacks, SegmentedProcFSIndex::MainProcessProperty::Reserved) }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
| 
 | ||||
|     return thread_list().with([&](auto& list) -> ErrorOr<void> { | ||||
|         for (auto const& thread : list) { | ||||
|  | @ -82,8 +82,8 @@ ErrorOr<NonnullRefPtr<Inode>> Process::lookup_stacks_directory(ProcFS const& pro | |||
| 
 | ||||
| ErrorOr<void> Process::traverse_children_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     TRY(callback({ ".", { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Children) }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, SegmentedProcFSIndex::build_segmented_index_for_sub_directory(pid(), SegmentedProcFSIndex::ProcessSubDirectory::Children) }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     return Process::all_instances().with([&](auto& processes) -> ErrorOr<void> { | ||||
|         for (auto& process : processes) { | ||||
|             if (process.ppid() == pid()) { | ||||
|  | @ -126,8 +126,8 @@ ErrorOr<size_t> Process::procfs_get_file_description_link(unsigned fd, KBufferBu | |||
| 
 | ||||
| ErrorOr<void> Process::traverse_file_descriptions_directory(FileSystemID fsid, Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const | ||||
| { | ||||
|     TRY(callback({ ".", { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     TRY(callback({ "..", { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     TRY(callback({ "."sv, { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     TRY(callback({ ".."sv, { fsid, m_procfs_traits->component_index() }, 0 })); | ||||
|     size_t count = 0; | ||||
|     fds().with_shared([&](auto& fds) { | ||||
|         fds.enumerate([&](auto& file_description_metadata) { | ||||
|  | @ -164,12 +164,12 @@ ErrorOr<void> Process::procfs_get_pledge_stats(KBufferBuilder& builder) const | |||
|     if (has_promised(Pledge::x)) {                 \ | ||||
|         if (!promises_builder.is_empty())          \ | ||||
|             TRY(promises_builder.try_append(' ')); \ | ||||
|         TRY(promises_builder.try_append(#x));      \ | ||||
|         TRY(promises_builder.try_append(#x##sv));  \ | ||||
|     } | ||||
|     if (has_promises()) { | ||||
|         StringBuilder promises_builder; | ||||
|         ENUMERATE_PLEDGE_PROMISES | ||||
|         TRY(obj.add("promises", promises_builder.string_view())); | ||||
|         TRY(obj.add("promises"sv, promises_builder.string_view())); | ||||
|     } | ||||
| #undef __ENUMERATE_PLEDGE_PROMISE | ||||
|     TRY(obj.finish()); | ||||
|  | @ -184,7 +184,7 @@ ErrorOr<void> Process::procfs_get_unveil_stats(KBufferBuilder& builder) const | |||
|             if (!unveiled_path.was_explicitly_unveiled()) | ||||
|                 return IterationDecision::Continue; | ||||
|             auto obj = TRY(array.add_object()); | ||||
|             TRY(obj.add("path", unveiled_path.path())); | ||||
|             TRY(obj.add("path"sv, unveiled_path.path())); | ||||
|             StringBuilder permissions_builder; | ||||
|             if (unveiled_path.permissions() & UnveilAccess::Read) | ||||
|                 permissions_builder.append('r'); | ||||
|  | @ -196,7 +196,7 @@ ErrorOr<void> Process::procfs_get_unveil_stats(KBufferBuilder& builder) const | |||
|                 permissions_builder.append('c'); | ||||
|             if (unveiled_path.permissions() & UnveilAccess::Browse) | ||||
|                 permissions_builder.append('b'); | ||||
|             TRY(obj.add("permissions", permissions_builder.string_view())); | ||||
|             TRY(obj.add("permissions"sv, permissions_builder.string_view())); | ||||
|             TRY(obj.finish()); | ||||
|             return IterationDecision::Continue; | ||||
|         })); | ||||
|  | @ -235,22 +235,22 @@ ErrorOr<void> Process::procfs_get_fds_stats(KBufferBuilder& builder) const | |||
|             bool cloexec = file_description_metadata.flags() & FD_CLOEXEC; | ||||
|             RefPtr<OpenFileDescription> description = file_description_metadata.description(); | ||||
|             auto description_object = TRY(array.add_object()); | ||||
|             TRY(description_object.add("fd", count)); | ||||
|             TRY(description_object.add("fd"sv, count)); | ||||
|             // TODO: Better OOM handling.
 | ||||
|             auto pseudo_path_or_error = description->pseudo_path(); | ||||
|             TRY(description_object.add("absolute_path", pseudo_path_or_error.is_error() ? "???"sv : pseudo_path_or_error.value()->view())); | ||||
|             TRY(description_object.add("seekable", description->file().is_seekable())); | ||||
|             TRY(description_object.add("class", description->file().class_name())); | ||||
|             TRY(description_object.add("offset", description->offset())); | ||||
|             TRY(description_object.add("cloexec", cloexec)); | ||||
|             TRY(description_object.add("blocking", description->is_blocking())); | ||||
|             TRY(description_object.add("can_read", description->can_read())); | ||||
|             TRY(description_object.add("can_write", description->can_write())); | ||||
|             TRY(description_object.add("absolute_path"sv, pseudo_path_or_error.is_error() ? "???"sv : pseudo_path_or_error.value()->view())); | ||||
|             TRY(description_object.add("seekable"sv, description->file().is_seekable())); | ||||
|             TRY(description_object.add("class"sv, description->file().class_name())); | ||||
|             TRY(description_object.add("offset"sv, description->offset())); | ||||
|             TRY(description_object.add("cloexec"sv, cloexec)); | ||||
|             TRY(description_object.add("blocking"sv, description->is_blocking())); | ||||
|             TRY(description_object.add("can_read"sv, description->can_read())); | ||||
|             TRY(description_object.add("can_write"sv, description->can_write())); | ||||
|             Inode* inode = description->inode(); | ||||
|             if (inode != nullptr) { | ||||
|                 auto inode_object = TRY(description_object.add_object("inode")); | ||||
|                 TRY(inode_object.add("fsid", inode->fsid().value())); | ||||
|                 TRY(inode_object.add("index", inode->index().value())); | ||||
|                 auto inode_object = TRY(description_object.add_object("inode"sv)); | ||||
|                 TRY(inode_object.add("fsid"sv, inode->fsid().value())); | ||||
|                 TRY(inode_object.add("index"sv, inode->index().value())); | ||||
|                 TRY(inode_object.finish()); | ||||
|             } | ||||
|             TRY(description_object.finish()); | ||||
|  | @ -272,24 +272,24 @@ ErrorOr<void> Process::procfs_get_virtual_memory_stats(KBufferBuilder& builder) | |||
|             if (!region.is_user() && !Process::current().is_superuser()) | ||||
|                 continue; | ||||
|             auto region_object = TRY(array.add_object()); | ||||
|             TRY(region_object.add("readable", region.is_readable())); | ||||
|             TRY(region_object.add("writable", region.is_writable())); | ||||
|             TRY(region_object.add("executable", region.is_executable())); | ||||
|             TRY(region_object.add("stack", region.is_stack())); | ||||
|             TRY(region_object.add("shared", region.is_shared())); | ||||
|             TRY(region_object.add("syscall", region.is_syscall_region())); | ||||
|             TRY(region_object.add("purgeable", region.vmobject().is_anonymous())); | ||||
|             TRY(region_object.add("readable"sv, region.is_readable())); | ||||
|             TRY(region_object.add("writable"sv, region.is_writable())); | ||||
|             TRY(region_object.add("executable"sv, region.is_executable())); | ||||
|             TRY(region_object.add("stack"sv, region.is_stack())); | ||||
|             TRY(region_object.add("shared"sv, region.is_shared())); | ||||
|             TRY(region_object.add("syscall"sv, region.is_syscall_region())); | ||||
|             TRY(region_object.add("purgeable"sv, region.vmobject().is_anonymous())); | ||||
|             if (region.vmobject().is_anonymous()) { | ||||
|                 TRY(region_object.add("volatile", static_cast<Memory::AnonymousVMObject const&>(region.vmobject()).is_volatile())); | ||||
|                 TRY(region_object.add("volatile"sv, static_cast<Memory::AnonymousVMObject const&>(region.vmobject()).is_volatile())); | ||||
|             } | ||||
|             TRY(region_object.add("cacheable", region.is_cacheable())); | ||||
|             TRY(region_object.add("address", region.vaddr().get())); | ||||
|             TRY(region_object.add("size", region.size())); | ||||
|             TRY(region_object.add("amount_resident", region.amount_resident())); | ||||
|             TRY(region_object.add("amount_dirty", region.amount_dirty())); | ||||
|             TRY(region_object.add("cow_pages", region.cow_pages())); | ||||
|             TRY(region_object.add("name", region.name())); | ||||
|             TRY(region_object.add("vmobject", region.vmobject().class_name())); | ||||
|             TRY(region_object.add("cacheable"sv, region.is_cacheable())); | ||||
|             TRY(region_object.add("address"sv, region.vaddr().get())); | ||||
|             TRY(region_object.add("size"sv, region.size())); | ||||
|             TRY(region_object.add("amount_resident"sv, region.amount_resident())); | ||||
|             TRY(region_object.add("amount_dirty"sv, region.amount_dirty())); | ||||
|             TRY(region_object.add("cow_pages"sv, region.cow_pages())); | ||||
|             TRY(region_object.add("name"sv, region.name())); | ||||
|             TRY(region_object.add("vmobject"sv, region.vmobject().class_name())); | ||||
| 
 | ||||
|             StringBuilder pagemap_builder; | ||||
|             for (size_t i = 0; i < region.page_count(); ++i) { | ||||
|  | @ -301,7 +301,7 @@ ErrorOr<void> Process::procfs_get_virtual_memory_stats(KBufferBuilder& builder) | |||
|                 else | ||||
|                     pagemap_builder.append('P'); | ||||
|             } | ||||
|             TRY(region_object.add("pagemap", pagemap_builder.string_view())); | ||||
|             TRY(region_object.add("pagemap"sv, pagemap_builder.string_view())); | ||||
|             TRY(region_object.finish()); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -73,7 +73,7 @@ void KernelRng::wait_for_entropy() | |||
|     SpinlockLocker lock(get_lock()); | ||||
|     if (!is_ready()) { | ||||
|         dbgln("Entropy starvation..."); | ||||
|         m_seed_queue.wait_forever("KernelRng"); | ||||
|         m_seed_queue.wait_forever("KernelRng"sv); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -401,11 +401,11 @@ UNMAP_AFTER_INIT void Scheduler::initialize() | |||
|     g_finalizer_wait_queue = new WaitQueue; | ||||
| 
 | ||||
|     g_finalizer_has_work.store(false, AK::MemoryOrder::memory_order_release); | ||||
|     s_colonel_process = Process::create_kernel_process(idle_thread, KString::must_create("colonel"), idle_loop, nullptr, 1, Process::RegisterProcess::No).leak_ref(); | ||||
|     s_colonel_process = Process::create_kernel_process(idle_thread, KString::must_create("colonel"sv), idle_loop, nullptr, 1, Process::RegisterProcess::No).leak_ref(); | ||||
|     VERIFY(s_colonel_process); | ||||
|     VERIFY(idle_thread); | ||||
|     idle_thread->set_priority(THREAD_PRIORITY_MIN); | ||||
|     idle_thread->set_name(KString::must_create("Idle Task #0")); | ||||
|     idle_thread->set_name(KString::must_create("Idle Task #0"sv)); | ||||
| 
 | ||||
|     set_idle_thread(idle_thread); | ||||
| } | ||||
|  |  | |||
|  | @ -155,7 +155,7 @@ AHCI::HBADefinedCapabilities AHCIController::capabilities() const | |||
| 
 | ||||
| UNMAP_AFTER_INIT NonnullOwnPtr<Memory::Region> AHCIController::default_hba_region() const | ||||
| { | ||||
|     return MM.allocate_kernel_region(PhysicalAddress(PCI::get_BAR5(pci_address())).page_base(), Memory::page_round_up(sizeof(AHCI::HBA)).release_value_but_fixme_should_propagate_errors(), "AHCI HBA", Memory::Region::Access::ReadWrite).release_value(); | ||||
|     return MM.allocate_kernel_region(PhysicalAddress(PCI::get_BAR5(pci_address())).page_base(), Memory::page_round_up(sizeof(AHCI::HBA)).release_value_but_fixme_should_propagate_errors(), "AHCI HBA"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
| } | ||||
| 
 | ||||
| AHCIController::~AHCIController() = default; | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ ErrorOr<void> AHCIPort::allocate_resources_and_initialize_ports() | |||
|         m_command_table_pages.append(move(command_table_page)); | ||||
|     } | ||||
| 
 | ||||
|     m_command_list_region = TRY(MM.allocate_dma_buffer_page("AHCI Port Command List", Memory::Region::Access::ReadWrite, m_command_list_page)); | ||||
|     m_command_list_region = TRY(MM.allocate_dma_buffer_page("AHCI Port Command List"sv, Memory::Region::Access::ReadWrite, m_command_list_page)); | ||||
| 
 | ||||
|     dbgln_if(AHCI_DEBUG, "AHCI Port {}: Command list page at {}", representative_port_index(), m_command_list_page->paddr()); | ||||
|     dbgln_if(AHCI_DEBUG, "AHCI Port {}: FIS receive page at {}", representative_port_index(), m_fis_receive_page->paddr()); | ||||
|  | @ -220,7 +220,7 @@ void AHCIPort::eject() | |||
|     // handshake error bit in PxSERR register if CFL is incorrect.
 | ||||
|     command_list_entries[unused_command_header.value()].attributes = (size_t)FIS::DwordCount::RegisterHostToDevice | AHCI::CommandHeaderAttributes::P | AHCI::CommandHeaderAttributes::C | AHCI::CommandHeaderAttributes::A; | ||||
| 
 | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No).release_value(); | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No).release_value(); | ||||
|     auto& command_table = *(volatile AHCI::CommandTable*)command_table_region->vaddr().as_ptr(); | ||||
|     memset(const_cast<u8*>(command_table.command_fis), 0, 64); | ||||
|     auto& fis = *(volatile FIS::HostToDevice::Register*)command_table.command_fis; | ||||
|  | @ -590,7 +590,7 @@ bool AHCIPort::access_device(AsyncBlockDeviceRequest::RequestType direction, u64 | |||
| 
 | ||||
|     dbgln_if(AHCI_DEBUG, "AHCI Port {}: CLE: ctba={:#08x}, ctbau={:#08x}, prdbc={:#08x}, prdtl={:#04x}, attributes={:#04x}", representative_port_index(), (u32)command_list_entries[unused_command_header.value()].ctba, (u32)command_list_entries[unused_command_header.value()].ctbau, (u32)command_list_entries[unused_command_header.value()].prdbc, (u16)command_list_entries[unused_command_header.value()].prdtl, (u16)command_list_entries[unused_command_header.value()].attributes); | ||||
| 
 | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No).release_value(); | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table"sv, Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::No).release_value(); | ||||
|     auto& command_table = *(volatile AHCI::CommandTable*)command_table_region->vaddr().as_ptr(); | ||||
| 
 | ||||
|     dbgln_if(AHCI_DEBUG, "AHCI Port {}: Allocated command table at {}", representative_port_index(), command_table_region->vaddr()); | ||||
|  | @ -678,7 +678,7 @@ bool AHCIPort::identify_device() | |||
|     // QEMU doesn't care if we don't set the correct CFL field in this register, real hardware will set an handshake error bit in PxSERR register.
 | ||||
|     command_list_entries[unused_command_header.value()].attributes = (size_t)FIS::DwordCount::RegisterHostToDevice | AHCI::CommandHeaderAttributes::P; | ||||
| 
 | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table", Memory::Region::Access::ReadWrite).release_value(); | ||||
|     auto command_table_region = MM.allocate_kernel_region(m_command_table_pages[unused_command_header.value()].paddr().page_base(), Memory::page_round_up(sizeof(AHCI::CommandTable)).value(), "AHCI Command Table"sv, Memory::Region::Access::ReadWrite).release_value(); | ||||
|     auto& command_table = *(volatile AHCI::CommandTable*)command_table_region->vaddr().as_ptr(); | ||||
|     memset(const_cast<u8*>(command_table.command_fis), 0, 64); | ||||
|     command_table.descriptors[0].base_high = 0; | ||||
|  |  | |||
|  | @ -106,7 +106,7 @@ private: | |||
|     EntropySource m_entropy_source; | ||||
|     RefPtr<AsyncBlockDeviceRequest> m_current_request; | ||||
|     Spinlock m_hard_lock; | ||||
|     Mutex m_lock { "AHCIPort" }; | ||||
|     Mutex m_lock { "AHCIPort"sv }; | ||||
| 
 | ||||
|     mutable bool m_wait_for_completion { false }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ ATADiskDevice::~ATADiskDevice() = default; | |||
| 
 | ||||
| StringView ATADiskDevice::class_name() const | ||||
| { | ||||
|     return "ATADiskDevice"; | ||||
|     return "ATADiskDevice"sv; | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ ATAPIDiscDevice::~ATAPIDiscDevice() = default; | |||
| 
 | ||||
| StringView ATAPIDiscDevice::class_name() const | ||||
| { | ||||
|     return "ATAPIDiscDevice"; | ||||
|     return "ATAPIDiscDevice"sv; | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -40,13 +40,13 @@ UNMAP_AFTER_INIT void BMIDEChannel::initialize() | |||
|     VERIFY(m_io_group.bus_master_base().has_value()); | ||||
|     // Let's try to set up DMA transfers.
 | ||||
|     { | ||||
|         auto region_or_error = MM.allocate_dma_buffer_page("IDE PRDT", Memory::Region::Access::ReadWrite, m_prdt_page); | ||||
|         auto region_or_error = MM.allocate_dma_buffer_page("IDE PRDT"sv, Memory::Region::Access::ReadWrite, m_prdt_page); | ||||
|         if (region_or_error.is_error()) | ||||
|             TODO(); | ||||
|         m_prdt_region = region_or_error.release_value(); | ||||
|     } | ||||
|     { | ||||
|         auto region_or_error = MM.allocate_dma_buffer_page("IDE DMA region", Memory::Region::Access::ReadWrite, m_dma_buffer_page); | ||||
|         auto region_or_error = MM.allocate_dma_buffer_page("IDE DMA region"sv, Memory::Region::Access::ReadWrite, m_dma_buffer_page); | ||||
|         if (region_or_error.is_error()) | ||||
|             TODO(); | ||||
|         m_dma_buffer_region = region_or_error.release_value(); | ||||
|  |  | |||
|  | @ -158,7 +158,7 @@ protected: | |||
|     u64 m_current_request_block_index { 0 }; | ||||
|     bool m_current_request_flushing_cache { false }; | ||||
|     Spinlock m_request_lock; | ||||
|     Mutex m_lock { "IDEChannel" }; | ||||
|     Mutex m_lock { "IDEChannel"sv }; | ||||
| 
 | ||||
|     IOAddressGroup m_io_group; | ||||
|     NonnullRefPtr<IDEController> m_parent_controller; | ||||
|  |  | |||
|  | @ -158,7 +158,7 @@ UNMAP_AFTER_INIT ErrorOr<void> NVMeController::identify_and_init_namespaces() | |||
|     u32 active_namespace_list[NVMe_IDENTIFY_SIZE / sizeof(u32)]; | ||||
| 
 | ||||
|     { | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_page("Identify PRP", Memory::Region::Access::ReadWrite, prp_dma_buffer)); | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_page("Identify PRP"sv, Memory::Region::Access::ReadWrite, prp_dma_buffer)); | ||||
|         prp_dma_region = move(buffer); | ||||
|     } | ||||
| 
 | ||||
|  | @ -269,7 +269,7 @@ UNMAP_AFTER_INIT ErrorOr<void> NVMeController::create_admin_queue(Optional<u8> i | |||
|         return EFAULT; | ||||
|     } | ||||
|     { | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(cq_size, "Admin CQ queue", Memory::Region::Access::ReadWrite, cq_dma_pages)); | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(cq_size, "Admin CQ queue"sv, Memory::Region::Access::ReadWrite, cq_dma_pages)); | ||||
|         cq_dma_region = move(buffer); | ||||
|     } | ||||
| 
 | ||||
|  | @ -278,7 +278,7 @@ UNMAP_AFTER_INIT ErrorOr<void> NVMeController::create_admin_queue(Optional<u8> i | |||
|     memset(cq_dma_region->vaddr().as_ptr(), 0, cq_size); | ||||
| 
 | ||||
|     { | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(sq_size, "Admin SQ queue", Memory::Region::Access::ReadWrite, sq_dma_pages)); | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(sq_size, "Admin SQ queue"sv, Memory::Region::Access::ReadWrite, sq_dma_pages)); | ||||
|         sq_dma_region = move(buffer); | ||||
|     } | ||||
|     auto doorbell_regs = TRY(Memory::map_typed_writable<volatile DoorbellRegister>(PhysicalAddress(m_bar + REG_SQ0TDBL_START))); | ||||
|  | @ -307,7 +307,7 @@ UNMAP_AFTER_INIT ErrorOr<void> NVMeController::create_io_queue(u8 qid, Optional< | |||
|     auto sq_size = round_up_to_power_of_two(SQ_SIZE(IO_QUEUE_SIZE), 4096); | ||||
| 
 | ||||
|     { | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(cq_size, "IO CQ queue", Memory::Region::Access::ReadWrite, cq_dma_pages)); | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(cq_size, "IO CQ queue"sv, Memory::Region::Access::ReadWrite, cq_dma_pages)); | ||||
|         cq_dma_region = move(buffer); | ||||
|     } | ||||
| 
 | ||||
|  | @ -316,7 +316,7 @@ UNMAP_AFTER_INIT ErrorOr<void> NVMeController::create_io_queue(u8 qid, Optional< | |||
|     memset(cq_dma_region->vaddr().as_ptr(), 0, cq_size); | ||||
| 
 | ||||
|     { | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(sq_size, "IO SQ queue", Memory::Region::Access::ReadWrite, sq_dma_pages)); | ||||
|         auto buffer = TRY(MM.allocate_dma_buffer_pages(sq_size, "IO SQ queue"sv, Memory::Region::Access::ReadWrite, sq_dma_pages)); | ||||
|         sq_dma_region = move(buffer); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ RamdiskController::RamdiskController() | |||
|     for (auto& used_memory_range : MM.used_memory_ranges()) { | ||||
|         if (used_memory_range.type == Memory::UsedMemoryRangeType::BootModule) { | ||||
|             size_t length = Memory::page_round_up(used_memory_range.end.get()).release_value_but_fixme_should_propagate_errors() - used_memory_range.start.get(); | ||||
|             auto region_or_error = MM.allocate_kernel_region(used_memory_range.start, length, "Ramdisk", Memory::Region::Access::ReadWrite); | ||||
|             auto region_or_error = MM.allocate_kernel_region(used_memory_range.start, length, "Ramdisk"sv, Memory::Region::Access::ReadWrite); | ||||
|             if (region_or_error.is_error()) { | ||||
|                 dmesgln("RamdiskController: Failed to allocate kernel region of size {}", length); | ||||
|             } else { | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ private: | |||
|     // ^StorageDevice
 | ||||
|     virtual CommandSet command_set() const override { return CommandSet::PlainMemory; } | ||||
| 
 | ||||
|     Mutex m_lock { "RamdiskDevice" }; | ||||
|     Mutex m_lock { "RamdiskDevice"sv }; | ||||
| 
 | ||||
|     NonnullOwnPtr<Memory::Region> m_region; | ||||
| }; | ||||
|  |  | |||
|  | @ -173,7 +173,7 @@ static ErrorOr<RequiredLoadRange> get_required_load_range(OpenFileDescription& p | |||
| 
 | ||||
|     size_t executable_size = inode.size(); | ||||
|     size_t rounded_executable_size = TRY(Memory::page_round_up(executable_size)); | ||||
|     auto region = TRY(MM.allocate_kernel_region_with_vmobject(*vmobject, rounded_executable_size, "ELF memory range calculation", Memory::Region::Access::Read)); | ||||
|     auto region = TRY(MM.allocate_kernel_region_with_vmobject(*vmobject, rounded_executable_size, "ELF memory range calculation"sv, Memory::Region::Access::Read)); | ||||
|     auto elf_image = ELF::Image(region->vaddr().as_ptr(), executable_size); | ||||
|     if (!elf_image.is_valid()) { | ||||
|         return EINVAL; | ||||
|  | @ -269,7 +269,7 @@ static ErrorOr<LoadResult> load_elf_object(NonnullOwnPtr<Memory::AddressSpace> n | |||
|     size_t executable_size = inode.size(); | ||||
|     size_t rounded_executable_size = TRY(Memory::page_round_up(executable_size)); | ||||
| 
 | ||||
|     auto executable_region = TRY(MM.allocate_kernel_region_with_vmobject(*vmobject, rounded_executable_size, "ELF loading", Memory::Region::Access::Read)); | ||||
|     auto executable_region = TRY(MM.allocate_kernel_region_with_vmobject(*vmobject, rounded_executable_size, "ELF loading"sv, Memory::Region::Access::Read)); | ||||
|     auto elf_image = ELF::Image(executable_region->vaddr().as_ptr(), executable_size); | ||||
| 
 | ||||
|     if (!elf_image.is_valid()) | ||||
|  | @ -392,7 +392,7 @@ static ErrorOr<LoadResult> load_elf_object(NonnullOwnPtr<Memory::AddressSpace> n | |||
|         return ENOEXEC; | ||||
|     } | ||||
| 
 | ||||
|     auto* stack_region = TRY(new_space->allocate_region(Memory::RandomizeVirtualAddress::Yes, {}, Thread::default_userspace_stack_size, PAGE_SIZE, "Stack (Main thread)", PROT_READ | PROT_WRITE, AllocationStrategy::Reserve)); | ||||
|     auto* stack_region = TRY(new_space->allocate_region(Memory::RandomizeVirtualAddress::Yes, {}, Thread::default_userspace_stack_size, PAGE_SIZE, "Stack (Main thread)"sv, PROT_READ | PROT_WRITE, AllocationStrategy::Reserve)); | ||||
|     stack_region->set_stack(true); | ||||
| 
 | ||||
|     return LoadResult { | ||||
|  | @ -488,7 +488,7 @@ ErrorOr<void> Process::do_exec(NonnullRefPtr<OpenFileDescription> main_program_d | |||
|     bool has_interpreter = interpreter_description; | ||||
|     interpreter_description = nullptr; | ||||
| 
 | ||||
|     auto* signal_trampoline_region = TRY(load_result.space->allocate_region_with_vmobject(Memory::RandomizeVirtualAddress::Yes, {}, PAGE_SIZE, PAGE_SIZE, g_signal_trampoline_region->vmobject(), 0, "Signal trampoline", PROT_READ | PROT_EXEC, true)); | ||||
|     auto* signal_trampoline_region = TRY(load_result.space->allocate_region_with_vmobject(Memory::RandomizeVirtualAddress::Yes, {}, PAGE_SIZE, PAGE_SIZE, g_signal_trampoline_region->vmobject(), 0, "Signal trampoline"sv, PROT_READ | PROT_EXEC, true)); | ||||
|     signal_trampoline_region->set_syscall_region(true); | ||||
| 
 | ||||
|     // (For dynamically linked executable) Allocate an FD for passing the main executable to the dynamic loader.
 | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 sin-ack
						sin-ack