diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2022-02-15 23:05:51 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-16 22:21:37 +0100 |
commit | 13f5d1c03739e3cf8f6fede91835b32f60375e2b (patch) | |
tree | 77dfeef936758d6253804c957b4d43886d1c7c6c /Userland | |
parent | 4a15ed616472e6badca8cfe8f30fb5e38a0391b6 (diff) | |
download | serenity-13f5d1c03739e3cf8f6fede91835b32f60375e2b.zip |
LibEDID: Store manufacturer id instead of allocating on each call
This also let's us use a KString instead of a string when we're in the
Kernel, which opens the path for OOM-failure propagation.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Libraries/LibEDID/EDID.cpp | 17 | ||||
-rw-r--r-- | Userland/Libraries/LibEDID/EDID.h | 3 |
2 files changed, 10 insertions, 10 deletions
diff --git a/Userland/Libraries/LibEDID/EDID.cpp b/Userland/Libraries/LibEDID/EDID.cpp index efd5cbb001..dcd99790b3 100644 --- a/Userland/Libraries/LibEDID/EDID.cpp +++ b/Userland/Libraries/LibEDID/EDID.cpp @@ -480,6 +480,12 @@ ErrorOr<void> Parser::parse() } } + u16 packed_id = read_be(&raw_edid().vendor.manufacturer_id); + m_legacy_manufacturer_id[0] = (char)((u16)'A' + ((packed_id >> 10) & 0x1f) - 1); + m_legacy_manufacturer_id[1] = (char)((u16)'A' + ((packed_id >> 5) & 0x1f) - 1); + m_legacy_manufacturer_id[2] = (char)((u16)'A' + (packed_id & 0x1f) - 1); + m_legacy_manufacturer_id[3] = '\0'; + return {}; } @@ -555,16 +561,9 @@ StringView Parser::version() const #endif } -String Parser::legacy_manufacturer_id() const +StringView Parser::legacy_manufacturer_id() const { - u16 packed_id = read_be(&raw_edid().vendor.manufacturer_id); - char id[4] = { - (char)((u16)'A' + ((packed_id >> 10) & 0x1f) - 1), - (char)((u16)'A' + ((packed_id >> 5) & 0x1f) - 1), - (char)((u16)'A' + (packed_id & 0x1f) - 1), - '\0' - }; - return id; + return m_legacy_manufacturer_id; } #ifndef KERNEL diff --git a/Userland/Libraries/LibEDID/EDID.h b/Userland/Libraries/LibEDID/EDID.h index 9cf0ae02b2..b3f15696c4 100644 --- a/Userland/Libraries/LibEDID/EDID.h +++ b/Userland/Libraries/LibEDID/EDID.h @@ -88,7 +88,7 @@ public: static ErrorOr<Parser> from_framebuffer_device(String const&, size_t); #endif - String legacy_manufacturer_id() const; + StringView legacy_manufacturer_id() const; #ifndef KERNEL String manufacturer_name() const; #endif @@ -453,6 +453,7 @@ private: #else String m_version; #endif + char m_legacy_manufacturer_id[4] {}; }; } |