From 0238497e931f439ff4e1ebe268f31ce23c15407f Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Fri, 2 Jan 2009 14:10:20 +0000 Subject: Fix for issue1594 --- Lib/test/test_macos.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ Mac/Modules/MacOS.c | 9 +++++++++ Misc/NEWS | 3 +++ 3 files changed, 67 insertions(+) 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 #include +#include /* 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); diff --git a/Misc/NEWS b/Misc/NEWS index f35697c..3e82146 100644 --- 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 ----------- -- cgit v0.12