summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2002-05-10 22:51:58 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2002-05-10 22:51:58 (GMT)
commit6d207c09aa7c9b5e155f4e779133c638fdfdd787 (patch)
tree72bd0560d440bd8025a142f94413e1484374ed1d
parente037665f999c2ab5637fd9c2f4ac5c24e44e48f0 (diff)
downloadcpython-6d207c09aa7c9b5e155f4e779133c638fdfdd787.zip
cpython-6d207c09aa7c9b5e155f4e779133c638fdfdd787.tar.gz
cpython-6d207c09aa7c9b5e155f4e779133c638fdfdd787.tar.bz2
- Get data from CFData objects as Python strings and vv.
- Started on supporting CFPropertyLists.
-rw-r--r--Mac/Modules/cf/cfscan.py6
-rw-r--r--Mac/Modules/cf/cfsupport.py29
2 files changed, 34 insertions, 1 deletions
diff --git a/Mac/Modules/cf/cfscan.py b/Mac/Modules/cf/cfscan.py
index be11dba..d6613ae 100644
--- a/Mac/Modules/cf/cfscan.py
+++ b/Mac/Modules/cf/cfscan.py
@@ -15,6 +15,7 @@ OBJECTS = ("CFTypeRef",
"CFDictionaryRef", "CFMutableDictionaryRef",
"CFStringRef", "CFMutableStringRef",
"CFURLRef",
+## "CFPropertyListRef",
)
# ADD object typenames here
@@ -31,7 +32,7 @@ def main():
## "CFNumber.h",
## "CFPlugIn.h",
## "CFPreferences.h",
-## "CFPropertyList.h",
+ "CFPropertyList.h",
## "CFSet.h",
"CFString.h",
## "CFStringEncodingExt.h",
@@ -130,6 +131,9 @@ class MyScanner(Scanner_OSX):
([("CFURLRef", "baseURL", "InMode")],
[("OptionalCFURLRef", "*", "*")]),
+ # We handle CFPropertyListRef objects as plain CFTypeRef
+ ([("CFPropertyListRef", "*", "*")],
+ [("CFTypeRef", "*", "*")]),
]
if __name__ == "__main__":
diff --git a/Mac/Modules/cf/cfsupport.py b/Mac/Modules/cf/cfsupport.py
index d690441..b2ff3e1 100644
--- a/Mac/Modules/cf/cfsupport.py
+++ b/Mac/Modules/cf/cfsupport.py
@@ -49,6 +49,7 @@ includestuff = includestuff + """
#include <CFDictionary.h>
#include <CFString.h>
#include <CFURL.h>
+#include <CFPropertyList.h>
#else
#include <CoreServices/CoreServices.h>
#endif
@@ -195,6 +196,7 @@ CFStringRef = OpaqueByValueType("CFStringRef", "CFStringRefObj")
CFMutableStringRef = OpaqueByValueType("CFMutableStringRef", "CFMutableStringRefObj")
CFURLRef = OpaqueByValueType("CFURLRef", "CFURLRefObj")
OptionalCFURLRef = OpaqueByValueType("CFURLRef", "OptionalCFURLRefObj")
+##CFPropertyListRef = OpaqueByValueType("CFPropertyListRef", "CFTypeRefObj")
# ADD object type here
# Our (opaque) objects
@@ -301,6 +303,18 @@ class CFMutableDictionaryRefObjectDefinition(MyGlobalObjectDefinition):
class CFDataRefObjectDefinition(MyGlobalObjectDefinition):
basechain = "&CFTypeRefObj_chain"
+ def outputCheckConvertArg(self):
+ Out("""
+ if (v == Py_None) { *p_itself = NULL; return 1; }
+ if (PyString_Check(v)) {
+ char *cStr;
+ int cLen;
+ if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;
+ *p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen);
+ return 1;
+ }
+ """)
+
def outputRepr(self):
Output()
Output("static PyObject * %s_repr(%s *self)", self.prefix, self.objecttype)
@@ -491,6 +505,21 @@ toPython_body = """
return PyCF_CF2Python(_self->ob_itself);
"""
+# Get data from CFDataRef
+getasdata_body = """
+int size = CFDataGetLength(_self->ob_itself);
+char *data = (char *)CFDataGetBytePtr(_self->ob_itself);
+
+_res = (PyObject *)PyString_FromStringAndSize(data, size);
+return _res;
+"""
+
+f = ManualGenerator("CFDataGetData", getasdata_body);
+f.docstring = lambda: "() -> (string _rv)"
+CFDataRef_object.add(f)
+
+
+
f = ManualGenerator("toPython", toPython_body);
f.docstring = lambda: "() -> (python_object)"
CFTypeRef_object.add(f)