]> granicus.if.org Git - python/commitdiff
- Get data from CFData objects as Python strings and vv.
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 10 May 2002 22:51:58 +0000 (22:51 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 10 May 2002 22:51:58 +0000 (22:51 +0000)
- Started on supporting CFPropertyLists.

Mac/Modules/cf/cfscan.py
Mac/Modules/cf/cfsupport.py

index be11dba7ea721f04df8bce245c56729aeaba56eb..d6613ae6a3b4e03c0088580bac854761f097a573 100644 (file)
@@ -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__":
index d6904412bb0fe6a53da0795126c8e322082725de..b2ff3e1502ffe2f22e056275e7f37d2bd1f2934d 100644 (file)
@@ -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)