]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
This patches fixes a number of byteorder problems in MacOSX specific code.
authorRonald Oussoren <ronaldoussoren@mac.com>
Mon, 17 Apr 2006 13:40:08 +0000 (13:40 +0000)
committerRonald Oussoren <ronaldoussoren@mac.com>
Mon, 17 Apr 2006 13:40:08 +0000 (13:40 +0000)
Lib/plat-mac/applesingle.py
Lib/test/test_applesingle.py
Mac/Modules/gestaltmodule.c
Python/mactoolboxglue.c

index b035d9eb1dcfe0807a82767aa93fb147d81e5a87..76bdb0691c85f6a70d05c6bf4c89c5fc62dbfafe 100644 (file)
@@ -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
index 2a2d60ad32e33704dbefe1c5eba39c74a62705d8..d533f1abc04fb7759c3c9ebad4022decbea187ae 100644 (file)
@@ -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
index f82687e2161028ac25c9ddb58da5db93cb068423..6d8673f8f7ec6d8ffefe8247cf51664f63fb31d7 100644 (file)
@@ -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);
index 7f0627ecf436b05047864cb9493e818ce4d8492b..0aa2cfda3701b5cfbc3b97b88e2e070d2cec8bf8 100644 (file)
@@ -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 */