]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix for issue1594
authorRonald Oussoren <ronaldoussoren@mac.com>
Fri, 2 Jan 2009 14:10:20 +0000 (14:10 +0000)
committerRonald Oussoren <ronaldoussoren@mac.com>
Fri, 2 Jan 2009 14:10:20 +0000 (14:10 +0000)
Lib/test/test_macos.py
Mac/Modules/MacOS.c
Misc/NEWS

index e65b174824421096c64e0d8bcca2037e14bbba88..a9ff0b21d36faf629f2cb1b774ae4bb7fcabda43 100644 (file)
@@ -3,11 +3,66 @@ import MacOS
 import Carbon.File
 from test import test_support
 import os
+import subprocess
 
 TESTFN2 = test_support.TESTFN + '2'
 
 class TestMacOS(unittest.TestCase):
 
+    def testGetCreatorAndType(self):
+        if not os.path.exists('/Developer/Tools/SetFile'):
+            return
+
+        try:
+            fp = open(test_support.TESTFN, 'w')
+            fp.write('\n')
+            fp.close()
+
+            subprocess.call(
+                    ['/Developer/Tools/SetFile', '-t', 'ABCD', '-c', 'EFGH',
+                        test_support.TESTFN])
+
+            cr, tp = MacOS.GetCreatorAndType(test_support.TESTFN)
+            self.assertEquals(tp, 'ABCD')
+            self.assertEquals(cr, 'EFGH')
+
+        finally:
+            os.unlink(test_support.TESTFN)
+
+    def testSetCreatorAndType(self):
+        if not os.path.exists('/Developer/Tools/GetFileInfo'):
+            return
+
+        try:
+            fp = open(test_support.TESTFN, 'w')
+            fp.write('\n')
+            fp.close()
+
+            MacOS.SetCreatorAndType(test_support.TESTFN,
+                    'ABCD', 'EFGH')
+
+            cr, tp = MacOS.GetCreatorAndType(test_support.TESTFN)
+            self.assertEquals(cr, 'ABCD')
+            self.assertEquals(tp, 'EFGH')
+
+            data = subprocess.Popen(["/Developer/Tools/GetFileInfo", test_support.TESTFN],
+                    stdout=subprocess.PIPE).communicate()[0]
+
+            tp = None
+            cr = None
+            for  ln in data.splitlines():
+                if ln.startswith('type:'):
+                    tp = ln.split()[-1][1:-1]
+                if ln.startswith('creator:'):
+                    cr = ln.split()[-1][1:-1]
+
+            self.assertEquals(cr, 'ABCD')
+            self.assertEquals(tp, 'EFGH')
+
+        finally:
+            os.unlink(test_support.TESTFN)
+
+
     def testOpenRF(self):
         try:
             fp = open(test_support.TESTFN, 'w')
index 272fe8d55d9292791786cf7d5d4139b29fe1959e..bef7f88ceee8e620be990380326362a70c529ce0 100644 (file)
@@ -30,6 +30,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <Carbon/Carbon.h>
 #include <ApplicationServices/ApplicationServices.h>
 
+#include <arpa/inet.h>  /* for ntohl, htonl */
+
+
 #ifndef HAVE_OSX105_SDK
 typedef SInt16 FSIORefNum;
 #endif
@@ -310,6 +313,10 @@ MacOS_GetCreatorAndType(PyObject *self, PyObject *args)
                if ((err = FSpGetFInfo(&fss, &info)) != noErr) {
                        return PyErr_Mac(MacOS_Error, err);
                }
+
+               info.fdCreator = ntohl(info.fdCreator);
+               info.fdType = ntohl(info.fdType);
+
                creator = PyString_FromStringAndSize(
                                (char *)&info.fdCreator, 4);
                type = PyString_FromStringAndSize((char *)&info.fdType, 4);
@@ -341,6 +348,8 @@ MacOS_GetCreatorAndType(PyObject *self, PyObject *args)
 
        } 
        finfo = (FileInfo*)&(cataloginfo.finderInfo);
+       finfo->fileCreator = ntohl(finfo->fileCreator);
+       finfo->fileType = ntohl(finfo->fileType);
        creator = PyString_FromStringAndSize((char*)&(finfo->fileCreator), 4);
        type = PyString_FromStringAndSize((char*)&(finfo->fileType), 4);
 
index f35697cb8710981889165bc18d7ef5f0d7bb5e2b..3e82146e3174105cdd354a2f10860fa0f6519f49 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -224,6 +224,9 @@ Library
 - Issue #4730: Fixed the cPickle module to handle correctly astral characters
   when protocol 0 is used.
 
+- Issue #1594: MacOS.GetCreatorAndType now always returns a big-endian result,
+  to be consistent with Apple tools.
+
 Tools/Demos
 -----------