- Get data from CFData objects as Python strings and vv.

- Started on supporting CFPropertyLists.
This commit is contained in:
Jack Jansen 2002-05-10 22:51:58 +00:00
parent e037665f99
commit 6d207c09aa
2 changed files with 34 additions and 1 deletions

View 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__":

View 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)