diff options
author | Ronald Oussoren <ronaldoussoren@mac.com> | 2009-01-02 14:10:20 (GMT) |
---|---|---|
committer | Ronald Oussoren <ronaldoussoren@mac.com> | 2009-01-02 14:10:20 (GMT) |
commit | 0238497e931f439ff4e1ebe268f31ce23c15407f (patch) | |
tree | c62c49a7d4905def8e111b8f65d8f1ea67ce9758 | |
parent | 8c95484cff12e96356f67d31e3fa5e5aa7dbd5ca (diff) | |
download | cpython-0238497e931f439ff4e1ebe268f31ce23c15407f.zip cpython-0238497e931f439ff4e1ebe268f31ce23c15407f.tar.gz cpython-0238497e931f439ff4e1ebe268f31ce23c15407f.tar.bz2 |
Fix for issue1594
-rw-r--r-- | Lib/test/test_macos.py | 55 | ||||
-rw-r--r-- | Mac/Modules/MacOS.c | 9 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 67 insertions, 0 deletions
diff --git a/Lib/test/test_macos.py b/Lib/test/test_macos.py index e65b174..a9ff0b2 100644 --- a/Lib/test/test_macos.py +++ b/Lib/test/test_macos.py @@ -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') diff --git a/Mac/Modules/MacOS.c b/Mac/Modules/MacOS.c index 272fe8d..bef7f88 100644 --- a/Mac/Modules/MacOS.c +++ b/Mac/Modules/MacOS.c @@ -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); @@ -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 ----------- |