[PATCH:libX11] specs/libX11: Update Portability Considerations for the 21st century

Alan Coopersmith alan.coopersmith at oracle.com
Mon Jan 2 04:57:58 UTC 2017


Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 specs/libX11/AppC.xml | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

The current version of this section can be seen at:
https://www.x.org/releases/X11R7.7/doc/libX11/libX11/libX11.html#Portability_Considerations

diff --git a/specs/libX11/AppC.xml b/specs/libX11/AppC.xml
index bac148c..8eb1e00 100644
--- a/specs/libX11/AppC.xml
+++ b/specs/libX11/AppC.xml
@@ -3211,13 +3211,12 @@ You must pass back the same pointer and size that were returned by
 </sect2>
 <sect2 id="Portability_Considerations">
 <title>Portability Considerations</title>
 <para>
 <!-- .LP -->
-Many machine architectures, 
-including many of the more recent <acronym>RISC</acronym> architectures,
-do not correctly access data at unaligned locations; 
+Many machine architectures
+do not correctly or efficiently access data at unaligned locations;
 their compilers pad out structures to preserve this characteristic.
 Many other machines capable of unaligned references pad inside of structures
 as well to preserve alignment, because accessing aligned data is
 usually much faster.
 Because the library and the server use structures to access data at
@@ -3227,11 +3226,13 @@ that is, 16-bit data starts on 16-bit boundaries in the request
 and 32-bit data on 32-bit boundaries.
 All requests <emphasis remap='I'>must</emphasis> be a multiple of 32 bits in length to preserve
 the natural alignment in the data stream.
 You must pad structures out to 32-bit boundaries.
 Pad information does not have to be zeroed unless you want to
-preserve such fields for future use in your protocol requests.
+preserve such fields for future use in your protocol requests,
+but it is recommended to zero it to avoid inadvertant data leakage
+and improve compressability.
 Floating point varies radically between machines and should be
 avoided completely if at all possible.
 </para>
 <para>
 <!-- .LP -->
@@ -3264,19 +3265,27 @@ take on values larger than the maximum 16-bit
 <type>unsigned</type>
 <type>int</type>.
 </para>
 <para>
 <!-- .LP -->
-The library currently assumes that a
+The library has always assumed that a
 <type>char</type>
 is 8 bits, a
 <type>short</type>
 is 16 bits, an
 <type>int</type>
 is 16 or 32 bits, and a
 <type>long</type>
-is 32 bits.  
+is 32 bits.
+Unfortunately, this assumption remains on machines where a <type>long</type>
+can hold 64-bits, and many functions and structures require unnecessarily
+large fields to avoid breaking compatibility with existing code.  Special
+care must be taken with arrays of values that are transmitted in the
+protocol as CARD32 or INT32 but have to be converted to arrays of 64-bit
+<type>long</type> when passed to or from client applications.
+</para>
+<para>
 The 
 <function>PackData</function>
 macro is a half-hearted attempt to deal with the possibility of 32 bit shorts. 
 However, much more work is needed to make this work properly.
 </para>
-- 
2.7.4



More information about the xorg-devel mailing list