mirror of
https://github.com/python/cpython.git
synced 2024-11-30 05:15:14 +08:00
- Get data from CFData objects as Python strings and vv.
- Started on supporting CFPropertyLists.
This commit is contained in:
parent
e037665f99
commit
6d207c09aa
@ -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__":
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user