mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 17:09:10 -07:00
sys-apps/gptfdisk: Added a patch to remove byteswap
Closes: https://bugs.gentoo.org/797412 Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
This commit is contained in:
50
sys-apps/gptfdisk/files/gptfdisk-1.0.7-remove_byteswap.patch
Normal file
50
sys-apps/gptfdisk/files/gptfdisk-1.0.7-remove_byteswap.patch
Normal file
@@ -0,0 +1,50 @@
|
||||
From fded770b55fdb3a201ad515d785c17ac35705652 Mon Sep 17 00:00:00 2001
|
||||
From: Erik Larsson <catacombae@gmail.com>
|
||||
Date: Tue, 8 Jun 2021 16:11:21 +0300
|
||||
Subject: [PATCH] gptpart.cc: Remove byteswap commands in
|
||||
GPTPart::SetName(const string&).
|
||||
|
||||
The byteswapping done in GPTPart::SetName(const string&) was reversed
|
||||
later when GPTPart::ReversePartBytes() was called.
|
||||
|
||||
The intended design seems to have been to keep the fields in native
|
||||
endianness until just before the partition is written to disk when all
|
||||
the GPTPart data is byteswapped all at once with a call to
|
||||
GPTPart::ReversePartBytes().
|
||||
However this was defeated by leaving the original byteswaps in there and
|
||||
effectively the name was swapped back to the native-endian form. For big
|
||||
endian systems this meant that a UTF-16BE string was written to disk,
|
||||
violating the specification and causing interoperability problems.
|
||||
|
||||
Fixed by removing these inline byteswaps in GPTPart::SetName(const
|
||||
string&).
|
||||
---
|
||||
gptpart.cc | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/gptpart.cc b/gptpart.cc
|
||||
index 81bbcf0..841140a 100644
|
||||
--- a/gptpart.cc
|
||||
+++ b/gptpart.cc
|
||||
@@ -242,7 +242,6 @@ void GPTPart::SetName(const string & theName) {
|
||||
// then to utf16le
|
||||
if ( uni < 0x10000 ) {
|
||||
name[ pos ] = (uint16_t) uni ;
|
||||
- if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
|
||||
pos ++ ;
|
||||
} // if
|
||||
else {
|
||||
@@ -252,10 +251,8 @@ void GPTPart::SetName(const string & theName) {
|
||||
} // if
|
||||
uni -= 0x10000 ;
|
||||
name[ pos ] = (uint16_t)( uni >> 10 ) | 0xd800 ;
|
||||
- if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
|
||||
pos ++ ;
|
||||
name[ pos ] = (uint16_t)( uni & 0x3ff ) | 0xdc00 ;
|
||||
- if ( ! IsLittleEndian() ) ReverseBytes( name + pos , 2 ) ;
|
||||
pos ++ ;
|
||||
}
|
||||
} // for
|
||||
--
|
||||
2.32.0
|
||||
|
||||
@@ -30,6 +30,10 @@ DEPEND="
|
||||
"
|
||||
BDEPEND="virtual/pkgconfig"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/${P}-remove_byteswap.patch" #797412
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
|
||||
Reference in New Issue
Block a user