150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* =========================== Module _CF =========================== */
350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen#include "Python.h"
550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen#include "pymactoolbox.h"
950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* Macro to test whether a weak-loaded CFM function exists */
1150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
12c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyErr_SetString(PyExc_NotImplementedError, \
13c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "Not available in this shared library/OS version"); \
14c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return NULL; \
1550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen    }} while(0)
1650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen#include <CoreServices/CoreServices.h>
1950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
205ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen#include "pycfbridge.h"
215ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
22537a69fe66b10614b11b129d07da146f30801717Jack Jansen#ifdef USE_TOOLBOX_OBJECT_GLUE
234eb45e7804e312b19860b15dcdac904afe407c9bJack Jansenextern PyObject *_CFObj_New(CFTypeRef);
244eb45e7804e312b19860b15dcdac904afe407c9bJack Jansenextern int _CFObj_Convert(PyObject *, CFTypeRef *);
254eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen#define CFObj_New _CFObj_New
264eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen#define CFObj_Convert _CFObj_Convert
274eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen
28537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFTypeRefObj_New(CFTypeRef);
29537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
30537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFTypeRefObj_New _CFTypeRefObj_New
31537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFTypeRefObj_Convert _CFTypeRefObj_Convert
32537a69fe66b10614b11b129d07da146f30801717Jack Jansen
33537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFStringRefObj_New(CFStringRef);
34537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFStringRefObj_Convert(PyObject *, CFStringRef *);
35537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFStringRefObj_New _CFStringRefObj_New
36537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFStringRefObj_Convert _CFStringRefObj_Convert
37537a69fe66b10614b11b129d07da146f30801717Jack Jansen
38537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFMutableStringRefObj_New(CFMutableStringRef);
39537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFMutableStringRefObj_Convert(PyObject *, CFMutableStringRef *);
40537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableStringRefObj_New _CFMutableStringRefObj_New
41537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableStringRefObj_Convert _CFMutableStringRefObj_Convert
42537a69fe66b10614b11b129d07da146f30801717Jack Jansen
43537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFArrayRefObj_New(CFArrayRef);
44537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFArrayRefObj_Convert(PyObject *, CFArrayRef *);
45537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFArrayRefObj_New _CFArrayRefObj_New
46537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFArrayRefObj_Convert _CFArrayRefObj_Convert
47537a69fe66b10614b11b129d07da146f30801717Jack Jansen
48537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFMutableArrayRefObj_New(CFMutableArrayRef);
49537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFMutableArrayRefObj_Convert(PyObject *, CFMutableArrayRef *);
50537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableArrayRefObj_New _CFMutableArrayRefObj_New
51537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableArrayRefObj_Convert _CFMutableArrayRefObj_Convert
52537a69fe66b10614b11b129d07da146f30801717Jack Jansen
53537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFDataRefObj_New(CFDataRef);
54537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFDataRefObj_Convert(PyObject *, CFDataRef *);
55537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFDataRefObj_New _CFDataRefObj_New
56537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFDataRefObj_Convert _CFDataRefObj_Convert
57537a69fe66b10614b11b129d07da146f30801717Jack Jansen
58537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFMutableDataRefObj_New(CFMutableDataRef);
59537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFMutableDataRefObj_Convert(PyObject *, CFMutableDataRef *);
60537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableDataRefObj_New _CFMutableDataRefObj_New
61537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableDataRefObj_Convert _CFMutableDataRefObj_Convert
62537a69fe66b10614b11b129d07da146f30801717Jack Jansen
63537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFDictionaryRefObj_New(CFDictionaryRef);
64537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFDictionaryRefObj_Convert(PyObject *, CFDictionaryRef *);
65537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFDictionaryRefObj_New _CFDictionaryRefObj_New
66537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFDictionaryRefObj_Convert _CFDictionaryRefObj_Convert
67537a69fe66b10614b11b129d07da146f30801717Jack Jansen
68537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFMutableDictionaryRefObj_New(CFMutableDictionaryRef);
69537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFMutableDictionaryRefObj_Convert(PyObject *, CFMutableDictionaryRef *);
70537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableDictionaryRefObj_New _CFMutableDictionaryRefObj_New
71537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFMutableDictionaryRefObj_Convert _CFMutableDictionaryRefObj_Convert
72537a69fe66b10614b11b129d07da146f30801717Jack Jansen
73537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern PyObject *_CFURLRefObj_New(CFURLRef);
74537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _CFURLRefObj_Convert(PyObject *, CFURLRef *);
75537a69fe66b10614b11b129d07da146f30801717Jack Jansenextern int _OptionalCFURLRefObj_Convert(PyObject *, CFURLRef *);
76537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFURLRefObj_New _CFURLRefObj_New
77537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define CFURLRefObj_Convert _CFURLRefObj_Convert
78537a69fe66b10614b11b129d07da146f30801717Jack Jansen#define OptionalCFURLRefObj_Convert _OptionalCFURLRefObj_Convert
7950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen#endif
8050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
8150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/*
8250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen** Parse/generate CFRange records
8350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen*/
8450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFRange_New(CFRange *itself)
8550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
86c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return Py_BuildValue("ll", (long)itself->location, (long)itself->length);
8750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
8850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
8906d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint
9050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenCFRange_Convert(PyObject *v, CFRange *p_itself)
9150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
92c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long location, length;
93918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
94c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if( !PyArg_ParseTuple(v, "ll", &location, &length) )
95c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
96c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    p_itself->location = (CFIndex)location;
97c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    p_itself->length = (CFIndex)length;
98c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
9950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
10050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
10150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* Optional CFURL argument or None (passed as NULL) */
10250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenint
10350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenOptionalCFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself)
10450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
10550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen    if ( v == Py_None ) {
106ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter        p_itself = NULL;
107ca56dd4767617a2f5e946130de4beb06442a5cd5Martin Panter        return 1;
10850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen    }
10950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen    return CFURLRefObj_Convert(v, p_itself);
11050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
11150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
11250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_Error;
11350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
11450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------------- Object type CFTypeRef ---------------------- */
11550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
11650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFTypeRef_Type;
11750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
118f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFTypeRefObj_Check(x) ((x)->ob_type == &CFTypeRef_Type || PyObject_TypeCheck((x), &CFTypeRef_Type))
11950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
12050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFTypeRefObject {
121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
122c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef ob_itself;
123c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
12450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFTypeRefObject;
12550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
12650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFTypeRefObj_New(CFTypeRef itself)
12750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObject *it;
129c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
130c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
132c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
133c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFTypeRefObject, &CFTypeRef_Type);
135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
13950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
140918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
14106d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFTypeRefObj_Convert(PyObject *v, CFTypeRef *p_itself)
14250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
14350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
14650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFTypeRefObj_Check(v))
148c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
149c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFTypeRef required");
150c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
151c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFTypeRefObject *)v)->ob_itself;
153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
15450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
15550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
15650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFTypeRefObj_dealloc(CFTypeRefObject *self)
15750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
158c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
159c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
160c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
161c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
162c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
163c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    self->ob_type->tp_free((PyObject *)self);
16450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
16550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
16650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFGetTypeID(CFTypeRefObject *_self, PyObject *_args)
16750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
168c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
169c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
170b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFGetTypeID
171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFGetTypeID);
172b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
173c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
174c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
175c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFGetTypeID(_self->ob_itself);
176c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
177c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
178c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
17950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
18050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
18150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFRetain(CFTypeRefObject *_self, PyObject *_args)
18250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
184c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef _rv;
185b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFRetain
186c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFRetain);
187b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
188c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
189c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
190c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFRetain(_self->ob_itself);
191c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
192c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFTypeRefObj_New, _rv);
193c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
19450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
19550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
19650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFRelease(CFTypeRefObject *_self, PyObject *_args)
19750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
198c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
199b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFRelease
200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFRelease);
201b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
202c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
203c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
204c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRelease(_self->ob_itself);
205c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
206c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
207c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
20850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
20950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
21050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFGetRetainCount(CFTypeRefObject *_self, PyObject *_args)
21150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
212c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
214b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFGetRetainCount
215c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFGetRetainCount);
216b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
217c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
218c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
219c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFGetRetainCount(_self->ob_itself);
220c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
221c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
222c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
22350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
22450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
22550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFEqual(CFTypeRefObject *_self, PyObject *_args)
22650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
227c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
229c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef cf2;
230b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFEqual
231c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFEqual);
232b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
233c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
234c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFTypeRefObj_Convert, &cf2))
235c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
236c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFEqual(_self->ob_itself,
237c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                  cf2);
238c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
239c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
240c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
24150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
24250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
24350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFHash(CFTypeRefObject *_self, PyObject *_args)
24450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
245c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
246c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFHashCode _rv;
247b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFHash
248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFHash);
249b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
250c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
251c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
252c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFHash(_self->ob_itself);
253c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
25650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
25750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
25850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFCopyDescription(CFTypeRefObject *_self, PyObject *_args)
25950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
262b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFCopyDescription
263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFCopyDescription);
264b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFCopyDescription(_self->ob_itself);
268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
270c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
27150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
27250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2737906634f28b6c730912bcf51644ae4a8361fb028Jack Jansenstatic PyObject *CFTypeRefObj_CFPropertyListCreateXMLData(CFTypeRefObject *_self, PyObject *_args)
2747906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen{
275c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
276c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPropertyListCreateXMLData((CFAllocatorRef)NULL,
280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                      _self->ob_itself);
281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
282c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
2847906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen}
2857906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
2867906634f28b6c730912bcf51644ae4a8361fb028Jack Jansenstatic PyObject *CFTypeRefObj_CFPropertyListCreateDeepCopy(CFTypeRefObject *_self, PyObject *_args)
2877906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen{
288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef _rv;
290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags mutabilityOption;
291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
292c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &mutabilityOption))
293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
294c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPropertyListCreateDeepCopy((CFAllocatorRef)NULL,
295c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                       _self->ob_itself,
296c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                       mutabilityOption);
297c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
298c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFTypeRefObj_New, _rv);
299c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
3007906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen}
3017906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
30250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFTypeRefObj_CFShow(CFTypeRefObject *_self, PyObject *_args)
30350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
304c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
305b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFShow
306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFShow);
307b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
309c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFShow(_self->ob_itself);
311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
31450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
31550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
3167906634f28b6c730912bcf51644ae4a8361fb028Jack Jansenstatic PyObject *CFTypeRefObj_CFPropertyListCreateFromXMLData(CFTypeRefObject *_self, PyObject *_args)
3177906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen{
318c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
319c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef _rv;
321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags mutabilityOption;
322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef errorString;
323c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
324c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &mutabilityOption))
325c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
326c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPropertyListCreateFromXMLData((CFAllocatorRef)NULL,
327c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          _self->ob_itself,
328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          mutabilityOption,
329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          &errorString);
330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (errorString)
331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        CFRelease(errorString);
332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (_rv == NULL) {
333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "Parse error in XML data");
334c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
335c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
336c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
337c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFTypeRefObj_New, _rv);
338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
3397906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
3407906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen}
3417906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
3425ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansenstatic PyObject *CFTypeRefObj_toPython(CFTypeRefObject *_self, PyObject *_args)
3435ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen{
344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3455ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = PyCF_CF2Python(_self->ob_itself);
347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
3485ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
3495ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen}
3505ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
35150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFTypeRefObj_methods[] = {
352c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFGetTypeID", (PyCFunction)CFTypeRefObj_CFGetTypeID, 1,
353c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
354c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFRetain", (PyCFunction)CFTypeRefObj_CFRetain, 1,
355c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeRef _rv)")},
356c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFRelease", (PyCFunction)CFTypeRefObj_CFRelease, 1,
357c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
358c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFGetRetainCount", (PyCFunction)CFTypeRefObj_CFGetRetainCount, 1,
359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFIndex _rv)")},
360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFEqual", (PyCFunction)CFTypeRefObj_CFEqual, 1,
361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFTypeRef cf2) -> (Boolean _rv)")},
362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFHash", (PyCFunction)CFTypeRefObj_CFHash, 1,
363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFHashCode _rv)")},
364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFCopyDescription", (PyCFunction)CFTypeRefObj_CFCopyDescription, 1,
365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
366c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPropertyListCreateXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateXMLData, 1,
367c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFDataRef _rv)")},
368c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPropertyListCreateDeepCopy", (PyCFunction)CFTypeRefObj_CFPropertyListCreateDeepCopy, 1,
369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRef _rv)")},
370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFShow", (PyCFunction)CFTypeRefObj_CFShow, 1,
371c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
372c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPropertyListCreateFromXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateFromXMLData, 1,
373c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRefObj)")},
374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"toPython", (PyCFunction)CFTypeRefObj_toPython, 1,
375c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (python_object)")},
376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
37750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
37850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
3793bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFTypeRefObj_getsetlist NULL
38050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
38150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
38250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFTypeRefObj_compare(CFTypeRefObject *self, CFTypeRefObject *other)
38350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
384c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
385c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
38850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
38950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
39050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFTypeRefObj_repr(CFTypeRefObject *self)
39150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFTypeRef type-%d object at 0x%8.8x for 0x%8.8x>", (int)CFGetTypeID(self->ob_itself), (unsigned)self, (unsigned)self->ob_itself);
394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
39550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
39650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
39750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFTypeRefObj_hash(CFTypeRefObject *self)
39850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
399c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
400c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
40150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
402918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFTypeRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
4033bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef itself;
405c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
4063bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
409c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFTypeRefObject *)_self)->ob_itself = itself;
410c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
411c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
412c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
4133bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
4143bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
4153bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFTypeRefObj_tp_alloc PyType_GenericAlloc
4163bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
417918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFTypeRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
4183bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
420c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFTypeRefObject *)self)->ob_itself = NULL;
422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFTypeRefObject *)self)->ob_freeit = CFRelease;
423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
4243bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
4253bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
4263bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFTypeRefObj_tp_free PyObject_Del
4273bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
42850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
42950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFTypeRef_Type = {
430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
431c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
432c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFTypeRef", /*tp_name*/
433c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFTypeRefObject), /*tp_basicsize*/
434c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
435c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
436c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFTypeRefObj_dealloc, /*tp_dealloc*/
437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFTypeRefObj_compare, /*tp_compare*/
441c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFTypeRefObj_repr, /*tp_repr*/
442c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
443c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
444c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFTypeRefObj_hash, /*tp_hash*/
446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
448c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
451c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
454c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_methods, /* tp_methods */
460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_getsetlist, /*tp_getset*/
462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
465c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_tp_init, /* tp_init */
468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_tp_alloc, /* tp_alloc */
469c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_tp_new, /* tp_new */
470c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRefObj_tp_free, /* tp_free */
47150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
47250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
47350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------- End object type CFTypeRef -------------------- */
47450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
47550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
47650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------------- Object type CFArrayRef --------------------- */
47750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
47850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFArrayRef_Type;
47950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
480f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFArrayRefObj_Check(x) ((x)->ob_type == &CFArrayRef_Type || PyObject_TypeCheck((x), &CFArrayRef_Type))
48150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
48250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFArrayRefObject {
483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
484c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef ob_itself;
485c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
48650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFArrayRefObject;
48750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
48850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFArrayRefObj_New(CFArrayRef itself)
48950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObject *it;
491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
494c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFArrayRefObject, &CFArrayRef_Type);
497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
50250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
503918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
50406d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFArrayRefObj_Convert(PyObject *v, CFArrayRef *p_itself)
50550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
50650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
50950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFArrayRefObj_Check(v))
511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFArrayRef required");
513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
514c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
515c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFArrayRefObject *)v)->ob_itself;
516c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
51750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
51850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
51950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFArrayRefObj_dealloc(CFArrayRefObject *self)
52050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
524c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
525c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
526c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.tp_dealloc((PyObject *)self);
52750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
52850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
52950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFArrayRefObj_CFArrayCreateCopy(CFArrayRefObject *_self, PyObject *_args)
53050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
531c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
532c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef _rv;
533c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
534c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
535c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFArrayCreateCopy((CFAllocatorRef)NULL,
536c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            _self->ob_itself);
537c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
538c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFArrayRefObj_New, _rv);
539c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
54050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
54150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
54250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFArrayRefObj_CFArrayGetCount(CFArrayRefObject *_self, PyObject *_args)
54350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
545c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
546b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayGetCount
547c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayGetCount);
548b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
549c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFArrayGetCount(_self->ob_itself);
552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
553c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
554c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
55550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
55650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
55750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFArrayRefObj_CFStringCreateByCombiningStrings(CFArrayRefObject *_self, PyObject *_args)
55850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
560c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef separatorString;
562c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
563c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &separatorString))
564c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
565c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateByCombiningStrings((CFAllocatorRef)NULL,
566c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           _self->ob_itself,
567c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           separatorString);
568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
569c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
570c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
57150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
57250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
57350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFArrayRefObj_methods[] = {
574c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayCreateCopy", (PyCFunction)CFArrayRefObj_CFArrayCreateCopy, 1,
575c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFArrayRef _rv)")},
576c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayGetCount", (PyCFunction)CFArrayRefObj_CFArrayGetCount, 1,
577c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFIndex _rv)")},
578c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateByCombiningStrings", (PyCFunction)CFArrayRefObj_CFStringCreateByCombiningStrings, 1,
579c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef separatorString) -> (CFStringRef _rv)")},
580c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
58150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
58250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
5833bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFArrayRefObj_getsetlist NULL
58450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
58550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
58650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFArrayRefObj_compare(CFArrayRefObject *self, CFArrayRefObject *other)
58750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
588c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
589c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
590c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
59250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
59350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
59450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFArrayRefObj_repr(CFArrayRefObject *self)
59550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
596c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
597c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
598c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
59950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
60050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
60150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFArrayRefObj_hash(CFArrayRefObject *self)
60250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
604c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
60550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
606918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
6073bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef itself;
609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
6103bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
611c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFArrayRefObj_Convert, &itself))
612c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
613c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFArrayRefObject *)_self)->ob_itself = itself;
614c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
615c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
6163bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
617c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
620c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFArrayRefObject *)_self)->ob_itself = itself;
621c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
622c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
6243bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
6253bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
6263bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFArrayRefObj_tp_alloc PyType_GenericAlloc
6273bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
628918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
6293bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
631c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFArrayRefObject *)self)->ob_itself = NULL;
633c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFArrayRefObject *)self)->ob_freeit = CFRelease;
634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
6353bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
6363bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
6373bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFArrayRefObj_tp_free PyObject_Del
6383bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
63950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
64050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFArrayRef_Type = {
641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
642c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFArrayRef", /*tp_name*/
644c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFArrayRefObject), /*tp_basicsize*/
645c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
646c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
647c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFArrayRefObj_dealloc, /*tp_dealloc*/
648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
649c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
650c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
651c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFArrayRefObj_compare, /*tp_compare*/
652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFArrayRefObj_repr, /*tp_repr*/
653c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFArrayRefObj_hash, /*tp_hash*/
657c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
658c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
659c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
661c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
662c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
663c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
664c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
665c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
670c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_methods, /* tp_methods */
671c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
672c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_getsetlist, /*tp_getset*/
673c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
674c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
675c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_tp_init, /* tp_init */
679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_tp_alloc, /* tp_alloc */
680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_tp_new, /* tp_new */
681c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRefObj_tp_free, /* tp_free */
68250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
68350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
68450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------- End object type CFArrayRef ------------------- */
68550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
68650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
68750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ----------------- Object type CFMutableArrayRef ------------------ */
68850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
68950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableArrayRef_Type;
69050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
691f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFMutableArrayRefObj_Check(x) ((x)->ob_type == &CFMutableArrayRef_Type || PyObject_TypeCheck((x), &CFMutableArrayRef_Type))
69250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
69350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFMutableArrayRefObject {
694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef ob_itself;
696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
69750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFMutableArrayRefObject;
69850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
69950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFMutableArrayRefObj_New(CFMutableArrayRef itself)
70050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
701c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObject *it;
702c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
703c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
704c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
705c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
706c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
707c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFMutableArrayRefObject, &CFMutableArrayRef_Type);
708c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
710c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
71350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
714918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
71506d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFMutableArrayRefObj_Convert(PyObject *v, CFMutableArrayRef *p_itself)
71650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
71750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
72050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
721c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFMutableArrayRefObj_Check(v))
722c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
723c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFMutableArrayRef required");
724c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFMutableArrayRefObject *)v)->ob_itself;
727c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
72850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
72950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
73050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self)
73150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
733c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
734c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
735c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
737c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef_Type.tp_dealloc((PyObject *)self);
73850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
73950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
74050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableArrayRefObj_CFArrayRemoveValueAtIndex(CFMutableArrayRefObject *_self, PyObject *_args)
74150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
742c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
743c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex idx;
744b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayRemoveValueAtIndex
745c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayRemoveValueAtIndex);
746b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
747c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
748c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &idx))
749c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRemoveValueAtIndex(_self->ob_itself,
751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              idx);
752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
754c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
75550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
75650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
75750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableArrayRefObj_CFArrayRemoveAllValues(CFMutableArrayRefObject *_self, PyObject *_args)
75850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
759c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
760b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayRemoveAllValues
761c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayRemoveAllValues);
762b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
763c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
764c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRemoveAllValues(_self->ob_itself);
766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
767c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
76950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
77050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
77150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices(CFMutableArrayRefObject *_self, PyObject *_args)
77250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
773c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex idx1;
775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex idx2;
776b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayExchangeValuesAtIndices
777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayExchangeValuesAtIndices);
778b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
779c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
780c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &idx1,
781c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &idx2))
782c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
783c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayExchangeValuesAtIndices(_self->ob_itself,
784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   idx1,
785c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   idx2);
786c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
788c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
78950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
79050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
7912168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFMutableArrayRefObj_CFArrayAppendArray(CFMutableArrayRefObject *_self, PyObject *_args)
7922168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
793c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
794c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef otherArray;
795c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange otherRange;
7962168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFArrayAppendArray
797c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayAppendArray);
7982168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
799c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
800c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFArrayRefObj_Convert, &otherArray,
801c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &otherRange))
802c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
803c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayAppendArray(_self->ob_itself,
804c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       otherArray,
805c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       otherRange);
806c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
807c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
8092168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
8102168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
81150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFMutableArrayRefObj_methods[] = {
812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayRemoveValueAtIndex", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveValueAtIndex, 1,
813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex idx) -> None")},
814c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayRemoveAllValues", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveAllValues, 1,
815c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
816c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayExchangeValuesAtIndices", (PyCFunction)CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices, 1,
817c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex idx1, CFIndex idx2) -> None")},
818c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayAppendArray", (PyCFunction)CFMutableArrayRefObj_CFArrayAppendArray, 1,
819c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFArrayRef otherArray, CFRange otherRange) -> None")},
820c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
82150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
82250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
8233bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableArrayRefObj_getsetlist NULL
82450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
82550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
82650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableArrayRefObj_compare(CFMutableArrayRefObject *self, CFMutableArrayRefObject *other)
82750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
828c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
829c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
83250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
83350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
83450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFMutableArrayRefObj_repr(CFMutableArrayRefObject *self)
83550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
836c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
837c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFMutableArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
838c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
83950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
84050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
84150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableArrayRefObj_hash(CFMutableArrayRefObject *self)
84250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
843c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
844c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
84550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
846918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFMutableArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
8473bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
848c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef itself;
849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
8503bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableArrayRefObj_Convert, &itself))
852c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
853c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableArrayRefObject *)_self)->ob_itself = itself;
854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
8563bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
857c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
858c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
859c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
860c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableArrayRefObject *)_self)->ob_itself = itself;
861c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
862c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
863c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
8643bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
8653bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
8663bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableArrayRefObj_tp_alloc PyType_GenericAlloc
8673bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
868918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFMutableArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
8693bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
872c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableArrayRefObject *)self)->ob_itself = NULL;
873c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableArrayRefObject *)self)->ob_freeit = CFRelease;
874c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
8753bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
8763bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
8773bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableArrayRefObj_tp_free PyObject_Del
8783bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
87950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
88050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableArrayRef_Type = {
881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFMutableArrayRef", /*tp_name*/
884c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFMutableArrayRefObject), /*tp_basicsize*/
885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
886c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFMutableArrayRefObj_dealloc, /*tp_dealloc*/
888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
889c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
890c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
891c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFMutableArrayRefObj_compare, /*tp_compare*/
892c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFMutableArrayRefObj_repr, /*tp_repr*/
893c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
895c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFMutableArrayRefObj_hash, /*tp_hash*/
897c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
898c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
900c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
904c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
905c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
906c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
907c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_methods, /* tp_methods */
911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
912c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_getsetlist, /*tp_getset*/
913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
914c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
916c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
917c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
918c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_tp_init, /* tp_init */
919c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_tp_alloc, /* tp_alloc */
920c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_tp_new, /* tp_new */
921c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRefObj_tp_free, /* tp_free */
92250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
92350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
92450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------- End object type CFMutableArrayRef ---------------- */
92550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
92650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
92750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------ Object type CFDictionaryRef ------------------- */
92850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
92950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFDictionaryRef_Type;
93050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
931f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFDictionaryRefObj_Check(x) ((x)->ob_type == &CFDictionaryRef_Type || PyObject_TypeCheck((x), &CFDictionaryRef_Type))
93250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
93350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFDictionaryRefObject {
934c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
935c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef ob_itself;
936c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
93750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFDictionaryRefObject;
93850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
93950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFDictionaryRefObj_New(CFDictionaryRef itself)
94050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
941c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObject *it;
942c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
943c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
944c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
945c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
946c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFDictionaryRefObject, &CFDictionaryRef_Type);
948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
950c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
952c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
95350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
954918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
95506d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFDictionaryRefObj_Convert(PyObject *v, CFDictionaryRef *p_itself)
95650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
95750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
959c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
96050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
961c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFDictionaryRefObj_Check(v))
962c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
963c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFDictionaryRef required");
964c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
965c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFDictionaryRefObject *)v)->ob_itself;
967c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
96850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
96950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
97050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self)
97150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
974c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
975c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
976c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
977c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.tp_dealloc((PyObject *)self);
97850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
97950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
98050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFDictionaryRefObj_CFDictionaryCreateCopy(CFDictionaryRefObject *_self, PyObject *_args)
98150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
982c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef _rv;
984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDictionaryCreateCopy((CFAllocatorRef)NULL,
987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                 _self->ob_itself);
988c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
989c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDictionaryRefObj_New, _rv);
990c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
99150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
99250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
99350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFDictionaryRefObj_CFDictionaryGetCount(CFDictionaryRefObject *_self, PyObject *_args)
99450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
995c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
996c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
997b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDictionaryGetCount
998c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDictionaryGetCount);
999b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1000c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1001c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1002c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDictionaryGetCount(_self->ob_itself);
1003c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
1004c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
1005c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
100650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
100750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
100850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFDictionaryRefObj_methods[] = {
1009c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryCreateCopy", (PyCFunction)CFDictionaryRefObj_CFDictionaryCreateCopy, 1,
1010c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFDictionaryRef _rv)")},
1011c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryGetCount", (PyCFunction)CFDictionaryRefObj_CFDictionaryGetCount, 1,
1012c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFIndex _rv)")},
1013c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
101450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
101550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
10163bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDictionaryRefObj_getsetlist NULL
101750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
101850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
101950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFDictionaryRefObj_compare(CFDictionaryRefObject *self, CFDictionaryRefObject *other)
102050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1021c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
1022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
1023c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
1024c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
102550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
102650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
102750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFDictionaryRefObj_repr(CFDictionaryRefObject *self)
102850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1029c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
1030c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
1031c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
103250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
103350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
103450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFDictionaryRefObj_hash(CFDictionaryRefObject *self)
103550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1036c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
1037c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
103850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1039918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
10403bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1041c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef itself;
1042c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
10433bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1044c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDictionaryRefObj_Convert, &itself))
1045c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1046c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFDictionaryRefObject *)_self)->ob_itself = itself;
1047c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1048c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
10493bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1050c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
1051c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
1052c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1053c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFDictionaryRefObject *)_self)->ob_itself = itself;
1054c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1055c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1056c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
10573bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
10583bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
10593bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDictionaryRefObj_tp_alloc PyType_GenericAlloc
10603bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1061918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
10623bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1063c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
1064c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1065c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFDictionaryRefObject *)self)->ob_itself = NULL;
1066c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFDictionaryRefObject *)self)->ob_freeit = CFRelease;
1067c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
10683bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
10693bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
10703bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDictionaryRefObj_tp_free PyObject_Del
10713bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
107250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
107350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFDictionaryRef_Type = {
1074c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
1075c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
1076c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFDictionaryRef", /*tp_name*/
1077c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFDictionaryRefObject), /*tp_basicsize*/
1078c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
1079c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
1080c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFDictionaryRefObj_dealloc, /*tp_dealloc*/
1081c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
1082c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
1083c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
1084c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFDictionaryRefObj_compare, /*tp_compare*/
1085c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFDictionaryRefObj_repr, /*tp_repr*/
1086c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
1087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
1088c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
1089c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFDictionaryRefObj_hash, /*tp_hash*/
1090c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
1091c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
1092c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
1093c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
1094c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
1095c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1096c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
1097c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
1098c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
1099c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
1100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
1101c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
1102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
1103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_methods, /* tp_methods */
1104c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
1105c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_getsetlist, /*tp_getset*/
1106c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
1107c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
1108c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
1109c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
1110c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
1111c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_tp_init, /* tp_init */
1112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_tp_alloc, /* tp_alloc */
1113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_tp_new, /* tp_new */
1114c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRefObj_tp_free, /* tp_free */
111550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
111650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
111750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ---------------- End object type CFDictionaryRef ----------------- */
111850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
111950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
112050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------- Object type CFMutableDictionaryRef --------------- */
112150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
112250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableDictionaryRef_Type;
112350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1124f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFMutableDictionaryRefObj_Check(x) ((x)->ob_type == &CFMutableDictionaryRef_Type || PyObject_TypeCheck((x), &CFMutableDictionaryRef_Type))
112550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
112650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFMutableDictionaryRefObject {
1127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
1128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef ob_itself;
1129c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
113050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFMutableDictionaryRefObject;
113150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
113250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef itself)
113350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObject *it;
1135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
1136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
1138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1139c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1140c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFMutableDictionaryRefObject, &CFMutableDictionaryRef_Type);
1141c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
1142c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
1143c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
1144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
1145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
114650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1147918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
114806d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFMutableDictionaryRefObj_Convert(PyObject *v, CFMutableDictionaryRef *p_itself)
114950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
115050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1151c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
1152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
115350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1154c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFMutableDictionaryRefObj_Check(v))
1155c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1156c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFMutableDictionaryRef required");
1157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1158c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1159c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFMutableDictionaryRefObject *)v)->ob_itself;
1160c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
116150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
116250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
116350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self)
116450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1165c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
1166c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1167c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
1168c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
1169c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1170c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef_Type.tp_dealloc((PyObject *)self);
117150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
117250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
117350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues(CFMutableDictionaryRefObject *_self, PyObject *_args)
117450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1175c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1176b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDictionaryRemoveAllValues
1177c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDictionaryRemoveAllValues);
1178b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1179c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1180c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1181c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRemoveAllValues(_self->ob_itself);
1182c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1184c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
118550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
118650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
118750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFMutableDictionaryRefObj_methods[] = {
1188c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryRemoveAllValues", (PyCFunction)CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues, 1,
1189c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
1190c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
119150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
119250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
11933bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDictionaryRefObj_getsetlist NULL
119450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
119550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
119650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableDictionaryRefObj_compare(CFMutableDictionaryRefObject *self, CFMutableDictionaryRefObject *other)
119750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1198c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
1199c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
1200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
1201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
120250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
120350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
120450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFMutableDictionaryRefObj_repr(CFMutableDictionaryRefObject *self)
120550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1206c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
1207c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFMutableDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
1208c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
120950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
121050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
121150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableDictionaryRefObj_hash(CFMutableDictionaryRefObject *self)
121250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
1214c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
121550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1216918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFMutableDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
12173bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1218c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef itself;
1219c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
12203bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1221c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDictionaryRefObj_Convert, &itself))
1222c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1223c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;
1224c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1225c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
12263bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1227c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
1228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
1229c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1230c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;
1231c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1232c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1233c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
12343bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
12353bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
12363bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDictionaryRefObj_tp_alloc PyType_GenericAlloc
12373bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1238918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFMutableDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
12393bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1240c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
1241c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1242c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableDictionaryRefObject *)self)->ob_itself = NULL;
1243c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableDictionaryRefObject *)self)->ob_freeit = CFRelease;
1244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
12453bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
12463bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
12473bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDictionaryRefObj_tp_free PyObject_Del
12483bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
124950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
125050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableDictionaryRef_Type = {
1251c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
1252c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
1253c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFMutableDictionaryRef", /*tp_name*/
1254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFMutableDictionaryRefObject), /*tp_basicsize*/
1255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
1256c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
1257c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFMutableDictionaryRefObj_dealloc, /*tp_dealloc*/
1258c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
1259c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
1260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
1261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFMutableDictionaryRefObj_compare, /*tp_compare*/
1262c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFMutableDictionaryRefObj_repr, /*tp_repr*/
1263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
1264c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
1265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
1266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFMutableDictionaryRefObj_hash, /*tp_hash*/
1267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
1268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
1269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
1270c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
1271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
1272c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1273c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
1274c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
1275c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
1276c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
1277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
1278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
1279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
1280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_methods, /* tp_methods */
1281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
1282c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_getsetlist, /*tp_getset*/
1283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
1284c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
1285c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
1286c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
1287c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
1288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_tp_init, /* tp_init */
1289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_tp_alloc, /* tp_alloc */
1290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_tp_new, /* tp_new */
1291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRefObj_tp_free, /* tp_free */
129250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
129350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
129450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------- End object type CFMutableDictionaryRef ------------- */
129550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
129650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
129750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------------- Object type CFDataRef ---------------------- */
129850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
129950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFDataRef_Type;
130050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1301f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFDataRefObj_Check(x) ((x)->ob_type == &CFDataRef_Type || PyObject_TypeCheck((x), &CFDataRef_Type))
130250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
130350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFDataRefObject {
1304c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
1305c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef ob_itself;
1306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
130750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFDataRefObject;
130850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
130950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFDataRefObj_New(CFDataRef itself)
131050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObject *it;
1312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
1313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1314c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
1315c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1316c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1317c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFDataRefObject, &CFDataRef_Type);
1318c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
1319c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
1320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
1321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
1322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
132350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1324918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
132506d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFDataRefObj_Convert(PyObject *v, CFDataRef *p_itself)
132650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
132750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
1329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyString_Check(v)) {
1330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        char *cStr;
1331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        Py_ssize_t cLen;
1332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;
1333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        *p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen);
1334c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 1;
1335c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
133650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1337c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFDataRefObj_Check(v))
1338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFDataRef required");
1340c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1342c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFDataRefObject *)v)->ob_itself;
1343c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
134450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
134550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
134650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFDataRefObj_dealloc(CFDataRefObject *self)
134750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
1349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
1351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
1352c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1353c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.tp_dealloc((PyObject *)self);
135450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
135550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
135650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFDataRefObj_CFDataCreateCopy(CFDataRefObject *_self, PyObject *_args)
135750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1358c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
1360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataCreateCopy((CFAllocatorRef)NULL,
1363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           _self->ob_itself);
1364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
1365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
1366c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
136750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
136850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
136950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFDataRefObj_CFDataGetLength(CFDataRefObject *_self, PyObject *_args)
137050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1371c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1372c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
1373b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataGetLength
1374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataGetLength);
1375b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1378c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataGetLength(_self->ob_itself);
1379c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
1380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
1381c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
138250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
138350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
138450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFDataRefObj_CFStringCreateFromExternalRepresentation(CFDataRefObject *_self, PyObject *_args)
138550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
1388c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
1389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
1390c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
1391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateFromExternalRepresentation((CFAllocatorRef)NULL,
1393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                   _self->ob_itself,
1394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                   encoding);
1395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
1396c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
1397c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
139850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
139950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
14007906634f28b6c730912bcf51644ae4a8361fb028Jack Jansenstatic PyObject *CFDataRefObj_CFDataGetData(CFDataRefObject *_self, PyObject *_args)
14017906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen{
1402c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
14037906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
1404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int size = CFDataGetLength(_self->ob_itself);
1405c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *data = (char *)CFDataGetBytePtr(_self->ob_itself);
14067906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
1407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = (PyObject *)PyString_FromStringAndSize(data, size);
1408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
14097906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
14107906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen}
14117906634f28b6c730912bcf51644ae4a8361fb028Jack Jansen
141250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFDataRefObj_methods[] = {
1413c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataCreateCopy", (PyCFunction)CFDataRefObj_CFDataCreateCopy, 1,
1414c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFDataRef _rv)")},
1415c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataGetLength", (PyCFunction)CFDataRefObj_CFDataGetLength, 1,
1416c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFIndex _rv)")},
1417c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateFromExternalRepresentation", (PyCFunction)CFDataRefObj_CFStringCreateFromExternalRepresentation, 1,
1418c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
1419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataGetData", (PyCFunction)CFDataRefObj_CFDataGetData, 1,
1420c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (string _rv)")},
1421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
142250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
142350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
14243bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDataRefObj_getsetlist NULL
142550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
142650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
142750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFDataRefObj_compare(CFDataRefObject *self, CFDataRefObject *other)
142850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
1430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
1431c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
1432c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
143350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
143450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
143550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFDataRefObj_repr(CFDataRefObject *self)
143650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
1438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
1439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
144050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
144150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
144250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFDataRefObj_hash(CFDataRefObject *self)
144350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1444c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
1445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
144650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1447918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
14483bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef itself;
1450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
14513bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDataRefObj_Convert, &itself))
1453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1454c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFDataRefObject *)_self)->ob_itself = itself;
1455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
14573bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
1459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
1460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFDataRefObject *)_self)->ob_itself = itself;
1462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
14653bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
14663bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
14673bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDataRefObj_tp_alloc PyType_GenericAlloc
14683bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1469918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
14703bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1471c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
1472c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1473c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFDataRefObject *)self)->ob_itself = NULL;
1474c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFDataRefObject *)self)->ob_freeit = CFRelease;
1475c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
14763bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
14773bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
14783bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFDataRefObj_tp_free PyObject_Del
14793bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
148050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
148150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFDataRef_Type = {
1482c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
1483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
1484c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFDataRef", /*tp_name*/
1485c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFDataRefObject), /*tp_basicsize*/
1486c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
1487c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
1488c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFDataRefObj_dealloc, /*tp_dealloc*/
1489c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
1490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
1491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
1492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFDataRefObj_compare, /*tp_compare*/
1493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFDataRefObj_repr, /*tp_repr*/
1494c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
1495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
1496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
1497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFDataRefObj_hash, /*tp_hash*/
1498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
1499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
1500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
1501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
1502c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
1503c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1504c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
1505c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
1506c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
1507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
1508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
1509c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
1510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
1511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_methods, /* tp_methods */
1512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
1513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_getsetlist, /*tp_getset*/
1514c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
1515c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
1516c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
1517c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
1518c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
1519c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_tp_init, /* tp_init */
1520c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_tp_alloc, /* tp_alloc */
1521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_tp_new, /* tp_new */
1522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRefObj_tp_free, /* tp_free */
152350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
152450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
152550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------- End object type CFDataRef -------------------- */
152650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
152750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
152850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------ Object type CFMutableDataRef ------------------ */
152950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
153050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableDataRef_Type;
153150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1532f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFMutableDataRefObj_Check(x) ((x)->ob_type == &CFMutableDataRef_Type || PyObject_TypeCheck((x), &CFMutableDataRef_Type))
153350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
153450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFMutableDataRefObject {
1535c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
1536c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef ob_itself;
1537c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
153850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFMutableDataRefObject;
153950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
154050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFMutableDataRefObj_New(CFMutableDataRef itself)
154150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1542c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObject *it;
1543c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
1544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1545c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
1546c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1547c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1548c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFMutableDataRefObject, &CFMutableDataRef_Type);
1549c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
1550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
1551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
1552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
1553c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
155450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1555918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
155606d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFMutableDataRefObj_Convert(PyObject *v, CFMutableDataRef *p_itself)
155750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
155850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
1560c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
156150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1562c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFMutableDataRefObj_Check(v))
1563c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1564c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFMutableDataRef required");
1565c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1566c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1567c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFMutableDataRefObject *)v)->ob_itself;
1568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
156950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
157050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
157150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self)
157250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1573c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
1574c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1575c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
1576c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
1577c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1578c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef_Type.tp_dealloc((PyObject *)self);
157950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
158050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
158150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDataRefObj_CFDataSetLength(CFMutableDataRefObject *_self, PyObject *_args)
158250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1584c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex length;
1585b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataSetLength
1586c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataSetLength);
1587b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1588c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
1589c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &length))
1590c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataSetLength(_self->ob_itself,
1592c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    length);
1593c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1594c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1595c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
159650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
159750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
159850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDataRefObj_CFDataIncreaseLength(CFMutableDataRefObject *_self, PyObject *_args)
159950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1600c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1601c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex extraLength;
1602b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataIncreaseLength
1603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataIncreaseLength);
1604b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1605c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
1606c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &extraLength))
1607c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataIncreaseLength(_self->ob_itself,
1609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         extraLength);
1610c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1611c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1612c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
161350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
161450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
161550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDataRefObj_CFDataAppendBytes(CFMutableDataRefObject *_self, PyObject *_args)
161650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1617c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *bytes__in__;
1619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long bytes__len__;
1620c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int bytes__in_len__;
1621b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataAppendBytes
1622c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataAppendBytes);
1623b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1624c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#",
1625c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &bytes__in__, &bytes__in_len__))
1626c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1627c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    bytes__len__ = bytes__in_len__;
1628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataAppendBytes(_self->ob_itself,
1629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                      bytes__in__, bytes__len__);
1630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1631c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
163350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
163450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
163550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDataRefObj_CFDataReplaceBytes(CFMutableDataRefObject *_self, PyObject *_args)
163650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1637c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1638c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
1639c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *newBytes__in__;
1640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long newBytes__len__;
1641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int newBytes__in_len__;
1642b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataReplaceBytes
1643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataReplaceBytes);
1644b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1645c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&s#",
1646c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range,
1647c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &newBytes__in__, &newBytes__in_len__))
1648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1649c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    newBytes__len__ = newBytes__in_len__;
1650c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataReplaceBytes(_self->ob_itself,
1651c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       range,
1652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       newBytes__in__, newBytes__len__);
1653c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
165650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
165750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
165850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableDataRefObj_CFDataDeleteBytes(CFMutableDataRefObject *_self, PyObject *_args)
165950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1661c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
1662b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataDeleteBytes
1663c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataDeleteBytes);
1664b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1665c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
1666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range))
1667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataDeleteBytes(_self->ob_itself,
1669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                      range);
1670c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
1671c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
1672c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
167350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
167450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
167550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFMutableDataRefObj_methods[] = {
1676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataSetLength", (PyCFunction)CFMutableDataRefObj_CFDataSetLength, 1,
1677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex length) -> None")},
1678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataIncreaseLength", (PyCFunction)CFMutableDataRefObj_CFDataIncreaseLength, 1,
1679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex extraLength) -> None")},
1680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataAppendBytes", (PyCFunction)CFMutableDataRefObj_CFDataAppendBytes, 1,
1681c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer bytes) -> None")},
1682c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataReplaceBytes", (PyCFunction)CFMutableDataRefObj_CFDataReplaceBytes, 1,
1683c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range, Buffer newBytes) -> None")},
1684c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataDeleteBytes", (PyCFunction)CFMutableDataRefObj_CFDataDeleteBytes, 1,
1685c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range) -> None")},
1686c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
168750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
168850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
16893bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDataRefObj_getsetlist NULL
169050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
169150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
169250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableDataRefObj_compare(CFMutableDataRefObject *self, CFMutableDataRefObject *other)
169350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
1695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
1696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
1697c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
169850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
169950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
170050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFMutableDataRefObj_repr(CFMutableDataRefObject *self)
170150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1702c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
1703c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFMutableDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
1704c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
170550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
170650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
170750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableDataRefObj_hash(CFMutableDataRefObject *self)
170850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
1710c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
171150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1712918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFMutableDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
17133bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef itself;
1715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
17163bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1717c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDataRefObj_Convert, &itself))
1718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableDataRefObject *)_self)->ob_itself = itself;
1720c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1721c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
17223bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1723c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
1724c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
1725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableDataRefObject *)_self)->ob_itself = itself;
1727c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1728c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1729c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
17303bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
17313bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
17323bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDataRefObj_tp_alloc PyType_GenericAlloc
17333bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
1734918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFMutableDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
17353bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
1736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
1737c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1738c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableDataRefObject *)self)->ob_itself = NULL;
1739c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableDataRefObject *)self)->ob_freeit = CFRelease;
1740c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
17413bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
17423bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
17433bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableDataRefObj_tp_free PyObject_Del
17443bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
174550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
174650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableDataRef_Type = {
1747c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
1748c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
1749c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFMutableDataRef", /*tp_name*/
1750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFMutableDataRefObject), /*tp_basicsize*/
1751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
1752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
1753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFMutableDataRefObj_dealloc, /*tp_dealloc*/
1754c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
1755c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
1756c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
1757c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFMutableDataRefObj_compare, /*tp_compare*/
1758c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFMutableDataRefObj_repr, /*tp_repr*/
1759c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
1760c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
1761c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
1762c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFMutableDataRefObj_hash, /*tp_hash*/
1763c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
1764c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
1765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
1766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
1767c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
1768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1769c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
1770c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
1771c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
1772c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
1773c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
1774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
1775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
1776c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_methods, /* tp_methods */
1777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
1778c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_getsetlist, /*tp_getset*/
1779c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
1780c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
1781c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
1782c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
1783c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
1784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_tp_init, /* tp_init */
1785c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_tp_alloc, /* tp_alloc */
1786c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_tp_new, /* tp_new */
1787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRefObj_tp_free, /* tp_free */
178850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
178950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
179050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ---------------- End object type CFMutableDataRef ---------------- */
179150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
179250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
179350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* -------------------- Object type CFStringRef --------------------- */
179450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
179550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFStringRef_Type;
179650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1797f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFStringRefObj_Check(x) ((x)->ob_type == &CFStringRef_Type || PyObject_TypeCheck((x), &CFStringRef_Type))
179850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
179950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFStringRefObject {
1800c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
1801c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef ob_itself;
1802c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
180350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFStringRefObject;
180450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
180550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFStringRefObj_New(CFStringRef itself)
180650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1807c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObject *it;
1808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
1809c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1810c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
1811c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFStringRefObject, &CFStringRef_Type);
1814c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
1815c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
1816c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
1817c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
1818c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
181950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
1820918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
182106d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFStringRefObj_Convert(PyObject *v, CFStringRef *p_itself)
182250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
182350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
1824c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
1825c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyString_Check(v)) {
1826c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        char *cStr;
1827c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (!PyArg_Parse(v, "es", "ascii", &cStr))
1828c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1829c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        *p_itself = CFStringCreateWithCString((CFAllocatorRef)NULL, cStr, kCFStringEncodingASCII);
1830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyMem_Free(cStr);
1831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 1;
1832c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyUnicode_Check(v)) {
1834c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* We use the CF types here, if Python was configured differently that will give an error */
1835c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        CFIndex size = PyUnicode_GetSize(v);
1836c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        UniChar *unichars = PyUnicode_AsUnicode(v);
1837c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        if (!unichars) return 0;
1838c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        *p_itself = CFStringCreateWithCharacters((CFAllocatorRef)NULL, unichars, size);
1839c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 1;
1840c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1841c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1842c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
1843c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFStringRefObj_Check(v))
1844c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1845c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFStringRef required");
1846c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
1847c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1848c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFStringRefObject *)v)->ob_itself;
1849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
185050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
185150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
185250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFStringRefObj_dealloc(CFStringRefObject *self)
185350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
1855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
1856c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
1857c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
1858c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
1859c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.tp_dealloc((PyObject *)self);
186050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
186150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
186250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCreateWithSubstring(CFStringRefObject *_self, PyObject *_args)
186350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1864c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1865c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
1866c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
1867c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
1868c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range))
1869c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithSubstring((CFAllocatorRef)NULL,
1871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                      _self->ob_itself,
1872c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                      range);
1873c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
1874c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
1875c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
187650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
187750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
187850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCreateCopy(CFStringRefObject *_self, PyObject *_args)
187950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1880c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
1882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1884c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateCopy((CFAllocatorRef)NULL,
1885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             _self->ob_itself);
1886c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
1887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
1888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
188950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
189050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
189150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetLength(CFStringRefObject *_self, PyObject *_args)
189250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1893c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
1895b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetLength
1896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetLength);
1897b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1898c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1900c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetLength(_self->ob_itself);
1901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
1902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
1903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
190450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
190550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
190650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetBytes(CFStringRefObject *_self, PyObject *_args)
190750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
1910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
1911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
1912c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt8 lossByte;
1913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isExternalRepresentation;
1914c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt8 buffer;
1915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex maxBufLen;
1916c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex usedBufLen;
1917b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetBytes
1918c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetBytes);
1919b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1920c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&lbll",
1921c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range,
1922c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding,
1923c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &lossByte,
1924c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isExternalRepresentation,
1925c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &maxBufLen))
1926c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1927c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetBytes(_self->ob_itself,
1928c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           range,
1929c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           encoding,
1930c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           lossByte,
1931c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           isExternalRepresentation,
1932c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           &buffer,
1933c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           maxBufLen,
1934c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                           &usedBufLen);
1935c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("lbl",
1936c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
1937c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         buffer,
1938c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         usedBufLen);
1939c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
194050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
194150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
194250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCreateExternalRepresentation(CFStringRefObject *_self, PyObject *_args)
194350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1944c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1945c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
1946c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
1947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt8 lossByte;
1948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lb",
1949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding,
1950c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &lossByte))
1951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1952c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateExternalRepresentation((CFAllocatorRef)NULL,
1953c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               _self->ob_itself,
1954c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               encoding,
1955c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               lossByte);
1956c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
1957c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
1958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
195950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
196050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
196150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetSmallestEncoding(CFStringRefObject *_self, PyObject *_args)
196250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1963c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1964c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
1965b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetSmallestEncoding
1966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetSmallestEncoding);
1967b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1968c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1969c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1970c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetSmallestEncoding(_self->ob_itself);
1971c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
1972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
1973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
197450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
197550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
197650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetFastestEncoding(CFStringRefObject *_self, PyObject *_args)
197750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1978c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1979c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
1980b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetFastestEncoding
1981c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetFastestEncoding);
1982b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
1983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
1984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
1985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetFastestEncoding(_self->ob_itself);
1986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
1987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
1988c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
198950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
199050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
199150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCompareWithOptions(CFStringRefObject *_self, PyObject *_args)
199250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
1993c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
1994c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFComparisonResult _rv;
1995c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef theString2;
1996c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange rangeToCompare;
1997c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags compareOptions;
1998b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCompareWithOptions
1999c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCompareWithOptions);
2000b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2001c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&l",
2002c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &theString2,
2003c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &rangeToCompare,
2004c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &compareOptions))
2005c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2006c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCompareWithOptions(_self->ob_itself,
2007c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                     theString2,
2008c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                     rangeToCompare,
2009c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                     compareOptions);
2010c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2011c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2012c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
201350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
201450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
201550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCompare(CFStringRefObject *_self, PyObject *_args)
201650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2017c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2018c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFComparisonResult _rv;
2019c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef theString2;
2020c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags compareOptions;
2021b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCompare
2022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCompare);
2023b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2024c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
2025c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &theString2,
2026c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &compareOptions))
2027c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2028c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCompare(_self->ob_itself,
2029c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          theString2,
2030c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          compareOptions);
2031c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2032c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2033c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
203450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
203550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
203650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringFindWithOptions(CFStringRefObject *_self, PyObject *_args)
203750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2038c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2039c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
2040c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef stringToFind;
2041c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange rangeToSearch;
2042c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags searchOptions;
2043c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange result;
2044b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringFindWithOptions
2045c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringFindWithOptions);
2046b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2047c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&l",
2048c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &stringToFind,
2049c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &rangeToSearch,
2050c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &searchOptions))
2051c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2052c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringFindWithOptions(_self->ob_itself,
2053c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  stringToFind,
2054c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  rangeToSearch,
2055c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  searchOptions,
2056c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  &result);
2057c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("lO&",
2058c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
2059c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFRange_New, result);
2060c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
206150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
206250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
206350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCreateArrayWithFindResults(CFStringRefObject *_self, PyObject *_args)
206450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2065c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2066c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef _rv;
2067c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef stringToFind;
2068c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange rangeToSearch;
2069c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags compareOptions;
2070c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&l",
2071c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &stringToFind,
2072c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &rangeToSearch,
2073c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &compareOptions))
2074c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2075c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateArrayWithFindResults((CFAllocatorRef)NULL,
2076c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             _self->ob_itself,
2077c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             stringToFind,
2078c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             rangeToSearch,
2079c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             compareOptions);
2080c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2081c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFArrayRefObj_New, _rv);
2082c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
208350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
208450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
208550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringFind(CFStringRefObject *_self, PyObject *_args)
208650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2088c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange _rv;
2089c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef stringToFind;
2090c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags compareOptions;
2091b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringFind
2092c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringFind);
2093b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2094c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
2095c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &stringToFind,
2096c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &compareOptions))
2097c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2098c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringFind(_self->ob_itself,
2099c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       stringToFind,
2100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       compareOptions);
2101c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFRange_New, _rv);
2103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
210450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
210550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
210650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringHasPrefix(CFStringRefObject *_self, PyObject *_args)
210750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2108c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2109c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
2110c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef prefix;
2111b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringHasPrefix
2112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringHasPrefix);
2113b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2114c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2115c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &prefix))
2116c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2117c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringHasPrefix(_self->ob_itself,
2118c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            prefix);
2119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
212250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
212350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
212450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringHasSuffix(CFStringRefObject *_self, PyObject *_args)
212550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2126c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
2128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef suffix;
2129b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringHasSuffix
2130c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringHasSuffix);
2131b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2132c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2133c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &suffix))
2134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringHasSuffix(_self->ob_itself,
2136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            suffix);
2137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2139c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
214050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
214150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
214250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetLineBounds(CFStringRefObject *_self, PyObject *_args)
214350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
2146c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex lineBeginIndex;
2147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex lineEndIndex;
2148c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex contentsEndIndex;
2149b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetLineBounds
2150c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetLineBounds);
2151b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range))
2154c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2155c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringGetLineBounds(_self->ob_itself,
2156c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          range,
2157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &lineBeginIndex,
2158c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &lineEndIndex,
2159c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &contentsEndIndex);
2160c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("lll",
2161c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         lineBeginIndex,
2162c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         lineEndIndex,
2163c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         contentsEndIndex);
2164c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
216550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
216650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
216750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringCreateArrayBySeparatingStrings(CFStringRefObject *_self, PyObject *_args)
216850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2169c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2170c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef _rv;
2171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef separatorString;
2172c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2173c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &separatorString))
2174c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2175c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateArrayBySeparatingStrings((CFAllocatorRef)NULL,
2176c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                 _self->ob_itself,
2177c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                 separatorString);
2178c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2179c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFArrayRefObj_New, _rv);
2180c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
218150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
218250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
218350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetIntValue(CFStringRefObject *_self, PyObject *_args)
218450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2185c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2186c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    SInt32 _rv;
2187b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetIntValue
2188c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetIntValue);
2189b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2190c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
2191c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2192c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetIntValue(_self->ob_itself);
2193c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2194c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2195c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
219650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
219750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
219850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetDoubleValue(CFStringRefObject *_self, PyObject *_args)
219950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    double _rv;
2202b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetDoubleValue
2203c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetDoubleValue);
2204b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2205c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
2206c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2207c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetDoubleValue(_self->ob_itself);
2208c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("d",
2209c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2210c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
221150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
221250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
221350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringConvertIANACharSetNameToEncoding(CFStringRefObject *_self, PyObject *_args)
221450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2215c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2216c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
2217b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertIANACharSetNameToEncoding
2218c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertIANACharSetNameToEncoding);
2219b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2220c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
2221c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2222c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertIANACharSetNameToEncoding(_self->ob_itself);
2223c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
2224c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
2225c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
222650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
222750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
222850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFShowStr(CFStringRefObject *_self, PyObject *_args)
222950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2230c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2231b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFShowStr
2232c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFShowStr);
2233b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2234c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
2235c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2236c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFShowStr(_self->ob_itself);
2237c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2238c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2239c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
224050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
224150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
224250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFURLCreateWithString(CFStringRefObject *_self, PyObject *_args)
224350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2245c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
2246c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef baseURL;
2247c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          OptionalCFURLRefObj_Convert, &baseURL))
2249c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2250c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateWithString((CFAllocatorRef)NULL,
2251c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                _self->ob_itself,
2252c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                baseURL);
2253c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
2255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
225650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
225750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
225850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFURLCreateWithFileSystemPath(CFStringRefObject *_self, PyObject *_args)
225950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
2262c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLPathStyle pathStyle;
2263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isDirectory;
2264c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
2265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &pathStyle,
2266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isDirectory))
2267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateWithFileSystemPath((CFAllocatorRef)NULL,
2269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                        _self->ob_itself,
2270c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                        pathStyle,
2271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                        isDirectory);
2272c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2273c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
2274c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
227550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
227650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
22772168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase(CFStringRefObject *_self, PyObject *_args)
22782168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
2279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
2281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLPathStyle pathStyle;
2282c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isDirectory;
2283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef baseURL;
2284c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "llO&",
2285c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &pathStyle,
2286c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isDirectory,
2287c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          OptionalCFURLRefObj_Convert, &baseURL))
2288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateWithFileSystemPathRelativeToBase((CFAllocatorRef)NULL,
2290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                      _self->ob_itself,
2291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                      pathStyle,
2292c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                      isDirectory,
2293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                      baseURL);
2294c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2295c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
2296c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
22972168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
22982168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
229950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes(CFStringRefObject *_self, PyObject *_args)
230050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2301c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2302c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
2303c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef charactersToLeaveEscaped;
2304c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2305c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &charactersToLeaveEscaped))
2306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2307c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateStringByReplacingPercentEscapes((CFAllocatorRef)NULL,
2308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                     _self->ob_itself,
2309c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                     charactersToLeaveEscaped);
2310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
2312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
231350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
231450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
23152168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFStringRefObj_CFURLCreateStringByAddingPercentEscapes(CFStringRefObject *_self, PyObject *_args)
23162168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
2317c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2318c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
2319c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef charactersToLeaveUnescaped;
2320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef legalURLCharactersToBeEscaped;
2321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
2322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&l",
2323c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &charactersToLeaveUnescaped,
2324c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &legalURLCharactersToBeEscaped,
2325c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
2326c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2327c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateStringByAddingPercentEscapes((CFAllocatorRef)NULL,
2328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  _self->ob_itself,
2329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  charactersToLeaveUnescaped,
2330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  legalURLCharactersToBeEscaped,
2331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  encoding);
2332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
2334c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
23352168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
23362168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
233750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetString(CFStringRefObject *_self, PyObject *_args)
233850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
234050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int size = CFStringGetLength(_self->ob_itself)+1;
2342c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *data = malloc(size);
234350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if( data == NULL ) return PyErr_NoMemory();
2345c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( CFStringGetCString(_self->ob_itself, data, size, 0) ) {
2346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        _res = (PyObject *)PyString_FromString(data);
2347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    } else {
2348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "CFStringGetCString could not fit the string");
2349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        _res = NULL;
2350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    free(data);
2352c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
235350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
235450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
235550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
235650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFStringRefObj_CFStringGetUnicode(CFStringRefObject *_self, PyObject *_args)
235750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2358c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
235950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int size = CFStringGetLength(_self->ob_itself)+1;
2361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_UNICODE *data = malloc(size*sizeof(Py_UNICODE));
2362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
236350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    range.location = 0;
2365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    range.length = size;
2366c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if( data == NULL ) return PyErr_NoMemory();
2367c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringGetCharacters(_self->ob_itself, range, data);
2368c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = (PyObject *)PyUnicode_FromUnicode(data, size-1);
2369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    free(data);
2370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
237150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
237250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
237350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
237450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFStringRefObj_methods[] = {
2375c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithSubstring", (PyCFunction)CFStringRefObj_CFStringCreateWithSubstring, 1,
2376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range) -> (CFStringRef _rv)")},
2377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateCopy", (PyCFunction)CFStringRefObj_CFStringCreateCopy, 1,
2378c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
2379c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetLength", (PyCFunction)CFStringRefObj_CFStringGetLength, 1,
2380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFIndex _rv)")},
2381c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetBytes", (PyCFunction)CFStringRefObj_CFStringGetBytes, 1,
2382c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, CFIndex maxBufLen) -> (CFIndex _rv, UInt8 buffer, CFIndex usedBufLen)")},
2383c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateExternalRepresentation", (PyCFunction)CFStringRefObj_CFStringCreateExternalRepresentation, 1,
2384c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding, UInt8 lossByte) -> (CFDataRef _rv)")},
2385c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetSmallestEncoding", (PyCFunction)CFStringRefObj_CFStringGetSmallestEncoding, 1,
2386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringEncoding _rv)")},
2387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetFastestEncoding", (PyCFunction)CFStringRefObj_CFStringGetFastestEncoding, 1,
2388c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringEncoding _rv)")},
2389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCompareWithOptions", (PyCFunction)CFStringRefObj_CFStringCompareWithOptions, 1,
2390c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},
2391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCompare", (PyCFunction)CFStringRefObj_CFStringCompare, 1,
2392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef theString2, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},
2393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringFindWithOptions", (PyCFunction)CFStringRefObj_CFStringFindWithOptions, 1,
2394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions) -> (Boolean _rv, CFRange result)")},
2395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateArrayWithFindResults", (PyCFunction)CFStringRefObj_CFStringCreateArrayWithFindResults, 1,
2396c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions) -> (CFArrayRef _rv)")},
2397c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringFind", (PyCFunction)CFStringRefObj_CFStringFind, 1,
2398c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef stringToFind, CFOptionFlags compareOptions) -> (CFRange _rv)")},
2399c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringHasPrefix", (PyCFunction)CFStringRefObj_CFStringHasPrefix, 1,
2400c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef prefix) -> (Boolean _rv)")},
2401c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringHasSuffix", (PyCFunction)CFStringRefObj_CFStringHasSuffix, 1,
2402c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef suffix) -> (Boolean _rv)")},
2403c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetLineBounds", (PyCFunction)CFStringRefObj_CFStringGetLineBounds, 1,
2404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range) -> (CFIndex lineBeginIndex, CFIndex lineEndIndex, CFIndex contentsEndIndex)")},
2405c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateArrayBySeparatingStrings", (PyCFunction)CFStringRefObj_CFStringCreateArrayBySeparatingStrings, 1,
2406c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef separatorString) -> (CFArrayRef _rv)")},
2407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetIntValue", (PyCFunction)CFStringRefObj_CFStringGetIntValue, 1,
2408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (SInt32 _rv)")},
2409c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetDoubleValue", (PyCFunction)CFStringRefObj_CFStringGetDoubleValue, 1,
2410c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (double _rv)")},
2411c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertIANACharSetNameToEncoding", (PyCFunction)CFStringRefObj_CFStringConvertIANACharSetNameToEncoding, 1,
2412c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringEncoding _rv)")},
2413c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFShowStr", (PyCFunction)CFStringRefObj_CFShowStr, 1,
2414c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
2415c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateWithString", (PyCFunction)CFStringRefObj_CFURLCreateWithString, 1,
2416c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFURLRef baseURL) -> (CFURLRef _rv)")},
2417c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateWithFileSystemPath", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPath, 1,
2418c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory) -> (CFURLRef _rv)")},
2419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateWithFileSystemPathRelativeToBase", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase, 1,
2420c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")},
2421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateStringByReplacingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes, 1,
2422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
2423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateStringByAddingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByAddingPercentEscapes, 1,
2424c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding) -> (CFStringRef _rv)")},
2425c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetString", (PyCFunction)CFStringRefObj_CFStringGetString, 1,
2426c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (string _rv)")},
2427c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetUnicode", (PyCFunction)CFStringRefObj_CFStringGetUnicode, 1,
2428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (unicode _rv)")},
2429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
243050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
243150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
24323bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFStringRefObj_getsetlist NULL
243350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
243450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
243550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFStringRefObj_compare(CFStringRefObject *self, CFStringRefObject *other)
243650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
2438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
2439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
2440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
244150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
244250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
244350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFStringRefObj_repr(CFStringRefObject *self)
244450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
2446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
2447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
244850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
244950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
245050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFStringRefObj_hash(CFStringRefObject *self)
245150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
2453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
245450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
2455918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
24563bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
2457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef itself;
2458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
24593bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFStringRefObj_Convert, &itself))
2461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFStringRefObject *)_self)->ob_itself = itself;
2463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
24653bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
2467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
2468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2469c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFStringRefObject *)_self)->ob_itself = itself;
2470c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2471c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2472c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
24733bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
24743bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
24753bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFStringRefObj_tp_alloc PyType_GenericAlloc
24763bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2477918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
24783bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
2479c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
2480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
2481c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFStringRefObject *)self)->ob_itself = NULL;
2482c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFStringRefObject *)self)->ob_freeit = CFRelease;
2483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
24843bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
24853bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
24863bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFStringRefObj_tp_free PyObject_Del
24873bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
248850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
248950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFStringRef_Type = {
2490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
2491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
2492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFStringRef", /*tp_name*/
2493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFStringRefObject), /*tp_basicsize*/
2494c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
2495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
2496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFStringRefObj_dealloc, /*tp_dealloc*/
2497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
2498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
2499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
2500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFStringRefObj_compare, /*tp_compare*/
2501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFStringRefObj_repr, /*tp_repr*/
2502c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
2503c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
2504c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
2505c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFStringRefObj_hash, /*tp_hash*/
2506c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
2507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
2508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
2509c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
2510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
2511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
2512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
2513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
2514c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
2515c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
2516c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
2517c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
2518c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
2519c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_methods, /* tp_methods */
2520c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
2521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_getsetlist, /*tp_getset*/
2522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
2523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
2524c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
2525c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
2526c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
2527c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_tp_init, /* tp_init */
2528c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_tp_alloc, /* tp_alloc */
2529c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_tp_new, /* tp_new */
2530c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRefObj_tp_free, /* tp_free */
253150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
253250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
253350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ------------------ End object type CFStringRef ------------------- */
253450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
253550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
253650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ----------------- Object type CFMutableStringRef ----------------- */
253750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
253850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableStringRef_Type;
253950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2540f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFMutableStringRefObj_Check(x) ((x)->ob_type == &CFMutableStringRef_Type || PyObject_TypeCheck((x), &CFMutableStringRef_Type))
254150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
254250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFMutableStringRefObject {
2543c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
2544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef ob_itself;
2545c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
254650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFMutableStringRefObject;
254750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
254850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFMutableStringRefObj_New(CFMutableStringRef itself)
254950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObject *it;
2551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
2552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2553c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
2554c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2555c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2556c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFMutableStringRefObject, &CFMutableStringRef_Type);
2557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
2558c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
2559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
2560c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
2561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
256250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
2563918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
256406d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFMutableStringRefObj_Convert(PyObject *v, CFMutableStringRef *p_itself)
256550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
256650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2567c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
2568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
256950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2570c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFMutableStringRefObj_Check(v))
2571c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2572c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFMutableStringRef required");
2573c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2574c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2575c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFMutableStringRefObject *)v)->ob_itself;
2576c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
257750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
257850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
257950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self)
258050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2581c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
2582c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
2584c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
2585c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2586c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef_Type.tp_dealloc((PyObject *)self);
258750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
258850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
258950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *_self, PyObject *_args)
259050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2592c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef appendedString;
2593b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringAppend
2594c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringAppend);
2595b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2596c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2597c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &appendedString))
2598c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2599c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringAppend(_self->ob_itself,
2600c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   appendedString);
2601c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2602c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
260450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
260550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
260669ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringAppendCharacters(CFMutableStringRefObject *_self, PyObject *_args)
260769ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen{
2608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniChar *chars__in__;
2610c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniCharCount chars__len__;
2611c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int chars__in_len__;
261269ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#ifndef CFStringAppendCharacters
2613c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringAppendCharacters);
261469ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#endif
2615c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "u#",
2616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &chars__in__, &chars__in_len__))
2617c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    chars__len__ = chars__in_len__;
2619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringAppendCharacters(_self->ob_itself,
2620c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             chars__in__, chars__len__);
2621c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2622c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
262469ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen}
262569ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen
262650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringAppendPascalString(CFMutableStringRefObject *_self, PyObject *_args)
262750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Str255 pStr;
2630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
2631b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringAppendPascalString
2632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringAppendPascalString);
2633b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
2635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          PyMac_GetStr255, pStr,
2636c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
2637c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2638c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringAppendPascalString(_self->ob_itself,
2639c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               pStr,
2640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               encoding);
2641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2642c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
264450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
264550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
264650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringAppendCString(CFMutableStringRefObject *_self, PyObject *_args)
264750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2649c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char* cStr;
2650c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
2651b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringAppendCString
2652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringAppendCString);
2653b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "sl",
2655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &cStr,
2656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
2657c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2658c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringAppendCString(_self->ob_itself,
2659c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          cStr,
2660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          encoding);
2661c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2662c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2663c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
266450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
266550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
266650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringInsert(CFMutableStringRefObject *_self, PyObject *_args)
266750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex idx;
2670c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef insertedStr;
2671b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringInsert
2672c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringInsert);
2673b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2674c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lO&",
2675c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &idx,
2676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &insertedStr))
2677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringInsert(_self->ob_itself,
2679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   idx,
2680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   insertedStr);
2681c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2682c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2683c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
268450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
268550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
268650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringDelete(CFMutableStringRefObject *_self, PyObject *_args)
268750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2688c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2689c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
2690b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringDelete
2691c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringDelete);
2692b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2693c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range))
2695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringDelete(_self->ob_itself,
2697c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                   range);
2698c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2699c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2700c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
270150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
270250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
270350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringReplace(CFMutableStringRefObject *_self, PyObject *_args)
270450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2705c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2706c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange range;
2707c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef replacement;
2708b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringReplace
2709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringReplace);
2710b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
2712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFRange_Convert, &range,
2713c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &replacement))
2714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringReplace(_self->ob_itself,
2716c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    range,
2717c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                    replacement);
2718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2720c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
272150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
272250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
272350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringReplaceAll(CFMutableStringRefObject *_self, PyObject *_args)
272450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef replacement;
2727b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringReplaceAll
2728c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringReplaceAll);
2729b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2730c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2731c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &replacement))
2732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2733c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringReplaceAll(_self->ob_itself,
2734c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       replacement);
2735c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2737c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
273850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
273950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
274050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringPad(CFMutableStringRefObject *_self, PyObject *_args)
274150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2742c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2743c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef padString;
2744c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex length;
2745c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex indexIntoPad;
2746b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringPad
2747c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringPad);
2748b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2749c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&ll",
2750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &padString,
2751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &length,
2752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &indexIntoPad))
2753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2754c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringPad(_self->ob_itself,
2755c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                padString,
2756c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                length,
2757c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                indexIntoPad);
2758c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2759c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2760c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
276150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
276250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
276350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringTrim(CFMutableStringRefObject *_self, PyObject *_args)
276450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef trimString;
2767b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringTrim
2768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringTrim);
2769b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2770c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
2771c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &trimString))
2772c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2773c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringTrim(_self->ob_itself,
2774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                 trimString);
2775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2776c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
277850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
277950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
278050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFMutableStringRefObj_CFStringTrimWhitespace(CFMutableStringRefObject *_self, PyObject *_args)
278150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2782c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2783b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringTrimWhitespace
2784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringTrimWhitespace);
2785b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
2786c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
2787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2788c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringTrimWhitespace(_self->ob_itself);
2789c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
2790c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
2791c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
279250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
279350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
279450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFMutableStringRefObj_methods[] = {
2795c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringAppend", (PyCFunction)CFMutableStringRefObj_CFStringAppend, 1,
2796c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef appendedString) -> None")},
2797c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringAppendCharacters", (PyCFunction)CFMutableStringRefObj_CFStringAppendCharacters, 1,
2798c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer chars) -> None")},
2799c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringAppendPascalString", (PyCFunction)CFMutableStringRefObj_CFStringAppendPascalString, 1,
2800c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> None")},
2801c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringAppendCString", (PyCFunction)CFMutableStringRefObj_CFStringAppendCString, 1,
2802c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> None")},
2803c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringInsert", (PyCFunction)CFMutableStringRefObj_CFStringInsert, 1,
2804c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex idx, CFStringRef insertedStr) -> None")},
2805c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringDelete", (PyCFunction)CFMutableStringRefObj_CFStringDelete, 1,
2806c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range) -> None")},
2807c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringReplace", (PyCFunction)CFMutableStringRefObj_CFStringReplace, 1,
2808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFRange range, CFStringRef replacement) -> None")},
2809c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringReplaceAll", (PyCFunction)CFMutableStringRefObj_CFStringReplaceAll, 1,
2810c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef replacement) -> None")},
2811c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringPad", (PyCFunction)CFMutableStringRefObj_CFStringPad, 1,
2812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef padString, CFIndex length, CFIndex indexIntoPad) -> None")},
2813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringTrim", (PyCFunction)CFMutableStringRefObj_CFStringTrim, 1,
2814c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef trimString) -> None")},
2815c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringTrimWhitespace", (PyCFunction)CFMutableStringRefObj_CFStringTrimWhitespace, 1,
2816c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> None")},
2817c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
281850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
281950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
28203bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableStringRefObj_getsetlist NULL
282150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
282250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
282350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableStringRefObj_compare(CFMutableStringRefObject *self, CFMutableStringRefObject *other)
282450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2825c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
2826c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
2827c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
2828c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
282950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
283050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
283150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFMutableStringRefObj_repr(CFMutableStringRefObject *self)
283250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
2834c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFMutableStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
2835c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
283650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
283750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
283850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFMutableStringRefObj_hash(CFMutableStringRefObject *self)
283950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2840c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
2841c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
284250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
2843918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFMutableStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
28443bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
2845c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef itself;
2846c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
28473bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2848c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableStringRefObj_Convert, &itself))
2849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2850c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableStringRefObject *)_self)->ob_itself = itself;
2851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2852c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
28533bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
2855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
2856c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2857c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFMutableStringRefObject *)_self)->ob_itself = itself;
2858c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2859c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2860c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
28613bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
28623bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
28633bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableStringRefObj_tp_alloc PyType_GenericAlloc
28643bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
2865918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFMutableStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
28663bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
2867c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
2868c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
2869c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableStringRefObject *)self)->ob_itself = NULL;
2870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFMutableStringRefObject *)self)->ob_freeit = CFRelease;
2871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
28723bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
28733bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
28743bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFMutableStringRefObj_tp_free PyObject_Del
28753bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
287650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
287750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFMutableStringRef_Type = {
2878c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
2879c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
2880c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFMutableStringRef", /*tp_name*/
2881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFMutableStringRefObject), /*tp_basicsize*/
2882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
2883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
2884c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFMutableStringRefObj_dealloc, /*tp_dealloc*/
2885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
2886c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
2887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
2888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFMutableStringRefObj_compare, /*tp_compare*/
2889c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFMutableStringRefObj_repr, /*tp_repr*/
2890c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
2891c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
2892c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
2893c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFMutableStringRefObj_hash, /*tp_hash*/
2894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
2895c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
2896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
2897c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
2898c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
2899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
2900c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
2901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
2902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
2903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
2904c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
2905c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
2906c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
2907c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_methods, /* tp_methods */
2908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
2909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_getsetlist, /*tp_getset*/
2910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
2911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
2912c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
2913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
2914c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
2915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_tp_init, /* tp_init */
2916c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_tp_alloc, /* tp_alloc */
2917c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_tp_new, /* tp_new */
2918c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRefObj_tp_free, /* tp_free */
291950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
292050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
292150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* --------------- End object type CFMutableStringRef --------------- */
292250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
292350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
292450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ---------------------- Object type CFURLRef ---------------------- */
292550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
292650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFURLRef_Type;
292750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2928f955784f0cfeecb94d3f2ade83a5ea548391f74bJack Jansen#define CFURLRefObj_Check(x) ((x)->ob_type == &CFURLRef_Type || PyObject_TypeCheck((x), &CFURLRef_Type))
292950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
293050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansentypedef struct CFURLRefObject {
2931c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD
2932c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef ob_itself;
2933c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    void (*ob_freeit)(CFTypeRef ptr);
293450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen} CFURLRefObject;
293550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
293650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyObject *CFURLRefObj_New(CFURLRef itself)
293750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2938c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObject *it;
2939c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
2940c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2941c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
2942c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2943c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2944c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it = PyObject_NEW(CFURLRefObject, &CFURLRef_Type);
2945c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (it == NULL) return NULL;
2946c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Should we tp_init or tp_new our basetype? */
2947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_itself = itself;
2948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    it->ob_freeit = CFRelease;
2949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (PyObject *)it;
295050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
2951918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansen
295206d2e1af3579f6a698a84b81dfda0bacb6263f7dJack Jansenint CFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself)
295350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
295450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2955c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
2956c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
295750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
2958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFURLRefObj_Check(v))
2959c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2960c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CFURLRef required");
2961c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
2962c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2963c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFURLRefObject *)v)->ob_itself;
2964c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
296550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
296650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
296750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic void CFURLRefObj_dealloc(CFURLRefObject *self)
296850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2969c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (self->ob_freeit && self->ob_itself)
2970c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
2971c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_freeit((CFTypeRef)self->ob_itself);
2972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        self->ob_itself = NULL;
2973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
2974c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.tp_dealloc((PyObject *)self);
297550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
297650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
297750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCreateData(CFURLRefObject *_self, PyObject *_args)
297850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
2979c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2980c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
2981c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
2982c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean escapeWhitespace;
2983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
2984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding,
2985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &escapeWhitespace))
2986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
2987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateData((CFAllocatorRef)NULL,
2988c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          _self->ob_itself,
2989c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          encoding,
2990c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          escapeWhitespace);
2991c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
2992c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
2993c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
299450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
299550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
29962168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLGetFileSystemRepresentation(CFURLRefObject *_self, PyObject *_args)
29972168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
2998c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
2999c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3000c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean resolveAgainstBase;
3001c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt8 buffer;
3002c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex maxBufLen;
30032168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLGetFileSystemRepresentation
3004c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetFileSystemRepresentation);
30052168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3006c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
3007c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &resolveAgainstBase,
3008c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &maxBufLen))
3009c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3010c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetFileSystemRepresentation(_self->ob_itself,
3011c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           resolveAgainstBase,
3012c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           &buffer,
3013c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           maxBufLen);
3014c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("lb",
3015c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
3016c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         buffer);
3017c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
30182168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
30192168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
302050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyAbsoluteURL(CFURLRefObject *_self, PyObject *_args)
302150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3023c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3024b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyAbsoluteURL
3025c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyAbsoluteURL);
3026b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3027c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3028c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3029c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyAbsoluteURL(_self->ob_itself);
3030c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3031c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3032c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
303350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
303450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
303550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLGetString(CFURLRefObject *_self, PyObject *_args)
303650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3037c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3038c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3039b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLGetString
3040c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetString);
3041b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3042c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3043c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3044c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetString(_self->ob_itself);
3045c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3046c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3047c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
304850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
304950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
305050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLGetBaseURL(CFURLRefObject *_self, PyObject *_args)
305150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3052c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3053c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3054b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLGetBaseURL
3055c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetBaseURL);
3056b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3057c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3058c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3059c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetBaseURL(_self->ob_itself);
3060c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3061c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3062c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
306350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
306450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
306550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCanBeDecomposed(CFURLRefObject *_self, PyObject *_args)
306650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3067c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3068c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3069b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCanBeDecomposed
3070c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCanBeDecomposed);
3071b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3072c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3073c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3074c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCanBeDecomposed(_self->ob_itself);
3075c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3076c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3077c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
307850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
307950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
308050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyScheme(CFURLRefObject *_self, PyObject *_args)
308150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3082c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3083c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3084b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyScheme
3085c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyScheme);
3086b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3088c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3089c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyScheme(_self->ob_itself);
3090c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3091c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3092c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
309350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
309450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
309550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyNetLocation(CFURLRefObject *_self, PyObject *_args)
309650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3097c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3098c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3099b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyNetLocation
3100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyNetLocation);
3101b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3104c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyNetLocation(_self->ob_itself);
3105c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3106c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3107c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
310850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
310950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
311050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyPath(CFURLRefObject *_self, PyObject *_args)
311150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3114b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyPath
3115c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyPath);
3116b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3117c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3118c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyPath(_self->ob_itself);
3120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3122c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
312350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
312450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
31252168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyStrictPath(CFURLRefObject *_self, PyObject *_args)
31262168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3129c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isAbsolute;
31302168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCopyStrictPath
3131c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyStrictPath);
31322168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3133c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyStrictPath(_self->ob_itself,
3136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              &isAbsolute);
3137c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&l",
3138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv,
3139c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         isAbsolute);
3140c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
31412168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
31422168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
31432168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyFileSystemPath(CFURLRefObject *_self, PyObject *_args)
31442168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3146c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLPathStyle pathStyle;
31482168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCopyFileSystemPath
3149c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyFileSystemPath);
31502168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3151c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
3152c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &pathStyle))
3153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3154c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyFileSystemPath(_self->ob_itself,
3155c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  pathStyle);
3156c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3158c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
31592168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
31602168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
316150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLHasDirectoryPath(CFURLRefObject *_self, PyObject *_args)
316250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3163c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3164c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3165b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLHasDirectoryPath
3166c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLHasDirectoryPath);
3167b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3168c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3169c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3170c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLHasDirectoryPath(_self->ob_itself);
3171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3172c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3173c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
317450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
317550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
317650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyResourceSpecifier(CFURLRefObject *_self, PyObject *_args)
317750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3178c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3179c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3180b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyResourceSpecifier
3181c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyResourceSpecifier);
3182b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3184c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3185c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyResourceSpecifier(_self->ob_itself);
3186c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3187c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3188c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
318950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
319050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
319150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyHostName(CFURLRefObject *_self, PyObject *_args)
319250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3193c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3194c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3195b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyHostName
3196c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyHostName);
3197b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3198c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3199c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyHostName(_self->ob_itself);
3201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3202c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3203c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
320450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
320550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
320650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLGetPortNumber(CFURLRefObject *_self, PyObject *_args)
320750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3208c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3209c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    SInt32 _rv;
3210b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLGetPortNumber
3211c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetPortNumber);
3212b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3214c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3215c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetPortNumber(_self->ob_itself);
3216c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3217c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3218c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
321950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
322050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
322150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyUserName(CFURLRefObject *_self, PyObject *_args)
322250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3223c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3224c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3225b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyUserName
3226c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyUserName);
3227b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3229c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3230c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyUserName(_self->ob_itself);
3231c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3232c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3233c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
323450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
323550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
323650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyPassword(CFURLRefObject *_self, PyObject *_args)
323750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3238c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3239c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3240b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyPassword
3241c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyPassword);
3242b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3243c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3245c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyPassword(_self->ob_itself);
3246c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3247c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
324950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
325050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
325150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyParameterString(CFURLRefObject *_self, PyObject *_args)
325250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3253c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef charactersToLeaveEscaped;
3256b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyParameterString
3257c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyParameterString);
3258b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3259c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
3260c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &charactersToLeaveEscaped))
3261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3262c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyParameterString(_self->ob_itself,
3263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   charactersToLeaveEscaped);
3264c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
326750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
326850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
326950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyQueryString(CFURLRefObject *_self, PyObject *_args)
327050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3272c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3273c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef charactersToLeaveEscaped;
3274b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyQueryString
3275c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyQueryString);
3276b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
3278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &charactersToLeaveEscaped))
3279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3280c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyQueryString(_self->ob_itself,
3281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               charactersToLeaveEscaped);
3282c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3284c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
328550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
328650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
328750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyFragment(CFURLRefObject *_self, PyObject *_args)
328850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef charactersToLeaveEscaped;
3292b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCopyFragment
3293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyFragment);
3294b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3295c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
3296c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &charactersToLeaveEscaped))
3297c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3298c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyFragment(_self->ob_itself,
3299c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                            charactersToLeaveEscaped);
3300c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3301c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3302c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
330350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
330450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
33052168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyLastPathComponent(CFURLRefObject *_self, PyObject *_args)
33062168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3307c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
33092168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCopyLastPathComponent
3310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyLastPathComponent);
33112168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3314c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyLastPathComponent(_self->ob_itself);
3315c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3316c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3317c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33182168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33192168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33202168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCopyPathExtension(CFURLRefObject *_self, PyObject *_args)
33212168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3323c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
33242168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCopyPathExtension
3325c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCopyPathExtension);
33262168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3327c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCopyPathExtension(_self->ob_itself);
3330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33332168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33342168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33352168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathComponent(CFURLRefObject *_self, PyObject *_args)
33362168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3337c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef pathComponent;
3340c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isDirectory;
3341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
3342c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &pathComponent,
3343c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isDirectory))
3344c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3345c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateCopyAppendingPathComponent((CFAllocatorRef)NULL,
3346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                _self->ob_itself,
3347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                pathComponent,
3348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                isDirectory);
3349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33522168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33532168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33542168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent(CFURLRefObject *_self, PyObject *_args)
33552168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3356c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3357c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3358c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateCopyDeletingLastPathComponent((CFAllocatorRef)NULL,
3361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                   _self->ob_itself);
3362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33652168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33662168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33672168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathExtension(CFURLRefObject *_self, PyObject *_args)
33682168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3371c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef extension;
3372c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
3373c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &extension))
3374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3375c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateCopyAppendingPathExtension((CFAllocatorRef)NULL,
3376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                _self->ob_itself,
3377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                extension);
3378c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3379c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33812168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33822168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33832168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLCreateCopyDeletingPathExtension(CFURLRefObject *_self, PyObject *_args)
33842168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3385c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
3387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3388c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateCopyDeletingPathExtension((CFAllocatorRef)NULL,
3390c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               _self->ob_itself);
3391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
3393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
33942168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
33952168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
33962168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CFURLRefObj_CFURLGetFSRef(CFURLRefObject *_self, PyObject *_args)
33972168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3398c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3399c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3400c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FSRef fsRef;
34012168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLGetFSRef
3402c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetFSRef);
34032168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3405c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3406c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetFSRef(_self->ob_itself,
3407c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        &fsRef);
3408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("lO&",
3409c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
3410c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         PyMac_BuildFSRef, &fsRef);
3411c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
34122168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
34132168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
341450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CFURLRefObj_methods[] = {
3415c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateData", (PyCFunction)CFURLRefObj_CFURLCreateData, 1,
3416c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding, Boolean escapeWhitespace) -> (CFDataRef _rv)")},
3417c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetFileSystemRepresentation", (PyCFunction)CFURLRefObj_CFURLGetFileSystemRepresentation, 1,
3418c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Boolean resolveAgainstBase, CFIndex maxBufLen) -> (Boolean _rv, UInt8 buffer)")},
3419c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyAbsoluteURL", (PyCFunction)CFURLRefObj_CFURLCopyAbsoluteURL, 1,
3420c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFURLRef _rv)")},
3421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetString", (PyCFunction)CFURLRefObj_CFURLGetString, 1,
3422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetBaseURL", (PyCFunction)CFURLRefObj_CFURLGetBaseURL, 1,
3424c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFURLRef _rv)")},
3425c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCanBeDecomposed", (PyCFunction)CFURLRefObj_CFURLCanBeDecomposed, 1,
3426c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (Boolean _rv)")},
3427c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyScheme", (PyCFunction)CFURLRefObj_CFURLCopyScheme, 1,
3428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyNetLocation", (PyCFunction)CFURLRefObj_CFURLCopyNetLocation, 1,
3430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3431c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyPath", (PyCFunction)CFURLRefObj_CFURLCopyPath, 1,
3432c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3433c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyStrictPath", (PyCFunction)CFURLRefObj_CFURLCopyStrictPath, 1,
3434c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv, Boolean isAbsolute)")},
3435c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyFileSystemPath", (PyCFunction)CFURLRefObj_CFURLCopyFileSystemPath, 1,
3436c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFURLPathStyle pathStyle) -> (CFStringRef _rv)")},
3437c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLHasDirectoryPath", (PyCFunction)CFURLRefObj_CFURLHasDirectoryPath, 1,
3438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (Boolean _rv)")},
3439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyResourceSpecifier", (PyCFunction)CFURLRefObj_CFURLCopyResourceSpecifier, 1,
3440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3441c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyHostName", (PyCFunction)CFURLRefObj_CFURLCopyHostName, 1,
3442c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3443c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetPortNumber", (PyCFunction)CFURLRefObj_CFURLGetPortNumber, 1,
3444c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (SInt32 _rv)")},
3445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyUserName", (PyCFunction)CFURLRefObj_CFURLCopyUserName, 1,
3446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyPassword", (PyCFunction)CFURLRefObj_CFURLCopyPassword, 1,
3448c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyParameterString", (PyCFunction)CFURLRefObj_CFURLCopyParameterString, 1,
3450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
3451c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyQueryString", (PyCFunction)CFURLRefObj_CFURLCopyQueryString, 1,
3452c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
3453c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyFragment", (PyCFunction)CFURLRefObj_CFURLCopyFragment, 1,
3454c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
3455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCopyLastPathComponent, 1,
3456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCopyPathExtension", (PyCFunction)CFURLRefObj_CFURLCopyPathExtension, 1,
3458c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringRef _rv)")},
3459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateCopyAppendingPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathComponent, 1,
3460c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef pathComponent, Boolean isDirectory) -> (CFURLRef _rv)")},
3461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateCopyDeletingLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent, 1,
3462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFURLRef _rv)")},
3463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateCopyAppendingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathExtension, 1,
3464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef extension) -> (CFURLRef _rv)")},
3465c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateCopyDeletingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingPathExtension, 1,
3466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFURLRef _rv)")},
3467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetFSRef", (PyCFunction)CFURLRefObj_CFURLGetFSRef, 1,
3468c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (Boolean _rv, FSRef fsRef)")},
3469c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
347050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
347150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
34723bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFURLRefObj_getsetlist NULL
347350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
347450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
347550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFURLRefObj_compare(CFURLRefObject *self, CFURLRefObject *other)
347650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3477c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFEqual?? */
3478c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself > other->ob_itself ) return 1;
3479c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ( self->ob_itself < other->ob_itself ) return -1;
3480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 0;
348150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
348250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
348350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject * CFURLRefObj_repr(CFURLRefObject *self)
348450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3485c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char buf[100];
3486c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sprintf(buf, "<CFURL object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
3487c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return PyString_FromString(buf);
348850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
348950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
349050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic int CFURLRefObj_hash(CFURLRefObject *self)
349150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3492c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use CFHash?? */
3493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return (int)self->ob_itself;
349450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
3495918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic int CFURLRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
34963bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
3497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef itself;
3498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char *kw[] = {"itself", 0};
34993bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
3500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFURLRefObj_Convert, &itself))
3501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
3502c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFURLRefObject *)_self)->ob_itself = itself;
3503c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
3504c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
35053bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
3506c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Any CFTypeRef descendent is allowed as initializer too */
3507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
3508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
3509c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        ((CFURLRefObject *)_self)->ob_itself = itself;
3510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
3511c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
3512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return -1;
35133bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
35143bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
35153bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFURLRefObj_tp_alloc PyType_GenericAlloc
35163bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
3517918a9e2f63a037de2a32e2b009944a0e5c693742Jack Jansenstatic PyObject *CFURLRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
35183bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen{
3519c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *self;
3520c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
3521c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFURLRefObject *)self)->ob_itself = NULL;
3522c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    ((CFURLRefObject *)self)->ob_freeit = CFRelease;
3523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return self;
35243bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen}
35253bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
35263bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen#define CFURLRefObj_tp_free PyObject_Del
35273bfc28c12f3627470d9e4d1ff18c76cfce54cc02Jack Jansen
352850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
352950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack JansenPyTypeObject CFURLRef_Type = {
3530c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_HEAD_INIT(NULL)
3531c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*ob_size*/
3532c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    "_CF.CFURLRef", /*tp_name*/
3533c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    sizeof(CFURLRefObject), /*tp_basicsize*/
3534c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_itemsize*/
3535c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* methods */
3536c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (destructor) CFURLRefObj_dealloc, /*tp_dealloc*/
3537c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_print*/
3538c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (getattrfunc)0, /*tp_getattr*/
3539c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (setattrfunc)0, /*tp_setattr*/
3540c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (cmpfunc) CFURLRefObj_compare, /*tp_compare*/
3541c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (reprfunc) CFURLRefObj_repr, /*tp_repr*/
3542c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyNumberMethods *)0, /* tp_as_number */
3543c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PySequenceMethods *)0, /* tp_as_sequence */
3544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (PyMappingMethods *)0, /* tp_as_mapping */
3545c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    (hashfunc) CFURLRefObj_hash, /*tp_hash*/
3546c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_call*/
3547c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_str*/
3548c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericGetAttr, /*tp_getattro*/
3549c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject_GenericSetAttr, /*tp_setattro */
3550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_as_buffer*/
3551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
3552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_doc*/
3553c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_traverse*/
3554c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_clear*/
3555c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_richcompare*/
3556c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_weaklistoffset*/
3557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iter*/
3558c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_iternext*/
3559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_methods, /* tp_methods */
3560c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_members*/
3561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_getsetlist, /*tp_getset*/
3562c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_base*/
3563c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dict*/
3564c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_get*/
3565c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_descr_set*/
3566c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    0, /*tp_dictoffset*/
3567c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_tp_init, /* tp_init */
3568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_tp_alloc, /* tp_alloc */
3569c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_tp_new, /* tp_new */
3570c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRefObj_tp_free, /* tp_free */
357150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
357250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
357350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* -------------------- End object type CFURLRef -------------------- */
357450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
357550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
35762168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CF___CFRangeMake(PyObject *_self, PyObject *_args)
35772168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
3578c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3579c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFRange _rv;
3580c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex loc;
3581c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex len;
35822168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef __CFRangeMake
3583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(__CFRangeMake);
35842168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
3585c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
3586c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &loc,
3587c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &len))
3588c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3589c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = __CFRangeMake(loc,
3590c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                        len);
3591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3592c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFRange_New, _rv);
3593c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
35942168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
35952168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
359650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFAllocatorGetTypeID(PyObject *_self, PyObject *_args)
359750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3598c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3599c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
3600b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFAllocatorGetTypeID
3601c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFAllocatorGetTypeID);
3602b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3604c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3605c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFAllocatorGetTypeID();
3606c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3607c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
360950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
361050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
361150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFAllocatorGetPreferredSizeForSize(PyObject *_self, PyObject *_args)
361250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3613c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3614c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
3615c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex size;
3616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFOptionFlags hint;
3617b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFAllocatorGetPreferredSizeForSize
3618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFAllocatorGetPreferredSizeForSize);
3619b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3620c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
3621c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &size,
3622c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &hint))
3623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3624c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFAllocatorGetPreferredSizeForSize((CFAllocatorRef)NULL,
3625c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             size,
3626c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             hint);
3627c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
363050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
363150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
363250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFCopyTypeIDDescription(PyObject *_self, PyObject *_args)
363350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
3636c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID type_id;
3637b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFCopyTypeIDDescription
3638c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFCopyTypeIDDescription);
3639b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
3641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &type_id))
3642c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFCopyTypeIDDescription(type_id);
3644c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3645c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
3646c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
364750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
364850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
364950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFArrayGetTypeID(PyObject *_self, PyObject *_args)
365050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3651c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
3653b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayGetTypeID
3654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayGetTypeID);
3655b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3657c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3658c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFArrayGetTypeID();
3659c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3661c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
366250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
366350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
366450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFArrayCreateMutable(PyObject *_self, PyObject *_args)
366550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3666c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef _rv;
3668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3669b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayCreateMutable
3670c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayCreateMutable);
3671b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3672c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
3673c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity))
3674c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3675c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFArrayCreateMutable((CFAllocatorRef)NULL,
3676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               capacity,
3677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               &kCFTypeArrayCallBacks);
3678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableArrayRefObj_New, _rv);
3680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
368150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
368250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
368350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFArrayCreateMutableCopy(PyObject *_self, PyObject *_args)
368450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3685c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3686c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef _rv;
3687c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3688c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef theArray;
3689b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFArrayCreateMutableCopy
3690c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFArrayCreateMutableCopy);
3691b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3692c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lO&",
3693c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity,
3694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFArrayRefObj_Convert, &theArray))
3695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFArrayCreateMutableCopy((CFAllocatorRef)NULL,
3697c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   capacity,
3698c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   theArray);
3699c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3700c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableArrayRefObj_New, _rv);
3701c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
370250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
370350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
370450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDataGetTypeID(PyObject *_self, PyObject *_args)
370550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3706c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3707c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
3708b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataGetTypeID
3709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataGetTypeID);
3710b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3713c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataGetTypeID();
3714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3716c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
371750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
371850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
371950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDataCreate(PyObject *_self, PyObject *_args)
372050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3721c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3722c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
3723c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *bytes__in__;
3724c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long bytes__len__;
3725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int bytes__in_len__;
3726b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataCreate
3727c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataCreate);
3728b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3729c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#",
3730c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &bytes__in__, &bytes__in_len__))
3731c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    bytes__len__ = bytes__in_len__;
3733c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataCreate((CFAllocatorRef)NULL,
3734c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                       bytes__in__, bytes__len__);
3735c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
3737c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
373850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
373950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
374050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDataCreateWithBytesNoCopy(PyObject *_self, PyObject *_args)
374150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3742c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3743c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef _rv;
3744c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *bytes__in__;
3745c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long bytes__len__;
3746c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int bytes__in_len__;
3747b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataCreateWithBytesNoCopy
3748c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataCreateWithBytesNoCopy);
3749b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#",
3751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &bytes__in__, &bytes__in_len__))
3752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    bytes__len__ = bytes__in_len__;
3754c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataCreateWithBytesNoCopy((CFAllocatorRef)NULL,
3755c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                      bytes__in__, bytes__len__,
3756c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                      (CFAllocatorRef)NULL);
3757c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3758c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDataRefObj_New, _rv);
3759c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
376050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
376150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
376250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDataCreateMutable(PyObject *_self, PyObject *_args)
376350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3764c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef _rv;
3766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3767b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataCreateMutable
3768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataCreateMutable);
3769b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3770c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
3771c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity))
3772c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3773c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataCreateMutable((CFAllocatorRef)NULL,
3774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                              capacity);
3775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3776c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableDataRefObj_New, _rv);
3777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
377850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
377950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
378050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDataCreateMutableCopy(PyObject *_self, PyObject *_args)
378150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3782c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3783c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef _rv;
3784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3785c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef theData;
3786b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDataCreateMutableCopy
3787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDataCreateMutableCopy);
3788b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3789c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lO&",
3790c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity,
3791c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFDataRefObj_Convert, &theData))
3792c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3793c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDataCreateMutableCopy((CFAllocatorRef)NULL,
3794c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  capacity,
3795c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  theData);
3796c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3797c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableDataRefObj_New, _rv);
3798c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
379950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
380050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
380150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDictionaryGetTypeID(PyObject *_self, PyObject *_args)
380250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3803c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3804c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
3805b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDictionaryGetTypeID
3806c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDictionaryGetTypeID);
3807b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
3809c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3810c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDictionaryGetTypeID();
3811c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
381450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
381550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
381650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDictionaryCreateMutable(PyObject *_self, PyObject *_args)
381750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3818c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3819c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef _rv;
3820c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3821b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDictionaryCreateMutable
3822c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDictionaryCreateMutable);
3823b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3824c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
3825c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity))
3826c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3827c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL,
3828c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    capacity,
3829c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    &kCFTypeDictionaryKeyCallBacks,
3830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    &kCFTypeDictionaryValueCallBacks);
3831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3832c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableDictionaryRefObj_New, _rv);
3833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
383450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
383550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
383650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFDictionaryCreateMutableCopy(PyObject *_self, PyObject *_args)
383750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
3838c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3839c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef _rv;
3840c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex capacity;
3841c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef theDict;
3842b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFDictionaryCreateMutableCopy
3843c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFDictionaryCreateMutableCopy);
3844b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
3845c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lO&",
3846c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &capacity,
3847c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFDictionaryRefObj_Convert, &theDict))
3848c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFDictionaryCreateMutableCopy((CFAllocatorRef)NULL,
3850c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                        capacity,
3851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                        theDict);
3852c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3853c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableDictionaryRefObj_New, _rv);
3854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
385550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
385650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
385723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesCopyAppValue(PyObject *_self, PyObject *_args)
385823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3859c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3860c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef _rv;
3861c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
3862c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
386323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesCopyAppValue
3864c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesCopyAppValue);
386523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3866c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
3867c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
3868c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID))
3869c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3870c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesCopyAppValue(key,
3871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    applicationID);
3872c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
3873c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFTypeRefObj_New, _rv);
3874c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
387523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
387623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
387723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesGetAppBooleanValue(PyObject *_self, PyObject *_args)
387823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3879c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3880c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
3882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
3883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean keyExistsAndHasValidFormat;
388423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesGetAppBooleanValue
3885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesGetAppBooleanValue);
388623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
3888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
3889c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID))
3890c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3891c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesGetAppBooleanValue(key,
3892c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          applicationID,
3893c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          &keyExistsAndHasValidFormat);
3894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("ll",
3895c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
3896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         keyExistsAndHasValidFormat);
3897c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
389823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
389923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
390023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesGetAppIntegerValue(PyObject *_self, PyObject *_args)
390123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
3904c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
3905c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
3906c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean keyExistsAndHasValidFormat;
390723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesGetAppIntegerValue
3908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesGetAppIntegerValue);
390923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
3911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
3912c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID))
3913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3914c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesGetAppIntegerValue(key,
3915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          applicationID,
3916c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          &keyExistsAndHasValidFormat);
3917c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("ll",
3918c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv,
3919c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         keyExistsAndHasValidFormat);
3920c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
392123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
392223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
392323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesSetAppValue(PyObject *_self, PyObject *_args)
392423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3925c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3926c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
3927c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef value;
3928c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
392923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesSetAppValue
3930c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesSetAppValue);
393123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3932c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&",
3933c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
3934c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFTypeRefObj_Convert, &value,
3935c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID))
3936c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3937c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFPreferencesSetAppValue(key,
3938c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             value,
3939c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             applicationID);
3940c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
3941c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
3942c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
394323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
394423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
394523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesAddSuitePreferencesToApp(PyObject *_self, PyObject *_args)
394623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
3949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef suiteID;
395023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesAddSuitePreferencesToApp
3951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesAddSuitePreferencesToApp);
395223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3953c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
3954c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
3955c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &suiteID))
3956c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3957c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFPreferencesAddSuitePreferencesToApp(applicationID,
3958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          suiteID);
3959c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
3960c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
3961c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
396223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
396323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
396423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesRemoveSuitePreferencesFromApp(PyObject *_self, PyObject *_args)
396523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3967c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
3968c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef suiteID;
396923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesRemoveSuitePreferencesFromApp
3970c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesRemoveSuitePreferencesFromApp);
397123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
3973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
3974c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &suiteID))
3975c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3976c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFPreferencesRemoveSuitePreferencesFromApp(applicationID,
3977c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               suiteID);
3978c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
3979c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
3980c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
398123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
398223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
398323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesAppSynchronize(PyObject *_self, PyObject *_args)
398423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
3985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
3986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
3987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
398823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesAppSynchronize
3989c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesAppSynchronize);
399023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
3991c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
3992c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID))
3993c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
3994c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesAppSynchronize(applicationID);
3995c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
3996c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
3997c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
399823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
399923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
400023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesCopyValue(PyObject *_self, PyObject *_args)
400123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4002c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4003c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef _rv;
4004c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
4005c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4006c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4007c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
400823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesCopyValue
4009c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesCopyValue);
401023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4011c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&O&",
4012c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
4013c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4014c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4015c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4016c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4017c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesCopyValue(key,
4018c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                 applicationID,
4019c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                 userName,
4020c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                 hostName);
4021c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4022c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFTypeRefObj_New, _rv);
4023c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
402423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
402523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
402623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesCopyMultiple(PyObject *_self, PyObject *_args)
402723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4028c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4029c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef _rv;
4030c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef keysToFetch;
4031c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4032c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4033c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
403423be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesCopyMultiple
4035c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesCopyMultiple);
403623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4037c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&O&",
4038c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFArrayRefObj_Convert, &keysToFetch,
4039c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4040c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4041c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4042c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4043c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesCopyMultiple(keysToFetch,
4044c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    applicationID,
4045c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    userName,
4046c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    hostName);
4047c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4048c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFDictionaryRefObj_New, _rv);
4049c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
405023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
405123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
405223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesSetValue(PyObject *_self, PyObject *_args)
405323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4054c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4055c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef key;
4056c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef value;
4057c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4058c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4059c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
406023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesSetValue
4061c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesSetValue);
406223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4063c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
4064c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &key,
4065c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFTypeRefObj_Convert, &value,
4066c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4067c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4068c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4069c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4070c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFPreferencesSetValue(key,
4071c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          value,
4072c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          applicationID,
4073c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          userName,
4074c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          hostName);
4075c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
4076c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
4077c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
407823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
407923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
408023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesSetMultiple(PyObject *_self, PyObject *_args)
408123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4082c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4083c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef keysToSet;
4084c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef keysToRemove;
4085c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4086c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4087c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
408823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesSetMultiple
4089c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesSetMultiple);
409023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4091c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
4092c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFDictionaryRefObj_Convert, &keysToSet,
4093c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFArrayRefObj_Convert, &keysToRemove,
4094c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4095c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4096c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4097c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4098c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFPreferencesSetMultiple(keysToSet,
4099c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             keysToRemove,
4100c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             applicationID,
4101c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             userName,
4102c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                             hostName);
4103c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(Py_None);
4104c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_None;
4105c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
410623be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
410723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
410823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesSynchronize(PyObject *_self, PyObject *_args)
410923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4110c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4111c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
4112c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4113c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4114c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
411523be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesSynchronize
4116c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesSynchronize);
411723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4118c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&",
4119c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4120c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4121c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4122c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4123c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesSynchronize(applicationID,
4124c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   userName,
4125c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   hostName);
4126c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4127c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4128c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
412923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
413023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
413123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesCopyApplicationList(PyObject *_self, PyObject *_args)
413223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4133c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4134c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef _rv;
4135c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4136c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
413723be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesCopyApplicationList
4138c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesCopyApplicationList);
413923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4140c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&",
4141c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4142c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4143c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4144c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesCopyApplicationList(userName,
4145c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                           hostName);
4146c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4147c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFArrayRefObj_New, _rv);
4148c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
414923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
415023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
415123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansenstatic PyObject *CF_CFPreferencesCopyKeyList(PyObject *_self, PyObject *_args)
415223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen{
4153c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4154c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef _rv;
4155c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef applicationID;
4156c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef userName;
4157c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef hostName;
415823be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#ifndef CFPreferencesCopyKeyList
4159c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFPreferencesCopyKeyList);
416023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#endif
4161c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&O&O&",
4162c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &applicationID,
4163c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &userName,
4164c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &hostName))
4165c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4166c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFPreferencesCopyKeyList(applicationID,
4167c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   userName,
4168c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                   hostName);
4169c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4170c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFArrayRefObj_New, _rv);
4171c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
417223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen}
417323be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
417450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringGetTypeID(PyObject *_self, PyObject *_args)
417550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4176c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4177c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
4178b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetTypeID
4179c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetTypeID);
4180b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4181c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
4182c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4183c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetTypeID();
4184c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4185c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4186c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
418750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
418850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
418950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateWithPascalString(PyObject *_self, PyObject *_args)
419050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4191c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4192c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4193c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Str255 pStr;
4194c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4195b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateWithPascalString
4196c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithPascalString);
4197b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4198c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
4199c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          PyMac_GetStr255, pStr,
4200c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4201c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4202c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithPascalString((CFAllocatorRef)NULL,
4203c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                         pStr,
4204c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                         encoding);
4205c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4206c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4207c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
420850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
420950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
421050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateWithCString(PyObject *_self, PyObject *_args)
421150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4212c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4213c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4214c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char* cStr;
4215c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4216b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateWithCString
4217c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithCString);
4218b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4219c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "sl",
4220c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &cStr,
4221c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4222c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4223c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithCString((CFAllocatorRef)NULL,
4224c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    cStr,
4225c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    encoding);
4226c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4227c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4228c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
422950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
423050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
423169ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansenstatic PyObject *CF_CFStringCreateWithCharacters(PyObject *_self, PyObject *_args)
423269ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen{
4233c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4234c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4235c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniChar *chars__in__;
4236c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniCharCount chars__len__;
4237c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int chars__in_len__;
423869ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#ifndef CFStringCreateWithCharacters
4239c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithCharacters);
424069ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#endif
4241c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "u#",
4242c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &chars__in__, &chars__in_len__))
4243c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4244c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    chars__len__ = chars__in_len__;
4245c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithCharacters((CFAllocatorRef)NULL,
4246c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                       chars__in__, chars__len__);
4247c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4248c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4249c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
425069ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen}
425169ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen
425250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateWithPascalStringNoCopy(PyObject *_self, PyObject *_args)
425350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4254c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4255c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4256c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Str255 pStr;
4257c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4258b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateWithPascalStringNoCopy
4259c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithPascalStringNoCopy);
4260b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4261c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&l",
4262c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          PyMac_GetStr255, pStr,
4263c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4264c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4265c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithPascalStringNoCopy((CFAllocatorRef)NULL,
4266c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               pStr,
4267c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               encoding,
4268c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                               (CFAllocatorRef)NULL);
4269c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4270c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4271c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
427250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
427350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
427450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateWithCStringNoCopy(PyObject *_self, PyObject *_args)
427550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4276c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4277c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4278c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char* cStr;
4279c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4280b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateWithCStringNoCopy
4281c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithCStringNoCopy);
4282b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4283c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "sl",
4284c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &cStr,
4285c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4286c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4287c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithCStringNoCopy((CFAllocatorRef)NULL,
4288c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          cStr,
4289c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          encoding,
4290c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                          (CFAllocatorRef)NULL);
4291c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4292c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4293c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
429450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
429550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
429669ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansenstatic PyObject *CF_CFStringCreateWithCharactersNoCopy(PyObject *_self, PyObject *_args)
429769ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen{
4298c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4299c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4300c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniChar *chars__in__;
4301c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UniCharCount chars__len__;
4302c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int chars__in_len__;
430369ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#ifndef CFStringCreateWithCharactersNoCopy
4304c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithCharactersNoCopy);
430569ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen#endif
4306c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "u#",
4307c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &chars__in__, &chars__in_len__))
4308c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4309c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    chars__len__ = chars__in_len__;
4310c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithCharactersNoCopy((CFAllocatorRef)NULL,
4311c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             chars__in__, chars__len__,
4312c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                             (CFAllocatorRef)NULL);
4313c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4314c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4315c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
431669ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen}
431769ac361cb54c2134a13bd27b685ba8d01e3c9aa9Jack Jansen
431850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateMutable(PyObject *_self, PyObject *_args)
431950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4320c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4321c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef _rv;
4322c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex maxLength;
4323b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateMutable
4324c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateMutable);
4325b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4326c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4327c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &maxLength))
4328c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4329c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateMutable((CFAllocatorRef)NULL,
4330c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                maxLength);
4331c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4332c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableStringRefObj_New, _rv);
4333c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
433450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
433550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
433650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateMutableCopy(PyObject *_self, PyObject *_args)
433750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4338c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4339c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef _rv;
4340c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex maxLength;
4341c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef theString;
4342b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateMutableCopy
4343c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateMutableCopy);
4344b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4345c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "lO&",
4346c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &maxLength,
4347c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          CFStringRefObj_Convert, &theString))
4348c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4349c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateMutableCopy((CFAllocatorRef)NULL,
4350c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    maxLength,
4351c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                    theString);
4352c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4353c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFMutableStringRefObj_New, _rv);
4354c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
435550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
435650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
435750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringCreateWithBytes(PyObject *_self, PyObject *_args)
435850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4359c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4360c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4361c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *bytes__in__;
4362c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long bytes__len__;
4363c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int bytes__in_len__;
4364c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4365c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isExternalRepresentation;
4366b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringCreateWithBytes
4367c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringCreateWithBytes);
4368b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4369c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#ll",
4370c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &bytes__in__, &bytes__in_len__,
4371c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding,
4372c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isExternalRepresentation))
4373c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4374c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    bytes__len__ = bytes__in_len__;
4375c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringCreateWithBytes((CFAllocatorRef)NULL,
4376c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  bytes__in__, bytes__len__,
4377c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  encoding,
4378c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                  isExternalRepresentation);
4379c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4380c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4381c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
438250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
438350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
438450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringGetSystemEncoding(PyObject *_self, PyObject *_args)
438550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4386c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4387c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
4388b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetSystemEncoding
4389c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetSystemEncoding);
4390b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4391c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
4392c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4393c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetSystemEncoding();
4394c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4395c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4396c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
439750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
439850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
439950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringGetMaximumSizeForEncoding(PyObject *_self, PyObject *_args)
440050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4401c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4402c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex _rv;
4403c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFIndex length;
4404c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4405b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetMaximumSizeForEncoding
4406c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetMaximumSizeForEncoding);
4407b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4408c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "ll",
4409c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &length,
4410c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4411c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4412c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetMaximumSizeForEncoding(length,
4413c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                            encoding);
4414c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4415c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4416c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
441750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
441850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
441950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringIsEncodingAvailable(PyObject *_self, PyObject *_args)
442050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4421c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4422c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean _rv;
4423c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4424b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringIsEncodingAvailable
4425c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringIsEncodingAvailable);
4426b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4427c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4428c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4429c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4430c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringIsEncodingAvailable(encoding);
4431c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4432c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4433c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
443450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
443550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
443650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringGetNameOfEncoding(PyObject *_self, PyObject *_args)
443750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4438c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4439c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4440c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4441b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringGetNameOfEncoding
4442c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetNameOfEncoding);
4443b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4444c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4445c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4446c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4447c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetNameOfEncoding(encoding);
4448c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4449c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4450c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
445150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
445250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
445350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringConvertEncodingToNSStringEncoding(PyObject *_self, PyObject *_args)
445450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4455c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4456c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt32 _rv;
4457c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4458b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertEncodingToNSStringEncoding
4459c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertEncodingToNSStringEncoding);
4460b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4461c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4462c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4463c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4464c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertEncodingToNSStringEncoding(encoding);
4465c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4466c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4467c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
446850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
446950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
447050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringConvertNSStringEncodingToEncoding(PyObject *_self, PyObject *_args)
447150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4472c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4473c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
4474c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt32 encoding;
4475b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertNSStringEncodingToEncoding
4476c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertNSStringEncodingToEncoding);
4477b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4478c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4479c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4480c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4481c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertNSStringEncodingToEncoding(encoding);
4482c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4483c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4484c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
448550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
448650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
448750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringConvertEncodingToWindowsCodepage(PyObject *_self, PyObject *_args)
448850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4489c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4490c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt32 _rv;
4491c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4492b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertEncodingToWindowsCodepage
4493c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertEncodingToWindowsCodepage);
4494b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4495c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4496c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4497c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4498c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertEncodingToWindowsCodepage(encoding);
4499c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4500c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4501c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
450250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
450350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
450450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringConvertWindowsCodepageToEncoding(PyObject *_self, PyObject *_args)
450550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4506c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4507c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
4508c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    UInt32 codepage;
4509b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertWindowsCodepageToEncoding
4510c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertWindowsCodepageToEncoding);
4511b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4512c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4513c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &codepage))
4514c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4515c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertWindowsCodepageToEncoding(codepage);
4516c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4517c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4518c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
451950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
452050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
452150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFStringConvertEncodingToIANACharSetName(PyObject *_self, PyObject *_args)
452250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4523c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4524c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4525c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4526b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFStringConvertEncodingToIANACharSetName
4527c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringConvertEncodingToIANACharSetName);
4528b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4529c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4530c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4531c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4532c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringConvertEncodingToIANACharSetName(encoding);
4533c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4534c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4535c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
453650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
453750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
45382168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CF_CFStringGetMostCompatibleMacStringEncoding(PyObject *_self, PyObject *_args)
45392168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
4540c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4541c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding _rv;
4542c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
45432168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFStringGetMostCompatibleMacStringEncoding
4544c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFStringGetMostCompatibleMacStringEncoding);
45452168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
4546c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "l",
4547c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding))
4548c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4549c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFStringGetMostCompatibleMacStringEncoding(encoding);
4550c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4551c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4552c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
45532168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
45542168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
455550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF___CFStringMakeConstantString(PyObject *_self, PyObject *_args)
455650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4557c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4558c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef _rv;
4559c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    char* cStr;
4560b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef __CFStringMakeConstantString
4561c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(__CFStringMakeConstantString);
4562b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4563c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s",
4564c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &cStr))
4565c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4566c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = __CFStringMakeConstantString(cStr);
4567c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4568c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFStringRefObj_New, _rv);
4569c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
457050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
457150ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
457250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFURLGetTypeID(PyObject *_self, PyObject *_args)
457350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4574c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4575c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID _rv;
4576b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLGetTypeID
4577c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLGetTypeID);
4578b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4579c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, ""))
4580c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4581c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLGetTypeID();
4582c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("l",
4583c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         _rv);
4584c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
458550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
458650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
458750ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyObject *CF_CFURLCreateWithBytes(PyObject *_self, PyObject *_args)
458850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4589c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4590c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
4591c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *URLBytes__in__;
4592c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long URLBytes__len__;
4593c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int URLBytes__in_len__;
4594c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringEncoding encoding;
4595c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef baseURL;
4596b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#ifndef CFURLCreateWithBytes
4597c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCreateWithBytes);
4598b3be216b41a4755556a887baa6ab440279fbe1dcJack Jansen#endif
4599c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#lO&",
4600c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &URLBytes__in__, &URLBytes__in_len__,
4601c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &encoding,
4602c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          OptionalCFURLRefObj_Convert, &baseURL))
4603c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4604c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    URLBytes__len__ = URLBytes__in_len__;
4605c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateWithBytes((CFAllocatorRef)NULL,
4606c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               URLBytes__in__, URLBytes__len__,
4607c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               encoding,
4608c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               baseURL);
4609c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4610c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
4611c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
461250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
461350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
46142168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CF_CFURLCreateFromFileSystemRepresentation(PyObject *_self, PyObject *_args)
46152168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
4616c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4617c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
4618c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *buffer__in__;
4619c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long buffer__len__;
4620c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int buffer__in_len__;
4621c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isDirectory;
46222168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCreateFromFileSystemRepresentation
4623c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentation);
46242168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
4625c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#l",
4626c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &buffer__in__, &buffer__in_len__,
4627c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isDirectory))
4628c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4629c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    buffer__len__ = buffer__in_len__;
4630c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateFromFileSystemRepresentation((CFAllocatorRef)NULL,
4631c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  buffer__in__, buffer__len__,
4632c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                  isDirectory);
4633c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4634c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
4635c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
46362168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
46372168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
46382168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CF_CFURLCreateFromFileSystemRepresentationRelativeToBase(PyObject *_self, PyObject *_args)
46392168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
4640c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4641c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
4642c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    unsigned char *buffer__in__;
4643c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    long buffer__len__;
4644c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    int buffer__in_len__;
4645c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Boolean isDirectory;
4646c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef baseURL;
46472168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCreateFromFileSystemRepresentationRelativeToBase
4648c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentationRelativeToBase);
46492168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
4650c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "s#lO&",
4651c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &buffer__in__, &buffer__in_len__,
4652c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          &isDirectory,
4653c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          OptionalCFURLRefObj_Convert, &baseURL))
4654c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4655c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    buffer__len__ = buffer__in_len__;
4656c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateFromFileSystemRepresentationRelativeToBase((CFAllocatorRef)NULL,
4657c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                                buffer__in__, buffer__len__,
4658c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                                isDirectory,
4659c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                                                                baseURL);
4660c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4661c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
4662c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
46632168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
46642168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
46652168e9d602cffbb6975a11353707a921455c05f7Jack Jansenstatic PyObject *CF_CFURLCreateFromFSRef(PyObject *_self, PyObject *_args)
46662168e9d602cffbb6975a11353707a921455c05f7Jack Jansen{
4667c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
4668c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef _rv;
4669c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    FSRef fsRef;
46702168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#ifndef CFURLCreateFromFSRef
4671c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_PRECHECK(CFURLCreateFromFSRef);
46722168e9d602cffbb6975a11353707a921455c05f7Jack Jansen#endif
4673c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&",
4674c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                          PyMac_GetFSRef, &fsRef))
4675c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4676c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _rv = CFURLCreateFromFSRef((CFAllocatorRef)NULL,
4677c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                               &fsRef);
4678c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&",
4679c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou                         CFURLRefObj_New, _rv);
4680c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
46812168e9d602cffbb6975a11353707a921455c05f7Jack Jansen}
46822168e9d602cffbb6975a11353707a921455c05f7Jack Jansen
46835ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansenstatic PyObject *CF_toCF(PyObject *_self, PyObject *_args)
46845ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen{
4685c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *_res = NULL;
46865ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
4687c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef rv;
4688c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeID typeid;
46895ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
4690c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!PyArg_ParseTuple(_args, "O&", PyCF_Python2CF, &rv))
4691c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4692c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    typeid = CFGetTypeID(rv);
46935ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
4694c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (typeid == CFStringGetTypeID())
4695c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_BuildValue("O&", CFStringRefObj_New, rv);
4696c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (typeid == CFArrayGetTypeID())
4697c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_BuildValue("O&", CFArrayRefObj_New, rv);
4698c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (typeid == CFDictionaryGetTypeID())
4699c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_BuildValue("O&", CFDictionaryRefObj_New, rv);
4700c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (typeid == CFURLGetTypeID())
4701c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return Py_BuildValue("O&", CFURLRefObj_New, rv);
47025ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
4703c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _res = Py_BuildValue("O&", CFTypeRefObj_New, rv);
4704c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return _res;
47055ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
47065ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen}
47075ad6f7a3a9190df03583ff9c0426a97e15a63adaJack Jansen
470850ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenstatic PyMethodDef CF_methods[] = {
4709c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"__CFRangeMake", (PyCFunction)CF___CFRangeMake, 1,
4710c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex loc, CFIndex len) -> (CFRange _rv)")},
4711c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFAllocatorGetTypeID", (PyCFunction)CF_CFAllocatorGetTypeID, 1,
4712c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4713c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFAllocatorGetPreferredSizeForSize", (PyCFunction)CF_CFAllocatorGetPreferredSizeForSize, 1,
4714c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex size, CFOptionFlags hint) -> (CFIndex _rv)")},
4715c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFCopyTypeIDDescription", (PyCFunction)CF_CFCopyTypeIDDescription, 1,
4716c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFTypeID type_id) -> (CFStringRef _rv)")},
4717c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayGetTypeID", (PyCFunction)CF_CFArrayGetTypeID, 1,
4718c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4719c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayCreateMutable", (PyCFunction)CF_CFArrayCreateMutable, 1,
4720c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity) -> (CFMutableArrayRef _rv)")},
4721c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFArrayCreateMutableCopy", (PyCFunction)CF_CFArrayCreateMutableCopy, 1,
4722c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity, CFArrayRef theArray) -> (CFMutableArrayRef _rv)")},
4723c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataGetTypeID", (PyCFunction)CF_CFDataGetTypeID, 1,
4724c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4725c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataCreate", (PyCFunction)CF_CFDataCreate, 1,
4726c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")},
4727c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataCreateWithBytesNoCopy", (PyCFunction)CF_CFDataCreateWithBytesNoCopy, 1,
4728c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")},
4729c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataCreateMutable", (PyCFunction)CF_CFDataCreateMutable, 1,
4730c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity) -> (CFMutableDataRef _rv)")},
4731c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDataCreateMutableCopy", (PyCFunction)CF_CFDataCreateMutableCopy, 1,
4732c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity, CFDataRef theData) -> (CFMutableDataRef _rv)")},
4733c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryGetTypeID", (PyCFunction)CF_CFDictionaryGetTypeID, 1,
4734c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4735c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryCreateMutable", (PyCFunction)CF_CFDictionaryCreateMutable, 1,
4736c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity) -> (CFMutableDictionaryRef _rv)")},
4737c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFDictionaryCreateMutableCopy", (PyCFunction)CF_CFDictionaryCreateMutableCopy, 1,
4738c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex capacity, CFDictionaryRef theDict) -> (CFMutableDictionaryRef _rv)")},
4739c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesCopyAppValue", (PyCFunction)CF_CFPreferencesCopyAppValue, 1,
4740c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFTypeRef _rv)")},
4741c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesGetAppBooleanValue", (PyCFunction)CF_CFPreferencesGetAppBooleanValue, 1,
4742c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (Boolean _rv, Boolean keyExistsAndHasValidFormat)")},
4743c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesGetAppIntegerValue", (PyCFunction)CF_CFPreferencesGetAppIntegerValue, 1,
4744c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFIndex _rv, Boolean keyExistsAndHasValidFormat)")},
4745c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesSetAppValue", (PyCFunction)CF_CFPreferencesSetAppValue, 1,
4746c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID) -> None")},
4747c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesAddSuitePreferencesToApp", (PyCFunction)CF_CFPreferencesAddSuitePreferencesToApp, 1,
4748c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")},
4749c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesRemoveSuitePreferencesFromApp", (PyCFunction)CF_CFPreferencesRemoveSuitePreferencesFromApp, 1,
4750c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")},
4751c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesAppSynchronize", (PyCFunction)CF_CFPreferencesAppSynchronize, 1,
4752c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef applicationID) -> (Boolean _rv)")},
4753c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesCopyValue", (PyCFunction)CF_CFPreferencesCopyValue, 1,
4754c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFTypeRef _rv)")},
4755c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesCopyMultiple", (PyCFunction)CF_CFPreferencesCopyMultiple, 1,
4756c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFDictionaryRef _rv)")},
4757c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesSetValue", (PyCFunction)CF_CFPreferencesSetValue, 1,
4758c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")},
4759c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesSetMultiple", (PyCFunction)CF_CFPreferencesSetMultiple, 1,
4760c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")},
4761c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesSynchronize", (PyCFunction)CF_CFPreferencesSynchronize, 1,
4762c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (Boolean _rv)")},
4763c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesCopyApplicationList", (PyCFunction)CF_CFPreferencesCopyApplicationList, 1,
4764c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")},
4765c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFPreferencesCopyKeyList", (PyCFunction)CF_CFPreferencesCopyKeyList, 1,
4766c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")},
4767c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetTypeID", (PyCFunction)CF_CFStringGetTypeID, 1,
4768c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4769c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithPascalString", (PyCFunction)CF_CFStringCreateWithPascalString, 1,
4770c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
4771c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithCString", (PyCFunction)CF_CFStringCreateWithCString, 1,
4772c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
4773c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithCharacters", (PyCFunction)CF_CFStringCreateWithCharacters, 1,
4774c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")},
4775c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithPascalStringNoCopy", (PyCFunction)CF_CFStringCreateWithPascalStringNoCopy, 1,
4776c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
4777c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithCStringNoCopy", (PyCFunction)CF_CFStringCreateWithCStringNoCopy, 1,
4778c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
4779c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithCharactersNoCopy", (PyCFunction)CF_CFStringCreateWithCharactersNoCopy, 1,
4780c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")},
4781c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateMutable", (PyCFunction)CF_CFStringCreateMutable, 1,
4782c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex maxLength) -> (CFMutableStringRef _rv)")},
4783c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateMutableCopy", (PyCFunction)CF_CFStringCreateMutableCopy, 1,
4784c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex maxLength, CFStringRef theString) -> (CFMutableStringRef _rv)")},
4785c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringCreateWithBytes", (PyCFunction)CF_CFStringCreateWithBytes, 1,
4786c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer bytes, CFStringEncoding encoding, Boolean isExternalRepresentation) -> (CFStringRef _rv)")},
4787c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetSystemEncoding", (PyCFunction)CF_CFStringGetSystemEncoding, 1,
4788c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFStringEncoding _rv)")},
4789c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetMaximumSizeForEncoding", (PyCFunction)CF_CFStringGetMaximumSizeForEncoding, 1,
4790c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFIndex length, CFStringEncoding encoding) -> (CFIndex _rv)")},
4791c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringIsEncodingAvailable", (PyCFunction)CF_CFStringIsEncodingAvailable, 1,
4792c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (Boolean _rv)")},
4793c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetNameOfEncoding", (PyCFunction)CF_CFStringGetNameOfEncoding, 1,
4794c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
4795c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertEncodingToNSStringEncoding", (PyCFunction)CF_CFStringConvertEncodingToNSStringEncoding, 1,
4796c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")},
4797c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertNSStringEncodingToEncoding", (PyCFunction)CF_CFStringConvertNSStringEncodingToEncoding, 1,
4798c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(UInt32 encoding) -> (CFStringEncoding _rv)")},
4799c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertEncodingToWindowsCodepage", (PyCFunction)CF_CFStringConvertEncodingToWindowsCodepage, 1,
4800c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")},
4801c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertWindowsCodepageToEncoding", (PyCFunction)CF_CFStringConvertWindowsCodepageToEncoding, 1,
4802c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(UInt32 codepage) -> (CFStringEncoding _rv)")},
4803c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringConvertEncodingToIANACharSetName", (PyCFunction)CF_CFStringConvertEncodingToIANACharSetName, 1,
4804c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
4805c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFStringGetMostCompatibleMacStringEncoding", (PyCFunction)CF_CFStringGetMostCompatibleMacStringEncoding, 1,
4806c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(CFStringEncoding encoding) -> (CFStringEncoding _rv)")},
4807c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"__CFStringMakeConstantString", (PyCFunction)CF___CFStringMakeConstantString, 1,
4808c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(char* cStr) -> (CFStringRef _rv)")},
4809c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLGetTypeID", (PyCFunction)CF_CFURLGetTypeID, 1,
4810c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("() -> (CFTypeID _rv)")},
4811c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateWithBytes", (PyCFunction)CF_CFURLCreateWithBytes, 1,
4812c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer URLBytes, CFStringEncoding encoding, CFURLRef baseURL) -> (CFURLRef _rv)")},
4813c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateFromFileSystemRepresentation", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentation, 1,
4814c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer buffer, Boolean isDirectory) -> (CFURLRef _rv)")},
4815c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateFromFileSystemRepresentationRelativeToBase", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentationRelativeToBase, 1,
4816c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(Buffer buffer, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")},
4817c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"CFURLCreateFromFSRef", (PyCFunction)CF_CFURLCreateFromFSRef, 1,
4818c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(FSRef fsRef) -> (CFURLRef _rv)")},
4819c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {"toCF", (PyCFunction)CF_toCF, 1,
4820c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou     PyDoc_STR("(python_object) -> (CF_object)")},
4821c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {NULL, NULL, 0}
482250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen};
482350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
482450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
482550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
482650ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
48274eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen/* Routines to convert any CF type to/from the corresponding CFxxxObj */
48284eb45e7804e312b19860b15dcdac904afe407c9bJack JansenPyObject *CFObj_New(CFTypeRef itself)
48294eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen{
4830c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (itself == NULL)
4831c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
4832c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
4833c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return NULL;
4834c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
4835c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CFGetTypeID(itself) == CFArrayGetTypeID()) return CFArrayRefObj_New((CFArrayRef)itself);
4836c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CFGetTypeID(itself) == CFDictionaryGetTypeID()) return CFDictionaryRefObj_New((CFDictionaryRef)itself);
4837c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CFGetTypeID(itself) == CFDataGetTypeID()) return CFDataRefObj_New((CFDataRef)itself);
4838c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CFGetTypeID(itself) == CFStringGetTypeID()) return CFStringRefObj_New((CFStringRef)itself);
4839c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CFGetTypeID(itself) == CFURLGetTypeID()) return CFURLRefObj_New((CFURLRef)itself);
4840c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* XXXX Or should we use PyCF_CF2Python here?? */
4841c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return CFTypeRefObj_New(itself);
48424eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen}
48434eb45e7804e312b19860b15dcdac904afe407c9bJack Jansenint CFObj_Convert(PyObject *v, CFTypeRef *p_itself)
48444eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen{
48454eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen
4846c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (v == Py_None) { *p_itself = NULL; return 1; }
4847c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Check for other CF objects here */
4848c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4849c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (!CFTypeRefObj_Check(v) &&
4850c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFArrayRefObj_Check(v) &&
4851c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFMutableArrayRefObj_Check(v) &&
4852c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFDictionaryRefObj_Check(v) &&
4853c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFMutableDictionaryRefObj_Check(v) &&
4854c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFDataRefObj_Check(v) &&
4855c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFMutableDataRefObj_Check(v) &&
4856c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFStringRefObj_Check(v) &&
4857c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFMutableStringRefObj_Check(v) &&
4858c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        !CFURLRefObj_Check(v) )
4859c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    {
4860c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        /* XXXX Or should we use PyCF_Python2CF here?? */
4861c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyErr_SetString(PyExc_TypeError, "CF object required");
4862c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return 0;
4863c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    }
4864c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    *p_itself = ((CFTypeRefObject *)v)->ob_itself;
4865c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    return 1;
48664eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen}
48674eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen
48684eb45e7804e312b19860b15dcdac904afe407c9bJack Jansen
486950ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansenvoid init_CF(void)
487050ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen{
4871c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *m;
4872c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyObject *d;
4873c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4874c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4875c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4876c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFObj_New);
4877c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFObj_Convert);
4878c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFTypeRefObj_New);
4879c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFTypeRefObj_Convert);
4880c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFStringRef, CFStringRefObj_New);
4881c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFStringRef, CFStringRefObj_Convert);
4882c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableStringRef, CFMutableStringRefObj_New);
4883c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableStringRef, CFMutableStringRefObj_Convert);
4884c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFArrayRef, CFArrayRefObj_New);
4885c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFArrayRef, CFArrayRefObj_Convert);
4886c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableArrayRef, CFMutableArrayRefObj_New);
4887c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableArrayRef, CFMutableArrayRefObj_Convert);
4888c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFDictionaryRef, CFDictionaryRefObj_New);
4889c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFDictionaryRef, CFDictionaryRefObj_Convert);
4890c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableDictionaryRef, CFMutableDictionaryRefObj_New);
4891c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableDictionaryRef, CFMutableDictionaryRefObj_Convert);
4892c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_NEW(CFURLRef, CFURLRefObj_New);
4893c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFURLRef, CFURLRefObj_Convert);
4894c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4895c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou
4896c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    m = Py_InitModule("_CF", CF_methods);
4897c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    d = PyModule_GetDict(m);
4898c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CF_Error = PyMac_GetOSErrException();
4899c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (CF_Error == NULL ||
4900c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        PyDict_SetItemString(d, "Error", CF_Error) != 0)
4901c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou        return;
4902c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFTypeRef_Type.ob_type = &PyType_Type;
4903c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFTypeRef_Type) < 0) return;
4904c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFTypeRef_Type);
4905c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFTypeRef", (PyObject *)&CFTypeRef_Type);
4906c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4907c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFTypeRef_Type);
4908c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFTypeRefType", (PyObject *)&CFTypeRef_Type);
4909c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef_Type.ob_type = &PyType_Type;
4910c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFArrayRef_Type.tp_base = &CFTypeRef_Type;
4911c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFArrayRef_Type) < 0) return;
4912c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFArrayRef_Type);
4913c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFArrayRef", (PyObject *)&CFArrayRef_Type);
4914c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4915c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFArrayRef_Type);
4916c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFArrayRefType", (PyObject *)&CFArrayRef_Type);
4917c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef_Type.ob_type = &PyType_Type;
4918c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableArrayRef_Type.tp_base = &CFArrayRef_Type;
4919c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFMutableArrayRef_Type) < 0) return;
4920c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableArrayRef_Type);
4921c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableArrayRef", (PyObject *)&CFMutableArrayRef_Type);
4922c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4923c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableArrayRef_Type);
4924c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableArrayRefType", (PyObject *)&CFMutableArrayRef_Type);
4925c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef_Type.ob_type = &PyType_Type;
4926c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDictionaryRef_Type.tp_base = &CFTypeRef_Type;
4927c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFDictionaryRef_Type) < 0) return;
4928c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFDictionaryRef_Type);
4929c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFDictionaryRef", (PyObject *)&CFDictionaryRef_Type);
4930c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4931c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFDictionaryRef_Type);
4932c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFDictionaryRefType", (PyObject *)&CFDictionaryRef_Type);
4933c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef_Type.ob_type = &PyType_Type;
4934c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDictionaryRef_Type.tp_base = &CFDictionaryRef_Type;
4935c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFMutableDictionaryRef_Type) < 0) return;
4936c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableDictionaryRef_Type);
4937c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableDictionaryRef", (PyObject *)&CFMutableDictionaryRef_Type);
4938c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4939c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableDictionaryRef_Type);
4940c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableDictionaryRefType", (PyObject *)&CFMutableDictionaryRef_Type);
4941c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef_Type.ob_type = &PyType_Type;
4942c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFDataRef_Type.tp_base = &CFTypeRef_Type;
4943c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFDataRef_Type) < 0) return;
4944c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFDataRef_Type);
4945c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFDataRef", (PyObject *)&CFDataRef_Type);
4946c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4947c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFDataRef_Type);
4948c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFDataRefType", (PyObject *)&CFDataRef_Type);
4949c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef_Type.ob_type = &PyType_Type;
4950c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableDataRef_Type.tp_base = &CFDataRef_Type;
4951c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFMutableDataRef_Type) < 0) return;
4952c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableDataRef_Type);
4953c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableDataRef", (PyObject *)&CFMutableDataRef_Type);
4954c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4955c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableDataRef_Type);
4956c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableDataRefType", (PyObject *)&CFMutableDataRef_Type);
4957c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef_Type.ob_type = &PyType_Type;
4958c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFStringRef_Type.tp_base = &CFTypeRef_Type;
4959c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFStringRef_Type) < 0) return;
4960c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFStringRef_Type);
4961c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFStringRef", (PyObject *)&CFStringRef_Type);
4962c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4963c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFStringRef_Type);
4964c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFStringRefType", (PyObject *)&CFStringRef_Type);
4965c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef_Type.ob_type = &PyType_Type;
4966c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFMutableStringRef_Type.tp_base = &CFStringRef_Type;
4967c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFMutableStringRef_Type) < 0) return;
4968c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableStringRef_Type);
4969c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableStringRef", (PyObject *)&CFMutableStringRef_Type);
4970c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4971c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFMutableStringRef_Type);
4972c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFMutableStringRefType", (PyObject *)&CFMutableStringRef_Type);
4973c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef_Type.ob_type = &PyType_Type;
4974c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    CFURLRef_Type.tp_base = &CFTypeRef_Type;
4975c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    if (PyType_Ready(&CFURLRef_Type) < 0) return;
4976c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFURLRef_Type);
4977c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFURLRef", (PyObject *)&CFURLRef_Type);
4978c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    /* Backward-compatible name */
4979c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    Py_INCREF(&CFURLRef_Type);
4980c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    PyModule_AddObject(m, "CFURLRefType", (PyObject *)&CFURLRef_Type);
498123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
498223be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen#define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name))
4983c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesAnyApplication);
4984c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesCurrentApplication);
4985c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesAnyHost);
4986c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesCurrentHost);
4987c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesAnyUser);
4988c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou    _STRINGCONST(kCFPreferencesCurrentUser);
498923be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
499023be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
499123be1ceb512ad8244dfd08b97e6a0dab8404f213Jack Jansen
499250ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen}
499350ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
499450ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen/* ========================= End module _CF ========================= */
499550ecb0ad835480e6a3446613ceeffa78a7bd2de3Jack Jansen
4996