@@ -1135,6 +1135,7 @@ get_native_fmtchar(char *result, const char *fmt)
1135
1135
case 'n' : case 'N' : size = sizeof (Py_ssize_t ); break ;
1136
1136
case 'f' : size = sizeof (float ); break ;
1137
1137
case 'd' : size = sizeof (double ); break ;
1138
+ case 'e' : size = sizeof (float ) / 2 ; break ;
1138
1139
case '?' : size = sizeof (_Bool ); break ;
1139
1140
case 'P' : size = sizeof (void * ); break ;
1140
1141
}
@@ -1178,6 +1179,7 @@ get_native_fmtstr(const char *fmt)
1178
1179
case 'N' : RETURN ("N" );
1179
1180
case 'f' : RETURN ("f" );
1180
1181
case 'd' : RETURN ("d" );
1182
+ case 'e' : RETURN ("e" );
1181
1183
case '?' : RETURN ("?" );
1182
1184
case 'P' : RETURN ("P" );
1183
1185
}
@@ -1697,6 +1699,12 @@ unpack_single(PyMemoryViewObject *self, const char *ptr, const char *fmt)
1697
1699
1698
1700
CHECK_RELEASED_AGAIN (self );
1699
1701
1702
+ #if PY_LITTLE_ENDIAN
1703
+ int endian = 1 ;
1704
+ #else
1705
+ int endian = 0 ;
1706
+ #endif
1707
+
1700
1708
switch (fmt [0 ]) {
1701
1709
1702
1710
/* signed integers and fast path for 'B' */
@@ -1725,6 +1733,7 @@ unpack_single(PyMemoryViewObject *self, const char *ptr, const char *fmt)
1725
1733
/* floats */
1726
1734
case 'f' : UNPACK_SINGLE (d , ptr , float ); goto convert_double ;
1727
1735
case 'd' : UNPACK_SINGLE (d , ptr , double ); goto convert_double ;
1736
+ case 'e' : d = PyFloat_Unpack2 (ptr , endian ); goto convert_double ;
1728
1737
1729
1738
/* bytes object */
1730
1739
case 'c' : goto convert_bytes ;
@@ -1786,6 +1795,11 @@ pack_single(PyMemoryViewObject *self, char *ptr, PyObject *item, const char *fmt
1786
1795
double d ;
1787
1796
void * p ;
1788
1797
1798
+ #if PY_LITTLE_ENDIAN
1799
+ int endian = 1 ;
1800
+ #else
1801
+ int endian = 0 ;
1802
+ #endif
1789
1803
switch (fmt [0 ]) {
1790
1804
/* signed integers */
1791
1805
case 'b' : case 'h' : case 'i' : case 'l' :
@@ -1862,17 +1876,22 @@ pack_single(PyMemoryViewObject *self, char *ptr, PyObject *item, const char *fmt
1862
1876
break ;
1863
1877
1864
1878
/* floats */
1865
- case 'f' : case 'd' :
1879
+ case 'f' : case 'd' : case 'e' :
1866
1880
d = PyFloat_AsDouble (item );
1867
1881
if (d == -1.0 && PyErr_Occurred ())
1868
1882
goto err_occurred ;
1869
1883
CHECK_RELEASED_INT_AGAIN (self );
1870
1884
if (fmt [0 ] == 'f' ) {
1871
1885
PACK_SINGLE (ptr , d , float );
1872
1886
}
1873
- else {
1887
+ else if ( fmt [ 0 ] == 'd' ) {
1874
1888
PACK_SINGLE (ptr , d , double );
1875
1889
}
1890
+ else {
1891
+ if (PyFloat_Pack2 (d , ptr , endian ) < 0 ) {
1892
+ goto err_occurred ;
1893
+ }
1894
+ }
1876
1895
break ;
1877
1896
1878
1897
/* bool */
@@ -1882,7 +1901,7 @@ pack_single(PyMemoryViewObject *self, char *ptr, PyObject *item, const char *fmt
1882
1901
return -1 ; /* preserve original error */
1883
1902
CHECK_RELEASED_INT_AGAIN (self );
1884
1903
PACK_SINGLE (ptr , ld , _Bool );
1885
- break ;
1904
+ break ;
1886
1905
1887
1906
/* bytes object */
1888
1907
case 'c' :
0 commit comments