summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2009-01-02 14:10:20 (GMT)
committerRonald Oussoren <ronaldoussoren@mac.com>2009-01-02 14:10:20 (GMT)
commit0238497e931f439ff4e1ebe268f31ce23c15407f (patch)
treec62c49a7d4905def8e111b8f65d8f1ea67ce9758
parent8c95484cff12e96356f67d31e3fa5e5aa7dbd5ca (diff)
downloadcpython-0238497e931f439ff4e1ebe268f31ce23c15407f.zip
cpython-0238497e931f439ff4e1ebe268f31ce23c15407f.tar.gz
cpython-0238497e931f439ff4e1ebe268f31ce23c15407f.tar.bz2
Fix for issue1594
-rw-r--r--Lib/test/test_macos.py55
-rw-r--r--Mac/Modules/MacOS.c9
-rw-r--r--Misc/NEWS3
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);
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
-----------