mirror of https://github.com/python/cpython
This patches fixes a number of byteorder problems in MacOSX specific code.
This commit is contained in:
parent
749d070e93
commit
6c1074888e
|
@ -25,7 +25,7 @@ class Error(ValueError):
|
|||
pass
|
||||
|
||||
# File header format: magic, version, unused, number of entries
|
||||
AS_HEADER_FORMAT=">ll16sh"
|
||||
AS_HEADER_FORMAT=">LL16sh"
|
||||
AS_HEADER_LENGTH=26
|
||||
# The flag words for AppleSingle
|
||||
AS_MAGIC=0x00051600
|
||||
|
|
|
@ -15,8 +15,8 @@ AS_VERSION=0x00020000
|
|||
dataforkdata = 'hello\r\0world\n'
|
||||
resourceforkdata = 'goodbye\ncruel\0world\r'
|
||||
|
||||
applesingledata = struct.pack("ll16sh", AS_MAGIC, AS_VERSION, "foo", 2) + \
|
||||
struct.pack("llllll", 1, 50, len(dataforkdata),
|
||||
applesingledata = struct.pack(">ll16sh", AS_MAGIC, AS_VERSION, "foo", 2) + \
|
||||
struct.pack(">llllll", 1, 50, len(dataforkdata),
|
||||
2, 50+len(dataforkdata), len(resourceforkdata)) + \
|
||||
dataforkdata + \
|
||||
resourceforkdata
|
||||
|
|
|
@ -33,17 +33,10 @@ static PyObject *
|
|||
gestalt_gestalt(PyObject *self, PyObject *args)
|
||||
{
|
||||
OSErr iErr;
|
||||
char *str;
|
||||
int size;
|
||||
OSType selector;
|
||||
long response;
|
||||
if (!PyArg_Parse(args, "s#", &str, &size))
|
||||
if (!PyArg_Parse(args, "O&", PyMac_GetOSType, &selector))
|
||||
return NULL;
|
||||
if (size != 4) {
|
||||
PyErr_SetString(PyExc_TypeError, "gestalt arg must be 4-char string");
|
||||
return NULL;
|
||||
}
|
||||
selector = *(OSType*)str;
|
||||
iErr = Gestalt ( selector, &response );
|
||||
if (iErr != 0)
|
||||
return PyMac_Error(iErr);
|
||||
|
|
|
@ -25,6 +25,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
|
||||
#include "Python.h"
|
||||
#include "pymactoolbox.h"
|
||||
#include <arpa/inet.h> /* for ntohl, htonl */
|
||||
|
||||
|
||||
/* Like strerror() but for Mac OS error numbers */
|
||||
|
@ -156,12 +157,14 @@ PyMac_GetFullPathname(FSSpec *fss, char *path, int len)
|
|||
int
|
||||
PyMac_GetOSType(PyObject *v, OSType *pr)
|
||||
{
|
||||
uint32_t tmp;
|
||||
if (!PyString_Check(v) || PyString_Size(v) != 4) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"OSType arg must be string of 4 chars");
|
||||
return 0;
|
||||
}
|
||||
memcpy((char *)pr, PyString_AsString(v), 4);
|
||||
memcpy((char *)&tmp, PyString_AsString(v), 4);
|
||||
*pr = (OSType)ntohl(tmp);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -169,7 +172,8 @@ PyMac_GetOSType(PyObject *v, OSType *pr)
|
|||
PyObject *
|
||||
PyMac_BuildOSType(OSType t)
|
||||
{
|
||||
return PyString_FromStringAndSize((char *)&t, 4);
|
||||
uint32_t tmp = htonl((uint32_t)t);
|
||||
return PyString_FromStringAndSize((char *)&tmp, 4);
|
||||
}
|
||||
|
||||
/* Convert an NumVersion value to a 4-element tuple */
|
||||
|
|
Loading…
Reference in New Issue