Changeset 391 for python/trunk/Mac/Modules/cf
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Mac/Modules/cf/_CFmodule.c
r2 r391 10 10 /* Macro to test whether a weak-loaded CFM function exists */ 11 11 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\ 12 13 14 12 PyErr_SetString(PyExc_NotImplementedError, \ 13 "Not available in this shared library/OS version"); \ 14 return NULL; \ 15 15 }} while(0) 16 16 … … 85 85 { 86 86 87 87 return Py_BuildValue("ll", (long)itself->location, (long)itself->length); 88 88 } 89 89 … … 91 91 CFRange_Convert(PyObject *v, CFRange *p_itself) 92 92 { 93 94 95 96 97 98 99 93 long location, length; 94 95 if( !PyArg_ParseTuple(v, "ll", &location, &length) ) 96 return 0; 97 p_itself->location = (CFIndex)location; 98 p_itself->length = (CFIndex)length; 99 return 1; 100 100 } 101 101 … … 105 105 { 106 106 if ( v == Py_None ) { 107 p_itself = NULL; 107 p_itself = NULL; 108 return 1; 109 } 110 return CFURLRefObj_Convert(v, p_itself); 111 } 112 113 static PyObject *CF_Error; 114 115 /* --------------------- Object type CFTypeRef ---------------------- */ 116 117 PyTypeObject CFTypeRef_Type; 118 119 #define CFTypeRefObj_Check(x) ((x)->ob_type == &CFTypeRef_Type || PyObject_TypeCheck((x), &CFTypeRef_Type)) 120 121 typedef struct CFTypeRefObject { 122 PyObject_HEAD 123 CFTypeRef ob_itself; 124 void (*ob_freeit)(CFTypeRef ptr); 125 } CFTypeRefObject; 126 127 PyObject *CFTypeRefObj_New(CFTypeRef itself) 128 { 129 CFTypeRefObject *it; 130 if (itself == NULL) 131 { 132 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 133 return NULL; 134 } 135 it = PyObject_NEW(CFTypeRefObject, &CFTypeRef_Type); 136 if (it == NULL) return NULL; 137 it->ob_itself = itself; 138 it->ob_freeit = CFRelease; 139 return (PyObject *)it; 140 } 141 142 int CFTypeRefObj_Convert(PyObject *v, CFTypeRef *p_itself) 143 { 144 145 if (v == Py_None) { *p_itself = NULL; return 1; } 146 /* Check for other CF objects here */ 147 148 if (!CFTypeRefObj_Check(v)) 149 { 150 PyErr_SetString(PyExc_TypeError, "CFTypeRef required"); 151 return 0; 152 } 153 *p_itself = ((CFTypeRefObject *)v)->ob_itself; 154 return 1; 155 } 156 157 static void CFTypeRefObj_dealloc(CFTypeRefObject *self) 158 { 159 if (self->ob_freeit && self->ob_itself) 160 { 161 self->ob_freeit((CFTypeRef)self->ob_itself); 162 self->ob_itself = NULL; 163 } 164 self->ob_type->tp_free((PyObject *)self); 165 } 166 167 static PyObject *CFTypeRefObj_CFGetTypeID(CFTypeRefObject *_self, PyObject *_args) 168 { 169 PyObject *_res = NULL; 170 CFTypeID _rv; 171 #ifndef CFGetTypeID 172 PyMac_PRECHECK(CFGetTypeID); 173 #endif 174 if (!PyArg_ParseTuple(_args, "")) 175 return NULL; 176 _rv = CFGetTypeID(_self->ob_itself); 177 _res = Py_BuildValue("l", 178 _rv); 179 return _res; 180 } 181 182 static PyObject *CFTypeRefObj_CFRetain(CFTypeRefObject *_self, PyObject *_args) 183 { 184 PyObject *_res = NULL; 185 CFTypeRef _rv; 186 #ifndef CFRetain 187 PyMac_PRECHECK(CFRetain); 188 #endif 189 if (!PyArg_ParseTuple(_args, "")) 190 return NULL; 191 _rv = CFRetain(_self->ob_itself); 192 _res = Py_BuildValue("O&", 193 CFTypeRefObj_New, _rv); 194 return _res; 195 } 196 197 static PyObject *CFTypeRefObj_CFRelease(CFTypeRefObject *_self, PyObject *_args) 198 { 199 PyObject *_res = NULL; 200 #ifndef CFRelease 201 PyMac_PRECHECK(CFRelease); 202 #endif 203 if (!PyArg_ParseTuple(_args, "")) 204 return NULL; 205 CFRelease(_self->ob_itself); 206 Py_INCREF(Py_None); 207 _res = Py_None; 208 return _res; 209 } 210 211 static PyObject *CFTypeRefObj_CFGetRetainCount(CFTypeRefObject *_self, PyObject *_args) 212 { 213 PyObject *_res = NULL; 214 CFIndex _rv; 215 #ifndef CFGetRetainCount 216 PyMac_PRECHECK(CFGetRetainCount); 217 #endif 218 if (!PyArg_ParseTuple(_args, "")) 219 return NULL; 220 _rv = CFGetRetainCount(_self->ob_itself); 221 _res = Py_BuildValue("l", 222 _rv); 223 return _res; 224 } 225 226 static PyObject *CFTypeRefObj_CFEqual(CFTypeRefObject *_self, PyObject *_args) 227 { 228 PyObject *_res = NULL; 229 Boolean _rv; 230 CFTypeRef cf2; 231 #ifndef CFEqual 232 PyMac_PRECHECK(CFEqual); 233 #endif 234 if (!PyArg_ParseTuple(_args, "O&", 235 CFTypeRefObj_Convert, &cf2)) 236 return NULL; 237 _rv = CFEqual(_self->ob_itself, 238 cf2); 239 _res = Py_BuildValue("l", 240 _rv); 241 return _res; 242 } 243 244 static PyObject *CFTypeRefObj_CFHash(CFTypeRefObject *_self, PyObject *_args) 245 { 246 PyObject *_res = NULL; 247 CFHashCode _rv; 248 #ifndef CFHash 249 PyMac_PRECHECK(CFHash); 250 #endif 251 if (!PyArg_ParseTuple(_args, "")) 252 return NULL; 253 _rv = CFHash(_self->ob_itself); 254 _res = Py_BuildValue("l", 255 _rv); 256 return _res; 257 } 258 259 static PyObject *CFTypeRefObj_CFCopyDescription(CFTypeRefObject *_self, PyObject *_args) 260 { 261 PyObject *_res = NULL; 262 CFStringRef _rv; 263 #ifndef CFCopyDescription 264 PyMac_PRECHECK(CFCopyDescription); 265 #endif 266 if (!PyArg_ParseTuple(_args, "")) 267 return NULL; 268 _rv = CFCopyDescription(_self->ob_itself); 269 _res = Py_BuildValue("O&", 270 CFStringRefObj_New, _rv); 271 return _res; 272 } 273 274 static PyObject *CFTypeRefObj_CFPropertyListCreateXMLData(CFTypeRefObject *_self, PyObject *_args) 275 { 276 PyObject *_res = NULL; 277 CFDataRef _rv; 278 if (!PyArg_ParseTuple(_args, "")) 279 return NULL; 280 _rv = CFPropertyListCreateXMLData((CFAllocatorRef)NULL, 281 _self->ob_itself); 282 _res = Py_BuildValue("O&", 283 CFDataRefObj_New, _rv); 284 return _res; 285 } 286 287 static PyObject *CFTypeRefObj_CFPropertyListCreateDeepCopy(CFTypeRefObject *_self, PyObject *_args) 288 { 289 PyObject *_res = NULL; 290 CFTypeRef _rv; 291 CFOptionFlags mutabilityOption; 292 if (!PyArg_ParseTuple(_args, "l", 293 &mutabilityOption)) 294 return NULL; 295 _rv = CFPropertyListCreateDeepCopy((CFAllocatorRef)NULL, 296 _self->ob_itself, 297 mutabilityOption); 298 _res = Py_BuildValue("O&", 299 CFTypeRefObj_New, _rv); 300 return _res; 301 } 302 303 static PyObject *CFTypeRefObj_CFShow(CFTypeRefObject *_self, PyObject *_args) 304 { 305 PyObject *_res = NULL; 306 #ifndef CFShow 307 PyMac_PRECHECK(CFShow); 308 #endif 309 if (!PyArg_ParseTuple(_args, "")) 310 return NULL; 311 CFShow(_self->ob_itself); 312 Py_INCREF(Py_None); 313 _res = Py_None; 314 return _res; 315 } 316 317 static PyObject *CFTypeRefObj_CFPropertyListCreateFromXMLData(CFTypeRefObject *_self, PyObject *_args) 318 { 319 PyObject *_res = NULL; 320 321 CFTypeRef _rv; 322 CFOptionFlags mutabilityOption; 323 CFStringRef errorString; 324 if (!PyArg_ParseTuple(_args, "l", 325 &mutabilityOption)) 326 return NULL; 327 _rv = CFPropertyListCreateFromXMLData((CFAllocatorRef)NULL, 328 _self->ob_itself, 329 mutabilityOption, 330 &errorString); 331 if (errorString) 332 CFRelease(errorString); 333 if (_rv == NULL) { 334 PyErr_SetString(PyExc_RuntimeError, "Parse error in XML data"); 335 return NULL; 336 } 337 _res = Py_BuildValue("O&", 338 CFTypeRefObj_New, _rv); 339 return _res; 340 341 } 342 343 static PyObject *CFTypeRefObj_toPython(CFTypeRefObject *_self, PyObject *_args) 344 { 345 PyObject *_res = NULL; 346 347 _res = PyCF_CF2Python(_self->ob_itself); 348 return _res; 349 350 } 351 352 static PyMethodDef CFTypeRefObj_methods[] = { 353 {"CFGetTypeID", (PyCFunction)CFTypeRefObj_CFGetTypeID, 1, 354 PyDoc_STR("() -> (CFTypeID _rv)")}, 355 {"CFRetain", (PyCFunction)CFTypeRefObj_CFRetain, 1, 356 PyDoc_STR("() -> (CFTypeRef _rv)")}, 357 {"CFRelease", (PyCFunction)CFTypeRefObj_CFRelease, 1, 358 PyDoc_STR("() -> None")}, 359 {"CFGetRetainCount", (PyCFunction)CFTypeRefObj_CFGetRetainCount, 1, 360 PyDoc_STR("() -> (CFIndex _rv)")}, 361 {"CFEqual", (PyCFunction)CFTypeRefObj_CFEqual, 1, 362 PyDoc_STR("(CFTypeRef cf2) -> (Boolean _rv)")}, 363 {"CFHash", (PyCFunction)CFTypeRefObj_CFHash, 1, 364 PyDoc_STR("() -> (CFHashCode _rv)")}, 365 {"CFCopyDescription", (PyCFunction)CFTypeRefObj_CFCopyDescription, 1, 366 PyDoc_STR("() -> (CFStringRef _rv)")}, 367 {"CFPropertyListCreateXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateXMLData, 1, 368 PyDoc_STR("() -> (CFDataRef _rv)")}, 369 {"CFPropertyListCreateDeepCopy", (PyCFunction)CFTypeRefObj_CFPropertyListCreateDeepCopy, 1, 370 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRef _rv)")}, 371 {"CFShow", (PyCFunction)CFTypeRefObj_CFShow, 1, 372 PyDoc_STR("() -> None")}, 373 {"CFPropertyListCreateFromXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateFromXMLData, 1, 374 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRefObj)")}, 375 {"toPython", (PyCFunction)CFTypeRefObj_toPython, 1, 376 PyDoc_STR("() -> (python_object)")}, 377 {NULL, NULL, 0} 378 }; 379 380 #define CFTypeRefObj_getsetlist NULL 381 382 383 static int CFTypeRefObj_compare(CFTypeRefObject *self, CFTypeRefObject *other) 384 { 385 /* XXXX Or should we use CFEqual?? */ 386 if ( self->ob_itself > other->ob_itself ) return 1; 387 if ( self->ob_itself < other->ob_itself ) return -1; 388 return 0; 389 } 390 391 static PyObject * CFTypeRefObj_repr(CFTypeRefObject *self) 392 { 393 char buf[100]; 394 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); 395 return PyString_FromString(buf); 396 } 397 398 static int CFTypeRefObj_hash(CFTypeRefObject *self) 399 { 400 /* XXXX Or should we use CFHash?? */ 401 return (int)self->ob_itself; 402 } 403 static int CFTypeRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 404 { 405 CFTypeRef itself; 406 char *kw[] = {"itself", 0}; 407 408 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 409 { 410 ((CFTypeRefObject *)_self)->ob_itself = itself; 411 return 0; 412 } 413 return -1; 414 } 415 416 #define CFTypeRefObj_tp_alloc PyType_GenericAlloc 417 418 static PyObject *CFTypeRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 419 { 420 PyObject *self; 421 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 422 ((CFTypeRefObject *)self)->ob_itself = NULL; 423 ((CFTypeRefObject *)self)->ob_freeit = CFRelease; 424 return self; 425 } 426 427 #define CFTypeRefObj_tp_free PyObject_Del 428 429 430 PyTypeObject CFTypeRef_Type = { 431 PyObject_HEAD_INIT(NULL) 432 0, /*ob_size*/ 433 "_CF.CFTypeRef", /*tp_name*/ 434 sizeof(CFTypeRefObject), /*tp_basicsize*/ 435 0, /*tp_itemsize*/ 436 /* methods */ 437 (destructor) CFTypeRefObj_dealloc, /*tp_dealloc*/ 438 0, /*tp_print*/ 439 (getattrfunc)0, /*tp_getattr*/ 440 (setattrfunc)0, /*tp_setattr*/ 441 (cmpfunc) CFTypeRefObj_compare, /*tp_compare*/ 442 (reprfunc) CFTypeRefObj_repr, /*tp_repr*/ 443 (PyNumberMethods *)0, /* tp_as_number */ 444 (PySequenceMethods *)0, /* tp_as_sequence */ 445 (PyMappingMethods *)0, /* tp_as_mapping */ 446 (hashfunc) CFTypeRefObj_hash, /*tp_hash*/ 447 0, /*tp_call*/ 448 0, /*tp_str*/ 449 PyObject_GenericGetAttr, /*tp_getattro*/ 450 PyObject_GenericSetAttr, /*tp_setattro */ 451 0, /*tp_as_buffer*/ 452 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 453 0, /*tp_doc*/ 454 0, /*tp_traverse*/ 455 0, /*tp_clear*/ 456 0, /*tp_richcompare*/ 457 0, /*tp_weaklistoffset*/ 458 0, /*tp_iter*/ 459 0, /*tp_iternext*/ 460 CFTypeRefObj_methods, /* tp_methods */ 461 0, /*tp_members*/ 462 CFTypeRefObj_getsetlist, /*tp_getset*/ 463 0, /*tp_base*/ 464 0, /*tp_dict*/ 465 0, /*tp_descr_get*/ 466 0, /*tp_descr_set*/ 467 0, /*tp_dictoffset*/ 468 CFTypeRefObj_tp_init, /* tp_init */ 469 CFTypeRefObj_tp_alloc, /* tp_alloc */ 470 CFTypeRefObj_tp_new, /* tp_new */ 471 CFTypeRefObj_tp_free, /* tp_free */ 472 }; 473 474 /* ------------------- End object type CFTypeRef -------------------- */ 475 476 477 /* --------------------- Object type CFArrayRef --------------------- */ 478 479 PyTypeObject CFArrayRef_Type; 480 481 #define CFArrayRefObj_Check(x) ((x)->ob_type == &CFArrayRef_Type || PyObject_TypeCheck((x), &CFArrayRef_Type)) 482 483 typedef struct CFArrayRefObject { 484 PyObject_HEAD 485 CFArrayRef ob_itself; 486 void (*ob_freeit)(CFTypeRef ptr); 487 } CFArrayRefObject; 488 489 PyObject *CFArrayRefObj_New(CFArrayRef itself) 490 { 491 CFArrayRefObject *it; 492 if (itself == NULL) 493 { 494 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 495 return NULL; 496 } 497 it = PyObject_NEW(CFArrayRefObject, &CFArrayRef_Type); 498 if (it == NULL) return NULL; 499 /* XXXX Should we tp_init or tp_new our basetype? */ 500 it->ob_itself = itself; 501 it->ob_freeit = CFRelease; 502 return (PyObject *)it; 503 } 504 505 int CFArrayRefObj_Convert(PyObject *v, CFArrayRef *p_itself) 506 { 507 508 if (v == Py_None) { *p_itself = NULL; return 1; } 509 /* Check for other CF objects here */ 510 511 if (!CFArrayRefObj_Check(v)) 512 { 513 PyErr_SetString(PyExc_TypeError, "CFArrayRef required"); 514 return 0; 515 } 516 *p_itself = ((CFArrayRefObject *)v)->ob_itself; 517 return 1; 518 } 519 520 static void CFArrayRefObj_dealloc(CFArrayRefObject *self) 521 { 522 if (self->ob_freeit && self->ob_itself) 523 { 524 self->ob_freeit((CFTypeRef)self->ob_itself); 525 self->ob_itself = NULL; 526 } 527 CFTypeRef_Type.tp_dealloc((PyObject *)self); 528 } 529 530 static PyObject *CFArrayRefObj_CFArrayCreateCopy(CFArrayRefObject *_self, PyObject *_args) 531 { 532 PyObject *_res = NULL; 533 CFArrayRef _rv; 534 if (!PyArg_ParseTuple(_args, "")) 535 return NULL; 536 _rv = CFArrayCreateCopy((CFAllocatorRef)NULL, 537 _self->ob_itself); 538 _res = Py_BuildValue("O&", 539 CFArrayRefObj_New, _rv); 540 return _res; 541 } 542 543 static PyObject *CFArrayRefObj_CFArrayGetCount(CFArrayRefObject *_self, PyObject *_args) 544 { 545 PyObject *_res = NULL; 546 CFIndex _rv; 547 #ifndef CFArrayGetCount 548 PyMac_PRECHECK(CFArrayGetCount); 549 #endif 550 if (!PyArg_ParseTuple(_args, "")) 551 return NULL; 552 _rv = CFArrayGetCount(_self->ob_itself); 553 _res = Py_BuildValue("l", 554 _rv); 555 return _res; 556 } 557 558 static PyObject *CFArrayRefObj_CFStringCreateByCombiningStrings(CFArrayRefObject *_self, PyObject *_args) 559 { 560 PyObject *_res = NULL; 561 CFStringRef _rv; 562 CFStringRef separatorString; 563 if (!PyArg_ParseTuple(_args, "O&", 564 CFStringRefObj_Convert, &separatorString)) 565 return NULL; 566 _rv = CFStringCreateByCombiningStrings((CFAllocatorRef)NULL, 567 _self->ob_itself, 568 separatorString); 569 _res = Py_BuildValue("O&", 570 CFStringRefObj_New, _rv); 571 return _res; 572 } 573 574 static PyMethodDef CFArrayRefObj_methods[] = { 575 {"CFArrayCreateCopy", (PyCFunction)CFArrayRefObj_CFArrayCreateCopy, 1, 576 PyDoc_STR("() -> (CFArrayRef _rv)")}, 577 {"CFArrayGetCount", (PyCFunction)CFArrayRefObj_CFArrayGetCount, 1, 578 PyDoc_STR("() -> (CFIndex _rv)")}, 579 {"CFStringCreateByCombiningStrings", (PyCFunction)CFArrayRefObj_CFStringCreateByCombiningStrings, 1, 580 PyDoc_STR("(CFStringRef separatorString) -> (CFStringRef _rv)")}, 581 {NULL, NULL, 0} 582 }; 583 584 #define CFArrayRefObj_getsetlist NULL 585 586 587 static int CFArrayRefObj_compare(CFArrayRefObject *self, CFArrayRefObject *other) 588 { 589 /* XXXX Or should we use CFEqual?? */ 590 if ( self->ob_itself > other->ob_itself ) return 1; 591 if ( self->ob_itself < other->ob_itself ) return -1; 592 return 0; 593 } 594 595 static PyObject * CFArrayRefObj_repr(CFArrayRefObject *self) 596 { 597 char buf[100]; 598 sprintf(buf, "<CFArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 599 return PyString_FromString(buf); 600 } 601 602 static int CFArrayRefObj_hash(CFArrayRefObject *self) 603 { 604 /* XXXX Or should we use CFHash?? */ 605 return (int)self->ob_itself; 606 } 607 static int CFArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 608 { 609 CFArrayRef itself; 610 char *kw[] = {"itself", 0}; 611 612 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFArrayRefObj_Convert, &itself)) 613 { 614 ((CFArrayRefObject *)_self)->ob_itself = itself; 615 return 0; 616 } 617 618 /* Any CFTypeRef descendent is allowed as initializer too */ 619 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 620 { 621 ((CFArrayRefObject *)_self)->ob_itself = itself; 622 return 0; 623 } 624 return -1; 625 } 626 627 #define CFArrayRefObj_tp_alloc PyType_GenericAlloc 628 629 static PyObject *CFArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 630 { 631 PyObject *self; 632 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 633 ((CFArrayRefObject *)self)->ob_itself = NULL; 634 ((CFArrayRefObject *)self)->ob_freeit = CFRelease; 635 return self; 636 } 637 638 #define CFArrayRefObj_tp_free PyObject_Del 639 640 641 PyTypeObject CFArrayRef_Type = { 642 PyObject_HEAD_INIT(NULL) 643 0, /*ob_size*/ 644 "_CF.CFArrayRef", /*tp_name*/ 645 sizeof(CFArrayRefObject), /*tp_basicsize*/ 646 0, /*tp_itemsize*/ 647 /* methods */ 648 (destructor) CFArrayRefObj_dealloc, /*tp_dealloc*/ 649 0, /*tp_print*/ 650 (getattrfunc)0, /*tp_getattr*/ 651 (setattrfunc)0, /*tp_setattr*/ 652 (cmpfunc) CFArrayRefObj_compare, /*tp_compare*/ 653 (reprfunc) CFArrayRefObj_repr, /*tp_repr*/ 654 (PyNumberMethods *)0, /* tp_as_number */ 655 (PySequenceMethods *)0, /* tp_as_sequence */ 656 (PyMappingMethods *)0, /* tp_as_mapping */ 657 (hashfunc) CFArrayRefObj_hash, /*tp_hash*/ 658 0, /*tp_call*/ 659 0, /*tp_str*/ 660 PyObject_GenericGetAttr, /*tp_getattro*/ 661 PyObject_GenericSetAttr, /*tp_setattro */ 662 0, /*tp_as_buffer*/ 663 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 664 0, /*tp_doc*/ 665 0, /*tp_traverse*/ 666 0, /*tp_clear*/ 667 0, /*tp_richcompare*/ 668 0, /*tp_weaklistoffset*/ 669 0, /*tp_iter*/ 670 0, /*tp_iternext*/ 671 CFArrayRefObj_methods, /* tp_methods */ 672 0, /*tp_members*/ 673 CFArrayRefObj_getsetlist, /*tp_getset*/ 674 0, /*tp_base*/ 675 0, /*tp_dict*/ 676 0, /*tp_descr_get*/ 677 0, /*tp_descr_set*/ 678 0, /*tp_dictoffset*/ 679 CFArrayRefObj_tp_init, /* tp_init */ 680 CFArrayRefObj_tp_alloc, /* tp_alloc */ 681 CFArrayRefObj_tp_new, /* tp_new */ 682 CFArrayRefObj_tp_free, /* tp_free */ 683 }; 684 685 /* ------------------- End object type CFArrayRef ------------------- */ 686 687 688 /* ----------------- Object type CFMutableArrayRef ------------------ */ 689 690 PyTypeObject CFMutableArrayRef_Type; 691 692 #define CFMutableArrayRefObj_Check(x) ((x)->ob_type == &CFMutableArrayRef_Type || PyObject_TypeCheck((x), &CFMutableArrayRef_Type)) 693 694 typedef struct CFMutableArrayRefObject { 695 PyObject_HEAD 696 CFMutableArrayRef ob_itself; 697 void (*ob_freeit)(CFTypeRef ptr); 698 } CFMutableArrayRefObject; 699 700 PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef itself) 701 { 702 CFMutableArrayRefObject *it; 703 if (itself == NULL) 704 { 705 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 706 return NULL; 707 } 708 it = PyObject_NEW(CFMutableArrayRefObject, &CFMutableArrayRef_Type); 709 if (it == NULL) return NULL; 710 /* XXXX Should we tp_init or tp_new our basetype? */ 711 it->ob_itself = itself; 712 it->ob_freeit = CFRelease; 713 return (PyObject *)it; 714 } 715 716 int CFMutableArrayRefObj_Convert(PyObject *v, CFMutableArrayRef *p_itself) 717 { 718 719 if (v == Py_None) { *p_itself = NULL; return 1; } 720 /* Check for other CF objects here */ 721 722 if (!CFMutableArrayRefObj_Check(v)) 723 { 724 PyErr_SetString(PyExc_TypeError, "CFMutableArrayRef required"); 725 return 0; 726 } 727 *p_itself = ((CFMutableArrayRefObject *)v)->ob_itself; 728 return 1; 729 } 730 731 static void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self) 732 { 733 if (self->ob_freeit && self->ob_itself) 734 { 735 self->ob_freeit((CFTypeRef)self->ob_itself); 736 self->ob_itself = NULL; 737 } 738 CFArrayRef_Type.tp_dealloc((PyObject *)self); 739 } 740 741 static PyObject *CFMutableArrayRefObj_CFArrayRemoveValueAtIndex(CFMutableArrayRefObject *_self, PyObject *_args) 742 { 743 PyObject *_res = NULL; 744 CFIndex idx; 745 #ifndef CFArrayRemoveValueAtIndex 746 PyMac_PRECHECK(CFArrayRemoveValueAtIndex); 747 #endif 748 if (!PyArg_ParseTuple(_args, "l", 749 &idx)) 750 return NULL; 751 CFArrayRemoveValueAtIndex(_self->ob_itself, 752 idx); 753 Py_INCREF(Py_None); 754 _res = Py_None; 755 return _res; 756 } 757 758 static PyObject *CFMutableArrayRefObj_CFArrayRemoveAllValues(CFMutableArrayRefObject *_self, PyObject *_args) 759 { 760 PyObject *_res = NULL; 761 #ifndef CFArrayRemoveAllValues 762 PyMac_PRECHECK(CFArrayRemoveAllValues); 763 #endif 764 if (!PyArg_ParseTuple(_args, "")) 765 return NULL; 766 CFArrayRemoveAllValues(_self->ob_itself); 767 Py_INCREF(Py_None); 768 _res = Py_None; 769 return _res; 770 } 771 772 static PyObject *CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices(CFMutableArrayRefObject *_self, PyObject *_args) 773 { 774 PyObject *_res = NULL; 775 CFIndex idx1; 776 CFIndex idx2; 777 #ifndef CFArrayExchangeValuesAtIndices 778 PyMac_PRECHECK(CFArrayExchangeValuesAtIndices); 779 #endif 780 if (!PyArg_ParseTuple(_args, "ll", 781 &idx1, 782 &idx2)) 783 return NULL; 784 CFArrayExchangeValuesAtIndices(_self->ob_itself, 785 idx1, 786 idx2); 787 Py_INCREF(Py_None); 788 _res = Py_None; 789 return _res; 790 } 791 792 static PyObject *CFMutableArrayRefObj_CFArrayAppendArray(CFMutableArrayRefObject *_self, PyObject *_args) 793 { 794 PyObject *_res = NULL; 795 CFArrayRef otherArray; 796 CFRange otherRange; 797 #ifndef CFArrayAppendArray 798 PyMac_PRECHECK(CFArrayAppendArray); 799 #endif 800 if (!PyArg_ParseTuple(_args, "O&O&", 801 CFArrayRefObj_Convert, &otherArray, 802 CFRange_Convert, &otherRange)) 803 return NULL; 804 CFArrayAppendArray(_self->ob_itself, 805 otherArray, 806 otherRange); 807 Py_INCREF(Py_None); 808 _res = Py_None; 809 return _res; 810 } 811 812 static PyMethodDef CFMutableArrayRefObj_methods[] = { 813 {"CFArrayRemoveValueAtIndex", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveValueAtIndex, 1, 814 PyDoc_STR("(CFIndex idx) -> None")}, 815 {"CFArrayRemoveAllValues", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveAllValues, 1, 816 PyDoc_STR("() -> None")}, 817 {"CFArrayExchangeValuesAtIndices", (PyCFunction)CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices, 1, 818 PyDoc_STR("(CFIndex idx1, CFIndex idx2) -> None")}, 819 {"CFArrayAppendArray", (PyCFunction)CFMutableArrayRefObj_CFArrayAppendArray, 1, 820 PyDoc_STR("(CFArrayRef otherArray, CFRange otherRange) -> None")}, 821 {NULL, NULL, 0} 822 }; 823 824 #define CFMutableArrayRefObj_getsetlist NULL 825 826 827 static int CFMutableArrayRefObj_compare(CFMutableArrayRefObject *self, CFMutableArrayRefObject *other) 828 { 829 /* XXXX Or should we use CFEqual?? */ 830 if ( self->ob_itself > other->ob_itself ) return 1; 831 if ( self->ob_itself < other->ob_itself ) return -1; 832 return 0; 833 } 834 835 static PyObject * CFMutableArrayRefObj_repr(CFMutableArrayRefObject *self) 836 { 837 char buf[100]; 838 sprintf(buf, "<CFMutableArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 839 return PyString_FromString(buf); 840 } 841 842 static int CFMutableArrayRefObj_hash(CFMutableArrayRefObject *self) 843 { 844 /* XXXX Or should we use CFHash?? */ 845 return (int)self->ob_itself; 846 } 847 static int CFMutableArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 848 { 849 CFMutableArrayRef itself; 850 char *kw[] = {"itself", 0}; 851 852 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableArrayRefObj_Convert, &itself)) 853 { 854 ((CFMutableArrayRefObject *)_self)->ob_itself = itself; 855 return 0; 856 } 857 858 /* Any CFTypeRef descendent is allowed as initializer too */ 859 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 860 { 861 ((CFMutableArrayRefObject *)_self)->ob_itself = itself; 862 return 0; 863 } 864 return -1; 865 } 866 867 #define CFMutableArrayRefObj_tp_alloc PyType_GenericAlloc 868 869 static PyObject *CFMutableArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 870 { 871 PyObject *self; 872 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 873 ((CFMutableArrayRefObject *)self)->ob_itself = NULL; 874 ((CFMutableArrayRefObject *)self)->ob_freeit = CFRelease; 875 return self; 876 } 877 878 #define CFMutableArrayRefObj_tp_free PyObject_Del 879 880 881 PyTypeObject CFMutableArrayRef_Type = { 882 PyObject_HEAD_INIT(NULL) 883 0, /*ob_size*/ 884 "_CF.CFMutableArrayRef", /*tp_name*/ 885 sizeof(CFMutableArrayRefObject), /*tp_basicsize*/ 886 0, /*tp_itemsize*/ 887 /* methods */ 888 (destructor) CFMutableArrayRefObj_dealloc, /*tp_dealloc*/ 889 0, /*tp_print*/ 890 (getattrfunc)0, /*tp_getattr*/ 891 (setattrfunc)0, /*tp_setattr*/ 892 (cmpfunc) CFMutableArrayRefObj_compare, /*tp_compare*/ 893 (reprfunc) CFMutableArrayRefObj_repr, /*tp_repr*/ 894 (PyNumberMethods *)0, /* tp_as_number */ 895 (PySequenceMethods *)0, /* tp_as_sequence */ 896 (PyMappingMethods *)0, /* tp_as_mapping */ 897 (hashfunc) CFMutableArrayRefObj_hash, /*tp_hash*/ 898 0, /*tp_call*/ 899 0, /*tp_str*/ 900 PyObject_GenericGetAttr, /*tp_getattro*/ 901 PyObject_GenericSetAttr, /*tp_setattro */ 902 0, /*tp_as_buffer*/ 903 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 904 0, /*tp_doc*/ 905 0, /*tp_traverse*/ 906 0, /*tp_clear*/ 907 0, /*tp_richcompare*/ 908 0, /*tp_weaklistoffset*/ 909 0, /*tp_iter*/ 910 0, /*tp_iternext*/ 911 CFMutableArrayRefObj_methods, /* tp_methods */ 912 0, /*tp_members*/ 913 CFMutableArrayRefObj_getsetlist, /*tp_getset*/ 914 0, /*tp_base*/ 915 0, /*tp_dict*/ 916 0, /*tp_descr_get*/ 917 0, /*tp_descr_set*/ 918 0, /*tp_dictoffset*/ 919 CFMutableArrayRefObj_tp_init, /* tp_init */ 920 CFMutableArrayRefObj_tp_alloc, /* tp_alloc */ 921 CFMutableArrayRefObj_tp_new, /* tp_new */ 922 CFMutableArrayRefObj_tp_free, /* tp_free */ 923 }; 924 925 /* --------------- End object type CFMutableArrayRef ---------------- */ 926 927 928 /* ------------------ Object type CFDictionaryRef ------------------- */ 929 930 PyTypeObject CFDictionaryRef_Type; 931 932 #define CFDictionaryRefObj_Check(x) ((x)->ob_type == &CFDictionaryRef_Type || PyObject_TypeCheck((x), &CFDictionaryRef_Type)) 933 934 typedef struct CFDictionaryRefObject { 935 PyObject_HEAD 936 CFDictionaryRef ob_itself; 937 void (*ob_freeit)(CFTypeRef ptr); 938 } CFDictionaryRefObject; 939 940 PyObject *CFDictionaryRefObj_New(CFDictionaryRef itself) 941 { 942 CFDictionaryRefObject *it; 943 if (itself == NULL) 944 { 945 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 946 return NULL; 947 } 948 it = PyObject_NEW(CFDictionaryRefObject, &CFDictionaryRef_Type); 949 if (it == NULL) return NULL; 950 /* XXXX Should we tp_init or tp_new our basetype? */ 951 it->ob_itself = itself; 952 it->ob_freeit = CFRelease; 953 return (PyObject *)it; 954 } 955 956 int CFDictionaryRefObj_Convert(PyObject *v, CFDictionaryRef *p_itself) 957 { 958 959 if (v == Py_None) { *p_itself = NULL; return 1; } 960 /* Check for other CF objects here */ 961 962 if (!CFDictionaryRefObj_Check(v)) 963 { 964 PyErr_SetString(PyExc_TypeError, "CFDictionaryRef required"); 965 return 0; 966 } 967 *p_itself = ((CFDictionaryRefObject *)v)->ob_itself; 968 return 1; 969 } 970 971 static void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self) 972 { 973 if (self->ob_freeit && self->ob_itself) 974 { 975 self->ob_freeit((CFTypeRef)self->ob_itself); 976 self->ob_itself = NULL; 977 } 978 CFTypeRef_Type.tp_dealloc((PyObject *)self); 979 } 980 981 static PyObject *CFDictionaryRefObj_CFDictionaryCreateCopy(CFDictionaryRefObject *_self, PyObject *_args) 982 { 983 PyObject *_res = NULL; 984 CFDictionaryRef _rv; 985 if (!PyArg_ParseTuple(_args, "")) 986 return NULL; 987 _rv = CFDictionaryCreateCopy((CFAllocatorRef)NULL, 988 _self->ob_itself); 989 _res = Py_BuildValue("O&", 990 CFDictionaryRefObj_New, _rv); 991 return _res; 992 } 993 994 static PyObject *CFDictionaryRefObj_CFDictionaryGetCount(CFDictionaryRefObject *_self, PyObject *_args) 995 { 996 PyObject *_res = NULL; 997 CFIndex _rv; 998 #ifndef CFDictionaryGetCount 999 PyMac_PRECHECK(CFDictionaryGetCount); 1000 #endif 1001 if (!PyArg_ParseTuple(_args, "")) 1002 return NULL; 1003 _rv = CFDictionaryGetCount(_self->ob_itself); 1004 _res = Py_BuildValue("l", 1005 _rv); 1006 return _res; 1007 } 1008 1009 static PyMethodDef CFDictionaryRefObj_methods[] = { 1010 {"CFDictionaryCreateCopy", (PyCFunction)CFDictionaryRefObj_CFDictionaryCreateCopy, 1, 1011 PyDoc_STR("() -> (CFDictionaryRef _rv)")}, 1012 {"CFDictionaryGetCount", (PyCFunction)CFDictionaryRefObj_CFDictionaryGetCount, 1, 1013 PyDoc_STR("() -> (CFIndex _rv)")}, 1014 {NULL, NULL, 0} 1015 }; 1016 1017 #define CFDictionaryRefObj_getsetlist NULL 1018 1019 1020 static int CFDictionaryRefObj_compare(CFDictionaryRefObject *self, CFDictionaryRefObject *other) 1021 { 1022 /* XXXX Or should we use CFEqual?? */ 1023 if ( self->ob_itself > other->ob_itself ) return 1; 1024 if ( self->ob_itself < other->ob_itself ) return -1; 1025 return 0; 1026 } 1027 1028 static PyObject * CFDictionaryRefObj_repr(CFDictionaryRefObject *self) 1029 { 1030 char buf[100]; 1031 sprintf(buf, "<CFDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 1032 return PyString_FromString(buf); 1033 } 1034 1035 static int CFDictionaryRefObj_hash(CFDictionaryRefObject *self) 1036 { 1037 /* XXXX Or should we use CFHash?? */ 1038 return (int)self->ob_itself; 1039 } 1040 static int CFDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 1041 { 1042 CFDictionaryRef itself; 1043 char *kw[] = {"itself", 0}; 1044 1045 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDictionaryRefObj_Convert, &itself)) 1046 { 1047 ((CFDictionaryRefObject *)_self)->ob_itself = itself; 1048 return 0; 1049 } 1050 1051 /* Any CFTypeRef descendent is allowed as initializer too */ 1052 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 1053 { 1054 ((CFDictionaryRefObject *)_self)->ob_itself = itself; 1055 return 0; 1056 } 1057 return -1; 1058 } 1059 1060 #define CFDictionaryRefObj_tp_alloc PyType_GenericAlloc 1061 1062 static PyObject *CFDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 1063 { 1064 PyObject *self; 1065 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 1066 ((CFDictionaryRefObject *)self)->ob_itself = NULL; 1067 ((CFDictionaryRefObject *)self)->ob_freeit = CFRelease; 1068 return self; 1069 } 1070 1071 #define CFDictionaryRefObj_tp_free PyObject_Del 1072 1073 1074 PyTypeObject CFDictionaryRef_Type = { 1075 PyObject_HEAD_INIT(NULL) 1076 0, /*ob_size*/ 1077 "_CF.CFDictionaryRef", /*tp_name*/ 1078 sizeof(CFDictionaryRefObject), /*tp_basicsize*/ 1079 0, /*tp_itemsize*/ 1080 /* methods */ 1081 (destructor) CFDictionaryRefObj_dealloc, /*tp_dealloc*/ 1082 0, /*tp_print*/ 1083 (getattrfunc)0, /*tp_getattr*/ 1084 (setattrfunc)0, /*tp_setattr*/ 1085 (cmpfunc) CFDictionaryRefObj_compare, /*tp_compare*/ 1086 (reprfunc) CFDictionaryRefObj_repr, /*tp_repr*/ 1087 (PyNumberMethods *)0, /* tp_as_number */ 1088 (PySequenceMethods *)0, /* tp_as_sequence */ 1089 (PyMappingMethods *)0, /* tp_as_mapping */ 1090 (hashfunc) CFDictionaryRefObj_hash, /*tp_hash*/ 1091 0, /*tp_call*/ 1092 0, /*tp_str*/ 1093 PyObject_GenericGetAttr, /*tp_getattro*/ 1094 PyObject_GenericSetAttr, /*tp_setattro */ 1095 0, /*tp_as_buffer*/ 1096 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 1097 0, /*tp_doc*/ 1098 0, /*tp_traverse*/ 1099 0, /*tp_clear*/ 1100 0, /*tp_richcompare*/ 1101 0, /*tp_weaklistoffset*/ 1102 0, /*tp_iter*/ 1103 0, /*tp_iternext*/ 1104 CFDictionaryRefObj_methods, /* tp_methods */ 1105 0, /*tp_members*/ 1106 CFDictionaryRefObj_getsetlist, /*tp_getset*/ 1107 0, /*tp_base*/ 1108 0, /*tp_dict*/ 1109 0, /*tp_descr_get*/ 1110 0, /*tp_descr_set*/ 1111 0, /*tp_dictoffset*/ 1112 CFDictionaryRefObj_tp_init, /* tp_init */ 1113 CFDictionaryRefObj_tp_alloc, /* tp_alloc */ 1114 CFDictionaryRefObj_tp_new, /* tp_new */ 1115 CFDictionaryRefObj_tp_free, /* tp_free */ 1116 }; 1117 1118 /* ---------------- End object type CFDictionaryRef ----------------- */ 1119 1120 1121 /* --------------- Object type CFMutableDictionaryRef --------------- */ 1122 1123 PyTypeObject CFMutableDictionaryRef_Type; 1124 1125 #define CFMutableDictionaryRefObj_Check(x) ((x)->ob_type == &CFMutableDictionaryRef_Type || PyObject_TypeCheck((x), &CFMutableDictionaryRef_Type)) 1126 1127 typedef struct CFMutableDictionaryRefObject { 1128 PyObject_HEAD 1129 CFMutableDictionaryRef ob_itself; 1130 void (*ob_freeit)(CFTypeRef ptr); 1131 } CFMutableDictionaryRefObject; 1132 1133 PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef itself) 1134 { 1135 CFMutableDictionaryRefObject *it; 1136 if (itself == NULL) 1137 { 1138 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 1139 return NULL; 1140 } 1141 it = PyObject_NEW(CFMutableDictionaryRefObject, &CFMutableDictionaryRef_Type); 1142 if (it == NULL) return NULL; 1143 /* XXXX Should we tp_init or tp_new our basetype? */ 1144 it->ob_itself = itself; 1145 it->ob_freeit = CFRelease; 1146 return (PyObject *)it; 1147 } 1148 1149 int CFMutableDictionaryRefObj_Convert(PyObject *v, CFMutableDictionaryRef *p_itself) 1150 { 1151 1152 if (v == Py_None) { *p_itself = NULL; return 1; } 1153 /* Check for other CF objects here */ 1154 1155 if (!CFMutableDictionaryRefObj_Check(v)) 1156 { 1157 PyErr_SetString(PyExc_TypeError, "CFMutableDictionaryRef required"); 1158 return 0; 1159 } 1160 *p_itself = ((CFMutableDictionaryRefObject *)v)->ob_itself; 1161 return 1; 1162 } 1163 1164 static void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self) 1165 { 1166 if (self->ob_freeit && self->ob_itself) 1167 { 1168 self->ob_freeit((CFTypeRef)self->ob_itself); 1169 self->ob_itself = NULL; 1170 } 1171 CFDictionaryRef_Type.tp_dealloc((PyObject *)self); 1172 } 1173 1174 static PyObject *CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues(CFMutableDictionaryRefObject *_self, PyObject *_args) 1175 { 1176 PyObject *_res = NULL; 1177 #ifndef CFDictionaryRemoveAllValues 1178 PyMac_PRECHECK(CFDictionaryRemoveAllValues); 1179 #endif 1180 if (!PyArg_ParseTuple(_args, "")) 1181 return NULL; 1182 CFDictionaryRemoveAllValues(_self->ob_itself); 1183 Py_INCREF(Py_None); 1184 _res = Py_None; 1185 return _res; 1186 } 1187 1188 static PyMethodDef CFMutableDictionaryRefObj_methods[] = { 1189 {"CFDictionaryRemoveAllValues", (PyCFunction)CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues, 1, 1190 PyDoc_STR("() -> None")}, 1191 {NULL, NULL, 0} 1192 }; 1193 1194 #define CFMutableDictionaryRefObj_getsetlist NULL 1195 1196 1197 static int CFMutableDictionaryRefObj_compare(CFMutableDictionaryRefObject *self, CFMutableDictionaryRefObject *other) 1198 { 1199 /* XXXX Or should we use CFEqual?? */ 1200 if ( self->ob_itself > other->ob_itself ) return 1; 1201 if ( self->ob_itself < other->ob_itself ) return -1; 1202 return 0; 1203 } 1204 1205 static PyObject * CFMutableDictionaryRefObj_repr(CFMutableDictionaryRefObject *self) 1206 { 1207 char buf[100]; 1208 sprintf(buf, "<CFMutableDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 1209 return PyString_FromString(buf); 1210 } 1211 1212 static int CFMutableDictionaryRefObj_hash(CFMutableDictionaryRefObject *self) 1213 { 1214 /* XXXX Or should we use CFHash?? */ 1215 return (int)self->ob_itself; 1216 } 1217 static int CFMutableDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 1218 { 1219 CFMutableDictionaryRef itself; 1220 char *kw[] = {"itself", 0}; 1221 1222 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDictionaryRefObj_Convert, &itself)) 1223 { 1224 ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself; 1225 return 0; 1226 } 1227 1228 /* Any CFTypeRef descendent is allowed as initializer too */ 1229 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 1230 { 1231 ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself; 1232 return 0; 1233 } 1234 return -1; 1235 } 1236 1237 #define CFMutableDictionaryRefObj_tp_alloc PyType_GenericAlloc 1238 1239 static PyObject *CFMutableDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 1240 { 1241 PyObject *self; 1242 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 1243 ((CFMutableDictionaryRefObject *)self)->ob_itself = NULL; 1244 ((CFMutableDictionaryRefObject *)self)->ob_freeit = CFRelease; 1245 return self; 1246 } 1247 1248 #define CFMutableDictionaryRefObj_tp_free PyObject_Del 1249 1250 1251 PyTypeObject CFMutableDictionaryRef_Type = { 1252 PyObject_HEAD_INIT(NULL) 1253 0, /*ob_size*/ 1254 "_CF.CFMutableDictionaryRef", /*tp_name*/ 1255 sizeof(CFMutableDictionaryRefObject), /*tp_basicsize*/ 1256 0, /*tp_itemsize*/ 1257 /* methods */ 1258 (destructor) CFMutableDictionaryRefObj_dealloc, /*tp_dealloc*/ 1259 0, /*tp_print*/ 1260 (getattrfunc)0, /*tp_getattr*/ 1261 (setattrfunc)0, /*tp_setattr*/ 1262 (cmpfunc) CFMutableDictionaryRefObj_compare, /*tp_compare*/ 1263 (reprfunc) CFMutableDictionaryRefObj_repr, /*tp_repr*/ 1264 (PyNumberMethods *)0, /* tp_as_number */ 1265 (PySequenceMethods *)0, /* tp_as_sequence */ 1266 (PyMappingMethods *)0, /* tp_as_mapping */ 1267 (hashfunc) CFMutableDictionaryRefObj_hash, /*tp_hash*/ 1268 0, /*tp_call*/ 1269 0, /*tp_str*/ 1270 PyObject_GenericGetAttr, /*tp_getattro*/ 1271 PyObject_GenericSetAttr, /*tp_setattro */ 1272 0, /*tp_as_buffer*/ 1273 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 1274 0, /*tp_doc*/ 1275 0, /*tp_traverse*/ 1276 0, /*tp_clear*/ 1277 0, /*tp_richcompare*/ 1278 0, /*tp_weaklistoffset*/ 1279 0, /*tp_iter*/ 1280 0, /*tp_iternext*/ 1281 CFMutableDictionaryRefObj_methods, /* tp_methods */ 1282 0, /*tp_members*/ 1283 CFMutableDictionaryRefObj_getsetlist, /*tp_getset*/ 1284 0, /*tp_base*/ 1285 0, /*tp_dict*/ 1286 0, /*tp_descr_get*/ 1287 0, /*tp_descr_set*/ 1288 0, /*tp_dictoffset*/ 1289 CFMutableDictionaryRefObj_tp_init, /* tp_init */ 1290 CFMutableDictionaryRefObj_tp_alloc, /* tp_alloc */ 1291 CFMutableDictionaryRefObj_tp_new, /* tp_new */ 1292 CFMutableDictionaryRefObj_tp_free, /* tp_free */ 1293 }; 1294 1295 /* ------------- End object type CFMutableDictionaryRef ------------- */ 1296 1297 1298 /* --------------------- Object type CFDataRef ---------------------- */ 1299 1300 PyTypeObject CFDataRef_Type; 1301 1302 #define CFDataRefObj_Check(x) ((x)->ob_type == &CFDataRef_Type || PyObject_TypeCheck((x), &CFDataRef_Type)) 1303 1304 typedef struct CFDataRefObject { 1305 PyObject_HEAD 1306 CFDataRef ob_itself; 1307 void (*ob_freeit)(CFTypeRef ptr); 1308 } CFDataRefObject; 1309 1310 PyObject *CFDataRefObj_New(CFDataRef itself) 1311 { 1312 CFDataRefObject *it; 1313 if (itself == NULL) 1314 { 1315 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 1316 return NULL; 1317 } 1318 it = PyObject_NEW(CFDataRefObject, &CFDataRef_Type); 1319 if (it == NULL) return NULL; 1320 /* XXXX Should we tp_init or tp_new our basetype? */ 1321 it->ob_itself = itself; 1322 it->ob_freeit = CFRelease; 1323 return (PyObject *)it; 1324 } 1325 1326 int CFDataRefObj_Convert(PyObject *v, CFDataRef *p_itself) 1327 { 1328 1329 if (v == Py_None) { *p_itself = NULL; return 1; } 1330 if (PyString_Check(v)) { 1331 char *cStr; 1332 Py_ssize_t cLen; 1333 if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0; 1334 *p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen); 108 1335 return 1; 109 1336 } 110 return CFURLRefObj_Convert(v, p_itself); 111 } 112 113 static PyObject *CF_Error; 114 115 /* --------------------- Object type CFTypeRef ---------------------- */ 116 117 PyTypeObject CFTypeRef_Type; 118 119 #define CFTypeRefObj_Check(x) ((x)->ob_type == &CFTypeRef_Type || PyObject_TypeCheck((x), &CFTypeRef_Type)) 120 121 typedef struct CFTypeRefObject { 122 PyObject_HEAD 123 CFTypeRef ob_itself; 124 void (*ob_freeit)(CFTypeRef ptr); 125 } CFTypeRefObject; 126 127 PyObject *CFTypeRefObj_New(CFTypeRef itself) 128 { 129 CFTypeRefObject *it; 130 if (itself == NULL) 131 { 132 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 133 return NULL; 134 } 135 it = PyObject_NEW(CFTypeRefObject, &CFTypeRef_Type); 136 if (it == NULL) return NULL; 137 it->ob_itself = itself; 138 it->ob_freeit = CFRelease; 139 return (PyObject *)it; 140 } 141 142 int CFTypeRefObj_Convert(PyObject *v, CFTypeRef *p_itself) 143 { 144 145 if (v == Py_None) { *p_itself = NULL; return 1; } 146 /* Check for other CF objects here */ 147 148 if (!CFTypeRefObj_Check(v)) 149 { 150 PyErr_SetString(PyExc_TypeError, "CFTypeRef required"); 151 return 0; 152 } 153 *p_itself = ((CFTypeRefObject *)v)->ob_itself; 154 return 1; 155 } 156 157 static void CFTypeRefObj_dealloc(CFTypeRefObject *self) 158 { 159 if (self->ob_freeit && self->ob_itself) 160 { 161 self->ob_freeit((CFTypeRef)self->ob_itself); 162 self->ob_itself = NULL; 163 } 164 self->ob_type->tp_free((PyObject *)self); 165 } 166 167 static PyObject *CFTypeRefObj_CFGetTypeID(CFTypeRefObject *_self, PyObject *_args) 168 { 169 PyObject *_res = NULL; 170 CFTypeID _rv; 171 #ifndef CFGetTypeID 172 PyMac_PRECHECK(CFGetTypeID); 173 #endif 174 if (!PyArg_ParseTuple(_args, "")) 175 return NULL; 176 _rv = CFGetTypeID(_self->ob_itself); 177 _res = Py_BuildValue("l", 178 _rv); 179 return _res; 180 } 181 182 static PyObject *CFTypeRefObj_CFRetain(CFTypeRefObject *_self, PyObject *_args) 183 { 184 PyObject *_res = NULL; 185 CFTypeRef _rv; 186 #ifndef CFRetain 187 PyMac_PRECHECK(CFRetain); 188 #endif 189 if (!PyArg_ParseTuple(_args, "")) 190 return NULL; 191 _rv = CFRetain(_self->ob_itself); 192 _res = Py_BuildValue("O&", 193 CFTypeRefObj_New, _rv); 194 return _res; 195 } 196 197 static PyObject *CFTypeRefObj_CFRelease(CFTypeRefObject *_self, PyObject *_args) 198 { 199 PyObject *_res = NULL; 200 #ifndef CFRelease 201 PyMac_PRECHECK(CFRelease); 202 #endif 203 if (!PyArg_ParseTuple(_args, "")) 204 return NULL; 205 CFRelease(_self->ob_itself); 206 Py_INCREF(Py_None); 207 _res = Py_None; 208 return _res; 209 } 210 211 static PyObject *CFTypeRefObj_CFGetRetainCount(CFTypeRefObject *_self, PyObject *_args) 212 { 213 PyObject *_res = NULL; 214 CFIndex _rv; 215 #ifndef CFGetRetainCount 216 PyMac_PRECHECK(CFGetRetainCount); 217 #endif 218 if (!PyArg_ParseTuple(_args, "")) 219 return NULL; 220 _rv = CFGetRetainCount(_self->ob_itself); 221 _res = Py_BuildValue("l", 222 _rv); 223 return _res; 224 } 225 226 static PyObject *CFTypeRefObj_CFEqual(CFTypeRefObject *_self, PyObject *_args) 227 { 228 PyObject *_res = NULL; 229 Boolean _rv; 230 CFTypeRef cf2; 231 #ifndef CFEqual 232 PyMac_PRECHECK(CFEqual); 233 #endif 234 if (!PyArg_ParseTuple(_args, "O&", 235 CFTypeRefObj_Convert, &cf2)) 236 return NULL; 237 _rv = CFEqual(_self->ob_itself, 238 cf2); 239 _res = Py_BuildValue("l", 240 _rv); 241 return _res; 242 } 243 244 static PyObject *CFTypeRefObj_CFHash(CFTypeRefObject *_self, PyObject *_args) 245 { 246 PyObject *_res = NULL; 247 CFHashCode _rv; 248 #ifndef CFHash 249 PyMac_PRECHECK(CFHash); 250 #endif 251 if (!PyArg_ParseTuple(_args, "")) 252 return NULL; 253 _rv = CFHash(_self->ob_itself); 254 _res = Py_BuildValue("l", 255 _rv); 256 return _res; 257 } 258 259 static PyObject *CFTypeRefObj_CFCopyDescription(CFTypeRefObject *_self, PyObject *_args) 260 { 261 PyObject *_res = NULL; 262 CFStringRef _rv; 263 #ifndef CFCopyDescription 264 PyMac_PRECHECK(CFCopyDescription); 265 #endif 266 if (!PyArg_ParseTuple(_args, "")) 267 return NULL; 268 _rv = CFCopyDescription(_self->ob_itself); 269 _res = Py_BuildValue("O&", 270 CFStringRefObj_New, _rv); 271 return _res; 272 } 273 274 static PyObject *CFTypeRefObj_CFPropertyListCreateXMLData(CFTypeRefObject *_self, PyObject *_args) 275 { 276 PyObject *_res = NULL; 277 CFDataRef _rv; 278 if (!PyArg_ParseTuple(_args, "")) 279 return NULL; 280 _rv = CFPropertyListCreateXMLData((CFAllocatorRef)NULL, 281 _self->ob_itself); 282 _res = Py_BuildValue("O&", 283 CFDataRefObj_New, _rv); 284 return _res; 285 } 286 287 static PyObject *CFTypeRefObj_CFPropertyListCreateDeepCopy(CFTypeRefObject *_self, PyObject *_args) 288 { 289 PyObject *_res = NULL; 290 CFTypeRef _rv; 291 CFOptionFlags mutabilityOption; 292 if (!PyArg_ParseTuple(_args, "l", 293 &mutabilityOption)) 294 return NULL; 295 _rv = CFPropertyListCreateDeepCopy((CFAllocatorRef)NULL, 296 _self->ob_itself, 297 mutabilityOption); 298 _res = Py_BuildValue("O&", 299 CFTypeRefObj_New, _rv); 300 return _res; 301 } 302 303 static PyObject *CFTypeRefObj_CFShow(CFTypeRefObject *_self, PyObject *_args) 304 { 305 PyObject *_res = NULL; 306 #ifndef CFShow 307 PyMac_PRECHECK(CFShow); 308 #endif 309 if (!PyArg_ParseTuple(_args, "")) 310 return NULL; 311 CFShow(_self->ob_itself); 312 Py_INCREF(Py_None); 313 _res = Py_None; 314 return _res; 315 } 316 317 static PyObject *CFTypeRefObj_CFPropertyListCreateFromXMLData(CFTypeRefObject *_self, PyObject *_args) 318 { 319 PyObject *_res = NULL; 320 321 CFTypeRef _rv; 322 CFOptionFlags mutabilityOption; 323 CFStringRef errorString; 324 if (!PyArg_ParseTuple(_args, "l", 325 &mutabilityOption)) 326 return NULL; 327 _rv = CFPropertyListCreateFromXMLData((CFAllocatorRef)NULL, 328 _self->ob_itself, 329 mutabilityOption, 330 &errorString); 331 if (errorString) 332 CFRelease(errorString); 333 if (_rv == NULL) { 334 PyErr_SetString(PyExc_RuntimeError, "Parse error in XML data"); 335 return NULL; 336 } 337 _res = Py_BuildValue("O&", 338 CFTypeRefObj_New, _rv); 339 return _res; 340 341 } 342 343 static PyObject *CFTypeRefObj_toPython(CFTypeRefObject *_self, PyObject *_args) 344 { 345 PyObject *_res = NULL; 346 347 _res = PyCF_CF2Python(_self->ob_itself); 348 return _res; 349 350 } 351 352 static PyMethodDef CFTypeRefObj_methods[] = { 353 {"CFGetTypeID", (PyCFunction)CFTypeRefObj_CFGetTypeID, 1, 354 PyDoc_STR("() -> (CFTypeID _rv)")}, 355 {"CFRetain", (PyCFunction)CFTypeRefObj_CFRetain, 1, 356 PyDoc_STR("() -> (CFTypeRef _rv)")}, 357 {"CFRelease", (PyCFunction)CFTypeRefObj_CFRelease, 1, 358 PyDoc_STR("() -> None")}, 359 {"CFGetRetainCount", (PyCFunction)CFTypeRefObj_CFGetRetainCount, 1, 360 PyDoc_STR("() -> (CFIndex _rv)")}, 361 {"CFEqual", (PyCFunction)CFTypeRefObj_CFEqual, 1, 362 PyDoc_STR("(CFTypeRef cf2) -> (Boolean _rv)")}, 363 {"CFHash", (PyCFunction)CFTypeRefObj_CFHash, 1, 364 PyDoc_STR("() -> (CFHashCode _rv)")}, 365 {"CFCopyDescription", (PyCFunction)CFTypeRefObj_CFCopyDescription, 1, 366 PyDoc_STR("() -> (CFStringRef _rv)")}, 367 {"CFPropertyListCreateXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateXMLData, 1, 368 PyDoc_STR("() -> (CFDataRef _rv)")}, 369 {"CFPropertyListCreateDeepCopy", (PyCFunction)CFTypeRefObj_CFPropertyListCreateDeepCopy, 1, 370 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRef _rv)")}, 371 {"CFShow", (PyCFunction)CFTypeRefObj_CFShow, 1, 372 PyDoc_STR("() -> None")}, 373 {"CFPropertyListCreateFromXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateFromXMLData, 1, 374 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRefObj)")}, 375 {"toPython", (PyCFunction)CFTypeRefObj_toPython, 1, 376 PyDoc_STR("() -> (python_object)")}, 377 {NULL, NULL, 0} 1337 1338 if (!CFDataRefObj_Check(v)) 1339 { 1340 PyErr_SetString(PyExc_TypeError, "CFDataRef required"); 1341 return 0; 1342 } 1343 *p_itself = ((CFDataRefObject *)v)->ob_itself; 1344 return 1; 1345 } 1346 1347 static void CFDataRefObj_dealloc(CFDataRefObject *self) 1348 { 1349 if (self->ob_freeit && self->ob_itself) 1350 { 1351 self->ob_freeit((CFTypeRef)self->ob_itself); 1352 self->ob_itself = NULL; 1353 } 1354 CFTypeRef_Type.tp_dealloc((PyObject *)self); 1355 } 1356 1357 static PyObject *CFDataRefObj_CFDataCreateCopy(CFDataRefObject *_self, PyObject *_args) 1358 { 1359 PyObject *_res = NULL; 1360 CFDataRef _rv; 1361 if (!PyArg_ParseTuple(_args, "")) 1362 return NULL; 1363 _rv = CFDataCreateCopy((CFAllocatorRef)NULL, 1364 _self->ob_itself); 1365 _res = Py_BuildValue("O&", 1366 CFDataRefObj_New, _rv); 1367 return _res; 1368 } 1369 1370 static PyObject *CFDataRefObj_CFDataGetLength(CFDataRefObject *_self, PyObject *_args) 1371 { 1372 PyObject *_res = NULL; 1373 CFIndex _rv; 1374 #ifndef CFDataGetLength 1375 PyMac_PRECHECK(CFDataGetLength); 1376 #endif 1377 if (!PyArg_ParseTuple(_args, "")) 1378 return NULL; 1379 _rv = CFDataGetLength(_self->ob_itself); 1380 _res = Py_BuildValue("l", 1381 _rv); 1382 return _res; 1383 } 1384 1385 static PyObject *CFDataRefObj_CFStringCreateFromExternalRepresentation(CFDataRefObject *_self, PyObject *_args) 1386 { 1387 PyObject *_res = NULL; 1388 CFStringRef _rv; 1389 CFStringEncoding encoding; 1390 if (!PyArg_ParseTuple(_args, "l", 1391 &encoding)) 1392 return NULL; 1393 _rv = CFStringCreateFromExternalRepresentation((CFAllocatorRef)NULL, 1394 _self->ob_itself, 1395 encoding); 1396 _res = Py_BuildValue("O&", 1397 CFStringRefObj_New, _rv); 1398 return _res; 1399 } 1400 1401 static PyObject *CFDataRefObj_CFDataGetData(CFDataRefObject *_self, PyObject *_args) 1402 { 1403 PyObject *_res = NULL; 1404 1405 int size = CFDataGetLength(_self->ob_itself); 1406 char *data = (char *)CFDataGetBytePtr(_self->ob_itself); 1407 1408 _res = (PyObject *)PyString_FromStringAndSize(data, size); 1409 return _res; 1410 1411 } 1412 1413 static PyMethodDef CFDataRefObj_methods[] = { 1414 {"CFDataCreateCopy", (PyCFunction)CFDataRefObj_CFDataCreateCopy, 1, 1415 PyDoc_STR("() -> (CFDataRef _rv)")}, 1416 {"CFDataGetLength", (PyCFunction)CFDataRefObj_CFDataGetLength, 1, 1417 PyDoc_STR("() -> (CFIndex _rv)")}, 1418 {"CFStringCreateFromExternalRepresentation", (PyCFunction)CFDataRefObj_CFStringCreateFromExternalRepresentation, 1, 1419 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")}, 1420 {"CFDataGetData", (PyCFunction)CFDataRefObj_CFDataGetData, 1, 1421 PyDoc_STR("() -> (string _rv)")}, 1422 {NULL, NULL, 0} 378 1423 }; 379 1424 380 #define CFTypeRefObj_getsetlist NULL 381 382 383 static int CFTypeRefObj_compare(CFTypeRefObject *self, CFTypeRefObject *other) 384 { 385 /* XXXX Or should we use CFEqual?? */ 386 if ( self->ob_itself > other->ob_itself ) return 1; 387 if ( self->ob_itself < other->ob_itself ) return -1; 388 return 0; 389 } 390 391 static PyObject * CFTypeRefObj_repr(CFTypeRefObject *self) 392 { 393 char buf[100]; 394 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); 395 return PyString_FromString(buf); 396 } 397 398 static int CFTypeRefObj_hash(CFTypeRefObject *self) 399 { 400 /* XXXX Or should we use CFHash?? */ 401 return (int)self->ob_itself; 402 } 403 static int CFTypeRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 404 { 405 CFTypeRef itself; 406 char *kw[] = {"itself", 0}; 407 408 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 409 { 410 ((CFTypeRefObject *)_self)->ob_itself = itself; 411 return 0; 412 } 413 return -1; 414 } 415 416 #define CFTypeRefObj_tp_alloc PyType_GenericAlloc 417 418 static PyObject *CFTypeRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 419 { 420 PyObject *self; 421 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 422 ((CFTypeRefObject *)self)->ob_itself = NULL; 423 ((CFTypeRefObject *)self)->ob_freeit = CFRelease; 424 return self; 425 } 426 427 #define CFTypeRefObj_tp_free PyObject_Del 428 429 430 PyTypeObject CFTypeRef_Type = { 431 PyObject_HEAD_INIT(NULL) 432 0, /*ob_size*/ 433 "_CF.CFTypeRef", /*tp_name*/ 434 sizeof(CFTypeRefObject), /*tp_basicsize*/ 435 0, /*tp_itemsize*/ 436 /* methods */ 437 (destructor) CFTypeRefObj_dealloc, /*tp_dealloc*/ 438 0, /*tp_print*/ 439 (getattrfunc)0, /*tp_getattr*/ 440 (setattrfunc)0, /*tp_setattr*/ 441 (cmpfunc) CFTypeRefObj_compare, /*tp_compare*/ 442 (reprfunc) CFTypeRefObj_repr, /*tp_repr*/ 443 (PyNumberMethods *)0, /* tp_as_number */ 444 (PySequenceMethods *)0, /* tp_as_sequence */ 445 (PyMappingMethods *)0, /* tp_as_mapping */ 446 (hashfunc) CFTypeRefObj_hash, /*tp_hash*/ 447 0, /*tp_call*/ 448 0, /*tp_str*/ 449 PyObject_GenericGetAttr, /*tp_getattro*/ 450 PyObject_GenericSetAttr, /*tp_setattro */ 451 0, /*tp_as_buffer*/ 452 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 453 0, /*tp_doc*/ 454 0, /*tp_traverse*/ 455 0, /*tp_clear*/ 456 0, /*tp_richcompare*/ 457 0, /*tp_weaklistoffset*/ 458 0, /*tp_iter*/ 459 0, /*tp_iternext*/ 460 CFTypeRefObj_methods, /* tp_methods */ 461 0, /*tp_members*/ 462 CFTypeRefObj_getsetlist, /*tp_getset*/ 463 0, /*tp_base*/ 464 0, /*tp_dict*/ 465 0, /*tp_descr_get*/ 466 0, /*tp_descr_set*/ 467 0, /*tp_dictoffset*/ 468 CFTypeRefObj_tp_init, /* tp_init */ 469 CFTypeRefObj_tp_alloc, /* tp_alloc */ 470 CFTypeRefObj_tp_new, /* tp_new */ 471 CFTypeRefObj_tp_free, /* tp_free */ 1425 #define CFDataRefObj_getsetlist NULL 1426 1427 1428 static int CFDataRefObj_compare(CFDataRefObject *self, CFDataRefObject *other) 1429 { 1430 /* XXXX Or should we use CFEqual?? */ 1431 if ( self->ob_itself > other->ob_itself ) return 1; 1432 if ( self->ob_itself < other->ob_itself ) return -1; 1433 return 0; 1434 } 1435 1436 static PyObject * CFDataRefObj_repr(CFDataRefObject *self) 1437 { 1438 char buf[100]; 1439 sprintf(buf, "<CFDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 1440 return PyString_FromString(buf); 1441 } 1442 1443 static int CFDataRefObj_hash(CFDataRefObject *self) 1444 { 1445 /* XXXX Or should we use CFHash?? */ 1446 return (int)self->ob_itself; 1447 } 1448 static int CFDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 1449 { 1450 CFDataRef itself; 1451 char *kw[] = {"itself", 0}; 1452 1453 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDataRefObj_Convert, &itself)) 1454 { 1455 ((CFDataRefObject *)_self)->ob_itself = itself; 1456 return 0; 1457 } 1458 1459 /* Any CFTypeRef descendent is allowed as initializer too */ 1460 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 1461 { 1462 ((CFDataRefObject *)_self)->ob_itself = itself; 1463 return 0; 1464 } 1465 return -1; 1466 } 1467 1468 #define CFDataRefObj_tp_alloc PyType_GenericAlloc 1469 1470 static PyObject *CFDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 1471 { 1472 PyObject *self; 1473 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 1474 ((CFDataRefObject *)self)->ob_itself = NULL; 1475 ((CFDataRefObject *)self)->ob_freeit = CFRelease; 1476 return self; 1477 } 1478 1479 #define CFDataRefObj_tp_free PyObject_Del 1480 1481 1482 PyTypeObject CFDataRef_Type = { 1483 PyObject_HEAD_INIT(NULL) 1484 0, /*ob_size*/ 1485 "_CF.CFDataRef", /*tp_name*/ 1486 sizeof(CFDataRefObject), /*tp_basicsize*/ 1487 0, /*tp_itemsize*/ 1488 /* methods */ 1489 (destructor) CFDataRefObj_dealloc, /*tp_dealloc*/ 1490 0, /*tp_print*/ 1491 (getattrfunc)0, /*tp_getattr*/ 1492 (setattrfunc)0, /*tp_setattr*/ 1493 (cmpfunc) CFDataRefObj_compare, /*tp_compare*/ 1494 (reprfunc) CFDataRefObj_repr, /*tp_repr*/ 1495 (PyNumberMethods *)0, /* tp_as_number */ 1496 (PySequenceMethods *)0, /* tp_as_sequence */ 1497 (PyMappingMethods *)0, /* tp_as_mapping */ 1498 (hashfunc) CFDataRefObj_hash, /*tp_hash*/ 1499 0, /*tp_call*/ 1500 0, /*tp_str*/ 1501 PyObject_GenericGetAttr, /*tp_getattro*/ 1502 PyObject_GenericSetAttr, /*tp_setattro */ 1503 0, /*tp_as_buffer*/ 1504 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 1505 0, /*tp_doc*/ 1506 0, /*tp_traverse*/ 1507 0, /*tp_clear*/ 1508 0, /*tp_richcompare*/ 1509 0, /*tp_weaklistoffset*/ 1510 0, /*tp_iter*/ 1511 0, /*tp_iternext*/ 1512 CFDataRefObj_methods, /* tp_methods */ 1513 0, /*tp_members*/ 1514 CFDataRefObj_getsetlist, /*tp_getset*/ 1515 0, /*tp_base*/ 1516 0, /*tp_dict*/ 1517 0, /*tp_descr_get*/ 1518 0, /*tp_descr_set*/ 1519 0, /*tp_dictoffset*/ 1520 CFDataRefObj_tp_init, /* tp_init */ 1521 CFDataRefObj_tp_alloc, /* tp_alloc */ 1522 CFDataRefObj_tp_new, /* tp_new */ 1523 CFDataRefObj_tp_free, /* tp_free */ 472 1524 }; 473 1525 474 /* ------------------- End object type CFTypeRef -------------------- */ 475 476 477 /* --------------------- Object type CFArrayRef --------------------- */ 478 479 PyTypeObject CFArrayRef_Type; 480 481 #define CFArrayRefObj_Check(x) ((x)->ob_type == &CFArrayRef_Type || PyObject_TypeCheck((x), &CFArrayRef_Type)) 482 483 typedef struct CFArrayRefObject { 484 PyObject_HEAD 485 CFArrayRef ob_itself; 486 void (*ob_freeit)(CFTypeRef ptr); 487 } CFArrayRefObject; 488 489 PyObject *CFArrayRefObj_New(CFArrayRef itself) 490 { 491 CFArrayRefObject *it; 492 if (itself == NULL) 493 { 494 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 495 return NULL; 496 } 497 it = PyObject_NEW(CFArrayRefObject, &CFArrayRef_Type); 498 if (it == NULL) return NULL; 499 /* XXXX Should we tp_init or tp_new our basetype? */ 500 it->ob_itself = itself; 501 it->ob_freeit = CFRelease; 502 return (PyObject *)it; 503 } 504 505 int CFArrayRefObj_Convert(PyObject *v, CFArrayRef *p_itself) 506 { 507 508 if (v == Py_None) { *p_itself = NULL; return 1; } 509 /* Check for other CF objects here */ 510 511 if (!CFArrayRefObj_Check(v)) 512 { 513 PyErr_SetString(PyExc_TypeError, "CFArrayRef required"); 514 return 0; 515 } 516 *p_itself = ((CFArrayRefObject *)v)->ob_itself; 517 return 1; 518 } 519 520 static void CFArrayRefObj_dealloc(CFArrayRefObject *self) 521 { 522 if (self->ob_freeit && self->ob_itself) 523 { 524 self->ob_freeit((CFTypeRef)self->ob_itself); 525 self->ob_itself = NULL; 526 } 527 CFTypeRef_Type.tp_dealloc((PyObject *)self); 528 } 529 530 static PyObject *CFArrayRefObj_CFArrayCreateCopy(CFArrayRefObject *_self, PyObject *_args) 531 { 532 PyObject *_res = NULL; 533 CFArrayRef _rv; 534 if (!PyArg_ParseTuple(_args, "")) 535 return NULL; 536 _rv = CFArrayCreateCopy((CFAllocatorRef)NULL, 537 _self->ob_itself); 538 _res = Py_BuildValue("O&", 539 CFArrayRefObj_New, _rv); 540 return _res; 541 } 542 543 static PyObject *CFArrayRefObj_CFArrayGetCount(CFArrayRefObject *_self, PyObject *_args) 544 { 545 PyObject *_res = NULL; 546 CFIndex _rv; 547 #ifndef CFArrayGetCount 548 PyMac_PRECHECK(CFArrayGetCount); 549 #endif 550 if (!PyArg_ParseTuple(_args, "")) 551 return NULL; 552 _rv = CFArrayGetCount(_self->ob_itself); 553 _res = Py_BuildValue("l", 554 _rv); 555 return _res; 556 } 557 558 static PyObject *CFArrayRefObj_CFStringCreateByCombiningStrings(CFArrayRefObject *_self, PyObject *_args) 559 { 560 PyObject *_res = NULL; 561 CFStringRef _rv; 562 CFStringRef separatorString; 563 if (!PyArg_ParseTuple(_args, "O&", 564 CFStringRefObj_Convert, &separatorString)) 565 return NULL; 566 _rv = CFStringCreateByCombiningStrings((CFAllocatorRef)NULL, 567 _self->ob_itself, 568 separatorString); 569 _res = Py_BuildValue("O&", 570 CFStringRefObj_New, _rv); 571 return _res; 572 } 573 574 static PyMethodDef CFArrayRefObj_methods[] = { 575 {"CFArrayCreateCopy", (PyCFunction)CFArrayRefObj_CFArrayCreateCopy, 1, 576 PyDoc_STR("() -> (CFArrayRef _rv)")}, 577 {"CFArrayGetCount", (PyCFunction)CFArrayRefObj_CFArrayGetCount, 1, 578 PyDoc_STR("() -> (CFIndex _rv)")}, 579 {"CFStringCreateByCombiningStrings", (PyCFunction)CFArrayRefObj_CFStringCreateByCombiningStrings, 1, 580 PyDoc_STR("(CFStringRef separatorString) -> (CFStringRef _rv)")}, 581 {NULL, NULL, 0} 1526 /* ------------------- End object type CFDataRef -------------------- */ 1527 1528 1529 /* ------------------ Object type CFMutableDataRef ------------------ */ 1530 1531 PyTypeObject CFMutableDataRef_Type; 1532 1533 #define CFMutableDataRefObj_Check(x) ((x)->ob_type == &CFMutableDataRef_Type || PyObject_TypeCheck((x), &CFMutableDataRef_Type)) 1534 1535 typedef struct CFMutableDataRefObject { 1536 PyObject_HEAD 1537 CFMutableDataRef ob_itself; 1538 void (*ob_freeit)(CFTypeRef ptr); 1539 } CFMutableDataRefObject; 1540 1541 PyObject *CFMutableDataRefObj_New(CFMutableDataRef itself) 1542 { 1543 CFMutableDataRefObject *it; 1544 if (itself == NULL) 1545 { 1546 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 1547 return NULL; 1548 } 1549 it = PyObject_NEW(CFMutableDataRefObject, &CFMutableDataRef_Type); 1550 if (it == NULL) return NULL; 1551 /* XXXX Should we tp_init or tp_new our basetype? */ 1552 it->ob_itself = itself; 1553 it->ob_freeit = CFRelease; 1554 return (PyObject *)it; 1555 } 1556 1557 int CFMutableDataRefObj_Convert(PyObject *v, CFMutableDataRef *p_itself) 1558 { 1559 1560 if (v == Py_None) { *p_itself = NULL; return 1; } 1561 /* Check for other CF objects here */ 1562 1563 if (!CFMutableDataRefObj_Check(v)) 1564 { 1565 PyErr_SetString(PyExc_TypeError, "CFMutableDataRef required"); 1566 return 0; 1567 } 1568 *p_itself = ((CFMutableDataRefObject *)v)->ob_itself; 1569 return 1; 1570 } 1571 1572 static void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self) 1573 { 1574 if (self->ob_freeit && self->ob_itself) 1575 { 1576 self->ob_freeit((CFTypeRef)self->ob_itself); 1577 self->ob_itself = NULL; 1578 } 1579 CFDataRef_Type.tp_dealloc((PyObject *)self); 1580 } 1581 1582 static PyObject *CFMutableDataRefObj_CFDataSetLength(CFMutableDataRefObject *_self, PyObject *_args) 1583 { 1584 PyObject *_res = NULL; 1585 CFIndex length; 1586 #ifndef CFDataSetLength 1587 PyMac_PRECHECK(CFDataSetLength); 1588 #endif 1589 if (!PyArg_ParseTuple(_args, "l", 1590 &length)) 1591 return NULL; 1592 CFDataSetLength(_self->ob_itself, 1593 length); 1594 Py_INCREF(Py_None); 1595 _res = Py_None; 1596 return _res; 1597 } 1598 1599 static PyObject *CFMutableDataRefObj_CFDataIncreaseLength(CFMutableDataRefObject *_self, PyObject *_args) 1600 { 1601 PyObject *_res = NULL; 1602 CFIndex extraLength; 1603 #ifndef CFDataIncreaseLength 1604 PyMac_PRECHECK(CFDataIncreaseLength); 1605 #endif 1606 if (!PyArg_ParseTuple(_args, "l", 1607 &extraLength)) 1608 return NULL; 1609 CFDataIncreaseLength(_self->ob_itself, 1610 extraLength); 1611 Py_INCREF(Py_None); 1612 _res = Py_None; 1613 return _res; 1614 } 1615 1616 static PyObject *CFMutableDataRefObj_CFDataAppendBytes(CFMutableDataRefObject *_self, PyObject *_args) 1617 { 1618 PyObject *_res = NULL; 1619 unsigned char *bytes__in__; 1620 long bytes__len__; 1621 int bytes__in_len__; 1622 #ifndef CFDataAppendBytes 1623 PyMac_PRECHECK(CFDataAppendBytes); 1624 #endif 1625 if (!PyArg_ParseTuple(_args, "s#", 1626 &bytes__in__, &bytes__in_len__)) 1627 return NULL; 1628 bytes__len__ = bytes__in_len__; 1629 CFDataAppendBytes(_self->ob_itself, 1630 bytes__in__, bytes__len__); 1631 Py_INCREF(Py_None); 1632 _res = Py_None; 1633 return _res; 1634 } 1635 1636 static PyObject *CFMutableDataRefObj_CFDataReplaceBytes(CFMutableDataRefObject *_self, PyObject *_args) 1637 { 1638 PyObject *_res = NULL; 1639 CFRange range; 1640 unsigned char *newBytes__in__; 1641 long newBytes__len__; 1642 int newBytes__in_len__; 1643 #ifndef CFDataReplaceBytes 1644 PyMac_PRECHECK(CFDataReplaceBytes); 1645 #endif 1646 if (!PyArg_ParseTuple(_args, "O&s#", 1647 CFRange_Convert, &range, 1648 &newBytes__in__, &newBytes__in_len__)) 1649 return NULL; 1650 newBytes__len__ = newBytes__in_len__; 1651 CFDataReplaceBytes(_self->ob_itself, 1652 range, 1653 newBytes__in__, newBytes__len__); 1654 Py_INCREF(Py_None); 1655 _res = Py_None; 1656 return _res; 1657 } 1658 1659 static PyObject *CFMutableDataRefObj_CFDataDeleteBytes(CFMutableDataRefObject *_self, PyObject *_args) 1660 { 1661 PyObject *_res = NULL; 1662 CFRange range; 1663 #ifndef CFDataDeleteBytes 1664 PyMac_PRECHECK(CFDataDeleteBytes); 1665 #endif 1666 if (!PyArg_ParseTuple(_args, "O&", 1667 CFRange_Convert, &range)) 1668 return NULL; 1669 CFDataDeleteBytes(_self->ob_itself, 1670 range); 1671 Py_INCREF(Py_None); 1672 _res = Py_None; 1673 return _res; 1674 } 1675 1676 static PyMethodDef CFMutableDataRefObj_methods[] = { 1677 {"CFDataSetLength", (PyCFunction)CFMutableDataRefObj_CFDataSetLength, 1, 1678 PyDoc_STR("(CFIndex length) -> None")}, 1679 {"CFDataIncreaseLength", (PyCFunction)CFMutableDataRefObj_CFDataIncreaseLength, 1, 1680 PyDoc_STR("(CFIndex extraLength) -> None")}, 1681 {"CFDataAppendBytes", (PyCFunction)CFMutableDataRefObj_CFDataAppendBytes, 1, 1682 PyDoc_STR("(Buffer bytes) -> None")}, 1683 {"CFDataReplaceBytes", (PyCFunction)CFMutableDataRefObj_CFDataReplaceBytes, 1, 1684 PyDoc_STR("(CFRange range, Buffer newBytes) -> None")}, 1685 {"CFDataDeleteBytes", (PyCFunction)CFMutableDataRefObj_CFDataDeleteBytes, 1, 1686 PyDoc_STR("(CFRange range) -> None")}, 1687 {NULL, NULL, 0} 582 1688 }; 583 1689 584 #define CF ArrayRefObj_getsetlist NULL585 586 587 static int CF ArrayRefObj_compare(CFArrayRefObject *self, CFArrayRefObject *other)588 { 589 590 591 592 593 } 594 595 static PyObject * CF ArrayRefObj_repr(CFArrayRefObject *self)596 { 597 598 sprintf(buf, "<CFArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);599 600 } 601 602 static int CF ArrayRefObj_hash(CFArrayRefObject *self)603 { 604 605 606 } 607 static int CF ArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)608 { 609 CFArrayRef itself;610 611 612 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFArrayRefObj_Convert, &itself))613 614 ((CFArrayRefObject *)_self)->ob_itself = itself;615 616 617 618 619 620 621 ((CFArrayRefObject *)_self)->ob_itself = itself;622 623 624 625 } 626 627 #define CF ArrayRefObj_tp_alloc PyType_GenericAlloc628 629 static PyObject *CF ArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)630 { 631 632 633 ((CFArrayRefObject *)self)->ob_itself = NULL;634 ((CFArrayRefObject *)self)->ob_freeit = CFRelease;635 636 } 637 638 #define CF ArrayRefObj_tp_free PyObject_Del639 640 641 PyTypeObject CF ArrayRef_Type = {642 643 644 "_CF.CFArrayRef", /*tp_name*/645 sizeof(CFArrayRefObject), /*tp_basicsize*/646 647 648 (destructor) CFArrayRefObj_dealloc, /*tp_dealloc*/649 650 651 652 (cmpfunc) CFArrayRefObj_compare, /*tp_compare*/653 (reprfunc) CFArrayRefObj_repr, /*tp_repr*/654 655 656 657 (hashfunc) CFArrayRefObj_hash, /*tp_hash*/658 659 660 661 662 663 664 665 666 667 668 669 670 671 CFArrayRefObj_methods, /* tp_methods */672 673 CFArrayRefObj_getsetlist, /*tp_getset*/674 675 676 677 678 679 CFArrayRefObj_tp_init, /* tp_init */680 CFArrayRefObj_tp_alloc, /* tp_alloc */681 CFArrayRefObj_tp_new, /* tp_new */682 CFArrayRefObj_tp_free, /* tp_free */1690 #define CFMutableDataRefObj_getsetlist NULL 1691 1692 1693 static int CFMutableDataRefObj_compare(CFMutableDataRefObject *self, CFMutableDataRefObject *other) 1694 { 1695 /* XXXX Or should we use CFEqual?? */ 1696 if ( self->ob_itself > other->ob_itself ) return 1; 1697 if ( self->ob_itself < other->ob_itself ) return -1; 1698 return 0; 1699 } 1700 1701 static PyObject * CFMutableDataRefObj_repr(CFMutableDataRefObject *self) 1702 { 1703 char buf[100]; 1704 sprintf(buf, "<CFMutableDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 1705 return PyString_FromString(buf); 1706 } 1707 1708 static int CFMutableDataRefObj_hash(CFMutableDataRefObject *self) 1709 { 1710 /* XXXX Or should we use CFHash?? */ 1711 return (int)self->ob_itself; 1712 } 1713 static int CFMutableDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 1714 { 1715 CFMutableDataRef itself; 1716 char *kw[] = {"itself", 0}; 1717 1718 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDataRefObj_Convert, &itself)) 1719 { 1720 ((CFMutableDataRefObject *)_self)->ob_itself = itself; 1721 return 0; 1722 } 1723 1724 /* Any CFTypeRef descendent is allowed as initializer too */ 1725 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 1726 { 1727 ((CFMutableDataRefObject *)_self)->ob_itself = itself; 1728 return 0; 1729 } 1730 return -1; 1731 } 1732 1733 #define CFMutableDataRefObj_tp_alloc PyType_GenericAlloc 1734 1735 static PyObject *CFMutableDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 1736 { 1737 PyObject *self; 1738 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 1739 ((CFMutableDataRefObject *)self)->ob_itself = NULL; 1740 ((CFMutableDataRefObject *)self)->ob_freeit = CFRelease; 1741 return self; 1742 } 1743 1744 #define CFMutableDataRefObj_tp_free PyObject_Del 1745 1746 1747 PyTypeObject CFMutableDataRef_Type = { 1748 PyObject_HEAD_INIT(NULL) 1749 0, /*ob_size*/ 1750 "_CF.CFMutableDataRef", /*tp_name*/ 1751 sizeof(CFMutableDataRefObject), /*tp_basicsize*/ 1752 0, /*tp_itemsize*/ 1753 /* methods */ 1754 (destructor) CFMutableDataRefObj_dealloc, /*tp_dealloc*/ 1755 0, /*tp_print*/ 1756 (getattrfunc)0, /*tp_getattr*/ 1757 (setattrfunc)0, /*tp_setattr*/ 1758 (cmpfunc) CFMutableDataRefObj_compare, /*tp_compare*/ 1759 (reprfunc) CFMutableDataRefObj_repr, /*tp_repr*/ 1760 (PyNumberMethods *)0, /* tp_as_number */ 1761 (PySequenceMethods *)0, /* tp_as_sequence */ 1762 (PyMappingMethods *)0, /* tp_as_mapping */ 1763 (hashfunc) CFMutableDataRefObj_hash, /*tp_hash*/ 1764 0, /*tp_call*/ 1765 0, /*tp_str*/ 1766 PyObject_GenericGetAttr, /*tp_getattro*/ 1767 PyObject_GenericSetAttr, /*tp_setattro */ 1768 0, /*tp_as_buffer*/ 1769 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 1770 0, /*tp_doc*/ 1771 0, /*tp_traverse*/ 1772 0, /*tp_clear*/ 1773 0, /*tp_richcompare*/ 1774 0, /*tp_weaklistoffset*/ 1775 0, /*tp_iter*/ 1776 0, /*tp_iternext*/ 1777 CFMutableDataRefObj_methods, /* tp_methods */ 1778 0, /*tp_members*/ 1779 CFMutableDataRefObj_getsetlist, /*tp_getset*/ 1780 0, /*tp_base*/ 1781 0, /*tp_dict*/ 1782 0, /*tp_descr_get*/ 1783 0, /*tp_descr_set*/ 1784 0, /*tp_dictoffset*/ 1785 CFMutableDataRefObj_tp_init, /* tp_init */ 1786 CFMutableDataRefObj_tp_alloc, /* tp_alloc */ 1787 CFMutableDataRefObj_tp_new, /* tp_new */ 1788 CFMutableDataRefObj_tp_free, /* tp_free */ 683 1789 }; 684 1790 685 /* ------------------- End object type CFArrayRef ------------------- */ 686 687 688 /* ----------------- Object type CFMutableArrayRef ------------------ */ 689 690 PyTypeObject CFMutableArrayRef_Type; 691 692 #define CFMutableArrayRefObj_Check(x) ((x)->ob_type == &CFMutableArrayRef_Type || PyObject_TypeCheck((x), &CFMutableArrayRef_Type)) 693 694 typedef struct CFMutableArrayRefObject { 695 PyObject_HEAD 696 CFMutableArrayRef ob_itself; 697 void (*ob_freeit)(CFTypeRef ptr); 698 } CFMutableArrayRefObject; 699 700 PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef itself) 701 { 702 CFMutableArrayRefObject *it; 703 if (itself == NULL) 704 { 705 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 706 return NULL; 707 } 708 it = PyObject_NEW(CFMutableArrayRefObject, &CFMutableArrayRef_Type); 709 if (it == NULL) return NULL; 710 /* XXXX Should we tp_init or tp_new our basetype? */ 711 it->ob_itself = itself; 712 it->ob_freeit = CFRelease; 713 return (PyObject *)it; 714 } 715 716 int CFMutableArrayRefObj_Convert(PyObject *v, CFMutableArrayRef *p_itself) 717 { 718 719 if (v == Py_None) { *p_itself = NULL; return 1; } 720 /* Check for other CF objects here */ 721 722 if (!CFMutableArrayRefObj_Check(v)) 723 { 724 PyErr_SetString(PyExc_TypeError, "CFMutableArrayRef required"); 725 return 0; 726 } 727 *p_itself = ((CFMutableArrayRefObject *)v)->ob_itself; 728 return 1; 729 } 730 731 static void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self) 732 { 733 if (self->ob_freeit && self->ob_itself) 734 { 735 self->ob_freeit((CFTypeRef)self->ob_itself); 736 self->ob_itself = NULL; 737 } 738 CFArrayRef_Type.tp_dealloc((PyObject *)self); 739 } 740 741 static PyObject *CFMutableArrayRefObj_CFArrayRemoveValueAtIndex(CFMutableArrayRefObject *_self, PyObject *_args) 742 { 743 PyObject *_res = NULL; 744 CFIndex idx; 745 #ifndef CFArrayRemoveValueAtIndex 746 PyMac_PRECHECK(CFArrayRemoveValueAtIndex); 747 #endif 748 if (!PyArg_ParseTuple(_args, "l", 749 &idx)) 750 return NULL; 751 CFArrayRemoveValueAtIndex(_self->ob_itself, 752 idx); 753 Py_INCREF(Py_None); 754 _res = Py_None; 755 return _res; 756 } 757 758 static PyObject *CFMutableArrayRefObj_CFArrayRemoveAllValues(CFMutableArrayRefObject *_self, PyObject *_args) 759 { 760 PyObject *_res = NULL; 761 #ifndef CFArrayRemoveAllValues 762 PyMac_PRECHECK(CFArrayRemoveAllValues); 763 #endif 764 if (!PyArg_ParseTuple(_args, "")) 765 return NULL; 766 CFArrayRemoveAllValues(_self->ob_itself); 767 Py_INCREF(Py_None); 768 _res = Py_None; 769 return _res; 770 } 771 772 static PyObject *CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices(CFMutableArrayRefObject *_self, PyObject *_args) 773 { 774 PyObject *_res = NULL; 775 CFIndex idx1; 776 CFIndex idx2; 777 #ifndef CFArrayExchangeValuesAtIndices 778 PyMac_PRECHECK(CFArrayExchangeValuesAtIndices); 779 #endif 780 if (!PyArg_ParseTuple(_args, "ll", 781 &idx1, 782 &idx2)) 783 return NULL; 784 CFArrayExchangeValuesAtIndices(_self->ob_itself, 785 idx1, 786 idx2); 787 Py_INCREF(Py_None); 788 _res = Py_None; 789 return _res; 790 } 791 792 static PyObject *CFMutableArrayRefObj_CFArrayAppendArray(CFMutableArrayRefObject *_self, PyObject *_args) 793 { 794 PyObject *_res = NULL; 795 CFArrayRef otherArray; 796 CFRange otherRange; 797 #ifndef CFArrayAppendArray 798 PyMac_PRECHECK(CFArrayAppendArray); 799 #endif 800 if (!PyArg_ParseTuple(_args, "O&O&", 801 CFArrayRefObj_Convert, &otherArray, 802 CFRange_Convert, &otherRange)) 803 return NULL; 804 CFArrayAppendArray(_self->ob_itself, 805 otherArray, 806 otherRange); 807 Py_INCREF(Py_None); 808 _res = Py_None; 809 return _res; 810 } 811 812 static PyMethodDef CFMutableArrayRefObj_methods[] = { 813 {"CFArrayRemoveValueAtIndex", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveValueAtIndex, 1, 814 PyDoc_STR("(CFIndex idx) -> None")}, 815 {"CFArrayRemoveAllValues", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveAllValues, 1, 816 PyDoc_STR("() -> None")}, 817 {"CFArrayExchangeValuesAtIndices", (PyCFunction)CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices, 1, 818 PyDoc_STR("(CFIndex idx1, CFIndex idx2) -> None")}, 819 {"CFArrayAppendArray", (PyCFunction)CFMutableArrayRefObj_CFArrayAppendArray, 1, 820 PyDoc_STR("(CFArrayRef otherArray, CFRange otherRange) -> None")}, 821 {NULL, NULL, 0} 1791 /* ---------------- End object type CFMutableDataRef ---------------- */ 1792 1793 1794 /* -------------------- Object type CFStringRef --------------------- */ 1795 1796 PyTypeObject CFStringRef_Type; 1797 1798 #define CFStringRefObj_Check(x) ((x)->ob_type == &CFStringRef_Type || PyObject_TypeCheck((x), &CFStringRef_Type)) 1799 1800 typedef struct CFStringRefObject { 1801 PyObject_HEAD 1802 CFStringRef ob_itself; 1803 void (*ob_freeit)(CFTypeRef ptr); 1804 } CFStringRefObject; 1805 1806 PyObject *CFStringRefObj_New(CFStringRef itself) 1807 { 1808 CFStringRefObject *it; 1809 if (itself == NULL) 1810 { 1811 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 1812 return NULL; 1813 } 1814 it = PyObject_NEW(CFStringRefObject, &CFStringRef_Type); 1815 if (it == NULL) return NULL; 1816 /* XXXX Should we tp_init or tp_new our basetype? */ 1817 it->ob_itself = itself; 1818 it->ob_freeit = CFRelease; 1819 return (PyObject *)it; 1820 } 1821 1822 int CFStringRefObj_Convert(PyObject *v, CFStringRef *p_itself) 1823 { 1824 1825 if (v == Py_None) { *p_itself = NULL; return 1; } 1826 if (PyString_Check(v)) { 1827 char *cStr; 1828 if (!PyArg_Parse(v, "es", "ascii", &cStr)) 1829 return 0; 1830 *p_itself = CFStringCreateWithCString((CFAllocatorRef)NULL, cStr, kCFStringEncodingASCII); 1831 PyMem_Free(cStr); 1832 return 1; 1833 } 1834 if (PyUnicode_Check(v)) { 1835 /* We use the CF types here, if Python was configured differently that will give an error */ 1836 CFIndex size = PyUnicode_GetSize(v); 1837 UniChar *unichars = PyUnicode_AsUnicode(v); 1838 if (!unichars) return 0; 1839 *p_itself = CFStringCreateWithCharacters((CFAllocatorRef)NULL, unichars, size); 1840 return 1; 1841 } 1842 1843 1844 if (!CFStringRefObj_Check(v)) 1845 { 1846 PyErr_SetString(PyExc_TypeError, "CFStringRef required"); 1847 return 0; 1848 } 1849 *p_itself = ((CFStringRefObject *)v)->ob_itself; 1850 return 1; 1851 } 1852 1853 static void CFStringRefObj_dealloc(CFStringRefObject *self) 1854 { 1855 if (self->ob_freeit && self->ob_itself) 1856 { 1857 self->ob_freeit((CFTypeRef)self->ob_itself); 1858 self->ob_itself = NULL; 1859 } 1860 CFTypeRef_Type.tp_dealloc((PyObject *)self); 1861 } 1862 1863 static PyObject *CFStringRefObj_CFStringCreateWithSubstring(CFStringRefObject *_self, PyObject *_args) 1864 { 1865 PyObject *_res = NULL; 1866 CFStringRef _rv; 1867 CFRange range; 1868 if (!PyArg_ParseTuple(_args, "O&", 1869 CFRange_Convert, &range)) 1870 return NULL; 1871 _rv = CFStringCreateWithSubstring((CFAllocatorRef)NULL, 1872 _self->ob_itself, 1873 range); 1874 _res = Py_BuildValue("O&", 1875 CFStringRefObj_New, _rv); 1876 return _res; 1877 } 1878 1879 static PyObject *CFStringRefObj_CFStringCreateCopy(CFStringRefObject *_self, PyObject *_args) 1880 { 1881 PyObject *_res = NULL; 1882 CFStringRef _rv; 1883 if (!PyArg_ParseTuple(_args, "")) 1884 return NULL; 1885 _rv = CFStringCreateCopy((CFAllocatorRef)NULL, 1886 _self->ob_itself); 1887 _res = Py_BuildValue("O&", 1888 CFStringRefObj_New, _rv); 1889 return _res; 1890 } 1891 1892 static PyObject *CFStringRefObj_CFStringGetLength(CFStringRefObject *_self, PyObject *_args) 1893 { 1894 PyObject *_res = NULL; 1895 CFIndex _rv; 1896 #ifndef CFStringGetLength 1897 PyMac_PRECHECK(CFStringGetLength); 1898 #endif 1899 if (!PyArg_ParseTuple(_args, "")) 1900 return NULL; 1901 _rv = CFStringGetLength(_self->ob_itself); 1902 _res = Py_BuildValue("l", 1903 _rv); 1904 return _res; 1905 } 1906 1907 static PyObject *CFStringRefObj_CFStringGetBytes(CFStringRefObject *_self, PyObject *_args) 1908 { 1909 PyObject *_res = NULL; 1910 CFIndex _rv; 1911 CFRange range; 1912 CFStringEncoding encoding; 1913 UInt8 lossByte; 1914 Boolean isExternalRepresentation; 1915 UInt8 buffer; 1916 CFIndex maxBufLen; 1917 CFIndex usedBufLen; 1918 #ifndef CFStringGetBytes 1919 PyMac_PRECHECK(CFStringGetBytes); 1920 #endif 1921 if (!PyArg_ParseTuple(_args, "O&lbll", 1922 CFRange_Convert, &range, 1923 &encoding, 1924 &lossByte, 1925 &isExternalRepresentation, 1926 &maxBufLen)) 1927 return NULL; 1928 _rv = CFStringGetBytes(_self->ob_itself, 1929 range, 1930 encoding, 1931 lossByte, 1932 isExternalRepresentation, 1933 &buffer, 1934 maxBufLen, 1935 &usedBufLen); 1936 _res = Py_BuildValue("lbl", 1937 _rv, 1938 buffer, 1939 usedBufLen); 1940 return _res; 1941 } 1942 1943 static PyObject *CFStringRefObj_CFStringCreateExternalRepresentation(CFStringRefObject *_self, PyObject *_args) 1944 { 1945 PyObject *_res = NULL; 1946 CFDataRef _rv; 1947 CFStringEncoding encoding; 1948 UInt8 lossByte; 1949 if (!PyArg_ParseTuple(_args, "lb", 1950 &encoding, 1951 &lossByte)) 1952 return NULL; 1953 _rv = CFStringCreateExternalRepresentation((CFAllocatorRef)NULL, 1954 _self->ob_itself, 1955 encoding, 1956 lossByte); 1957 _res = Py_BuildValue("O&", 1958 CFDataRefObj_New, _rv); 1959 return _res; 1960 } 1961 1962 static PyObject *CFStringRefObj_CFStringGetSmallestEncoding(CFStringRefObject *_self, PyObject *_args) 1963 { 1964 PyObject *_res = NULL; 1965 CFStringEncoding _rv; 1966 #ifndef CFStringGetSmallestEncoding 1967 PyMac_PRECHECK(CFStringGetSmallestEncoding); 1968 #endif 1969 if (!PyArg_ParseTuple(_args, "")) 1970 return NULL; 1971 _rv = CFStringGetSmallestEncoding(_self->ob_itself); 1972 _res = Py_BuildValue("l", 1973 _rv); 1974 return _res; 1975 } 1976 1977 static PyObject *CFStringRefObj_CFStringGetFastestEncoding(CFStringRefObject *_self, PyObject *_args) 1978 { 1979 PyObject *_res = NULL; 1980 CFStringEncoding _rv; 1981 #ifndef CFStringGetFastestEncoding 1982 PyMac_PRECHECK(CFStringGetFastestEncoding); 1983 #endif 1984 if (!PyArg_ParseTuple(_args, "")) 1985 return NULL; 1986 _rv = CFStringGetFastestEncoding(_self->ob_itself); 1987 _res = Py_BuildValue("l", 1988 _rv); 1989 return _res; 1990 } 1991 1992 static PyObject *CFStringRefObj_CFStringCompareWithOptions(CFStringRefObject *_self, PyObject *_args) 1993 { 1994 PyObject *_res = NULL; 1995 CFComparisonResult _rv; 1996 CFStringRef theString2; 1997 CFRange rangeToCompare; 1998 CFOptionFlags compareOptions; 1999 #ifndef CFStringCompareWithOptions 2000 PyMac_PRECHECK(CFStringCompareWithOptions); 2001 #endif 2002 if (!PyArg_ParseTuple(_args, "O&O&l", 2003 CFStringRefObj_Convert, &theString2, 2004 CFRange_Convert, &rangeToCompare, 2005 &compareOptions)) 2006 return NULL; 2007 _rv = CFStringCompareWithOptions(_self->ob_itself, 2008 theString2, 2009 rangeToCompare, 2010 compareOptions); 2011 _res = Py_BuildValue("l", 2012 _rv); 2013 return _res; 2014 } 2015 2016 static PyObject *CFStringRefObj_CFStringCompare(CFStringRefObject *_self, PyObject *_args) 2017 { 2018 PyObject *_res = NULL; 2019 CFComparisonResult _rv; 2020 CFStringRef theString2; 2021 CFOptionFlags compareOptions; 2022 #ifndef CFStringCompare 2023 PyMac_PRECHECK(CFStringCompare); 2024 #endif 2025 if (!PyArg_ParseTuple(_args, "O&l", 2026 CFStringRefObj_Convert, &theString2, 2027 &compareOptions)) 2028 return NULL; 2029 _rv = CFStringCompare(_self->ob_itself, 2030 theString2, 2031 compareOptions); 2032 _res = Py_BuildValue("l", 2033 _rv); 2034 return _res; 2035 } 2036 2037 static PyObject *CFStringRefObj_CFStringFindWithOptions(CFStringRefObject *_self, PyObject *_args) 2038 { 2039 PyObject *_res = NULL; 2040 Boolean _rv; 2041 CFStringRef stringToFind; 2042 CFRange rangeToSearch; 2043 CFOptionFlags searchOptions; 2044 CFRange result; 2045 #ifndef CFStringFindWithOptions 2046 PyMac_PRECHECK(CFStringFindWithOptions); 2047 #endif 2048 if (!PyArg_ParseTuple(_args, "O&O&l", 2049 CFStringRefObj_Convert, &stringToFind, 2050 CFRange_Convert, &rangeToSearch, 2051 &searchOptions)) 2052 return NULL; 2053 _rv = CFStringFindWithOptions(_self->ob_itself, 2054 stringToFind, 2055 rangeToSearch, 2056 searchOptions, 2057 &result); 2058 _res = Py_BuildValue("lO&", 2059 _rv, 2060 CFRange_New, result); 2061 return _res; 2062 } 2063 2064 static PyObject *CFStringRefObj_CFStringCreateArrayWithFindResults(CFStringRefObject *_self, PyObject *_args) 2065 { 2066 PyObject *_res = NULL; 2067 CFArrayRef _rv; 2068 CFStringRef stringToFind; 2069 CFRange rangeToSearch; 2070 CFOptionFlags compareOptions; 2071 if (!PyArg_ParseTuple(_args, "O&O&l", 2072 CFStringRefObj_Convert, &stringToFind, 2073 CFRange_Convert, &rangeToSearch, 2074 &compareOptions)) 2075 return NULL; 2076 _rv = CFStringCreateArrayWithFindResults((CFAllocatorRef)NULL, 2077 _self->ob_itself, 2078 stringToFind, 2079 rangeToSearch, 2080 compareOptions); 2081 _res = Py_BuildValue("O&", 2082 CFArrayRefObj_New, _rv); 2083 return _res; 2084 } 2085 2086 static PyObject *CFStringRefObj_CFStringFind(CFStringRefObject *_self, PyObject *_args) 2087 { 2088 PyObject *_res = NULL; 2089 CFRange _rv; 2090 CFStringRef stringToFind; 2091 CFOptionFlags compareOptions; 2092 #ifndef CFStringFind 2093 PyMac_PRECHECK(CFStringFind); 2094 #endif 2095 if (!PyArg_ParseTuple(_args, "O&l", 2096 CFStringRefObj_Convert, &stringToFind, 2097 &compareOptions)) 2098 return NULL; 2099 _rv = CFStringFind(_self->ob_itself, 2100 stringToFind, 2101 compareOptions); 2102 _res = Py_BuildValue("O&", 2103 CFRange_New, _rv); 2104 return _res; 2105 } 2106 2107 static PyObject *CFStringRefObj_CFStringHasPrefix(CFStringRefObject *_self, PyObject *_args) 2108 { 2109 PyObject *_res = NULL; 2110 Boolean _rv; 2111 CFStringRef prefix; 2112 #ifndef CFStringHasPrefix 2113 PyMac_PRECHECK(CFStringHasPrefix); 2114 #endif 2115 if (!PyArg_ParseTuple(_args, "O&", 2116 CFStringRefObj_Convert, &prefix)) 2117 return NULL; 2118 _rv = CFStringHasPrefix(_self->ob_itself, 2119 prefix); 2120 _res = Py_BuildValue("l", 2121 _rv); 2122 return _res; 2123 } 2124 2125 static PyObject *CFStringRefObj_CFStringHasSuffix(CFStringRefObject *_self, PyObject *_args) 2126 { 2127 PyObject *_res = NULL; 2128 Boolean _rv; 2129 CFStringRef suffix; 2130 #ifndef CFStringHasSuffix 2131 PyMac_PRECHECK(CFStringHasSuffix); 2132 #endif 2133 if (!PyArg_ParseTuple(_args, "O&", 2134 CFStringRefObj_Convert, &suffix)) 2135 return NULL; 2136 _rv = CFStringHasSuffix(_self->ob_itself, 2137 suffix); 2138 _res = Py_BuildValue("l", 2139 _rv); 2140 return _res; 2141 } 2142 2143 static PyObject *CFStringRefObj_CFStringGetLineBounds(CFStringRefObject *_self, PyObject *_args) 2144 { 2145 PyObject *_res = NULL; 2146 CFRange range; 2147 CFIndex lineBeginIndex; 2148 CFIndex lineEndIndex; 2149 CFIndex contentsEndIndex; 2150 #ifndef CFStringGetLineBounds 2151 PyMac_PRECHECK(CFStringGetLineBounds); 2152 #endif 2153 if (!PyArg_ParseTuple(_args, "O&", 2154 CFRange_Convert, &range)) 2155 return NULL; 2156 CFStringGetLineBounds(_self->ob_itself, 2157 range, 2158 &lineBeginIndex, 2159 &lineEndIndex, 2160 &contentsEndIndex); 2161 _res = Py_BuildValue("lll", 2162 lineBeginIndex, 2163 lineEndIndex, 2164 contentsEndIndex); 2165 return _res; 2166 } 2167 2168 static PyObject *CFStringRefObj_CFStringCreateArrayBySeparatingStrings(CFStringRefObject *_self, PyObject *_args) 2169 { 2170 PyObject *_res = NULL; 2171 CFArrayRef _rv; 2172 CFStringRef separatorString; 2173 if (!PyArg_ParseTuple(_args, "O&", 2174 CFStringRefObj_Convert, &separatorString)) 2175 return NULL; 2176 _rv = CFStringCreateArrayBySeparatingStrings((CFAllocatorRef)NULL, 2177 _self->ob_itself, 2178 separatorString); 2179 _res = Py_BuildValue("O&", 2180 CFArrayRefObj_New, _rv); 2181 return _res; 2182 } 2183 2184 static PyObject *CFStringRefObj_CFStringGetIntValue(CFStringRefObject *_self, PyObject *_args) 2185 { 2186 PyObject *_res = NULL; 2187 SInt32 _rv; 2188 #ifndef CFStringGetIntValue 2189 PyMac_PRECHECK(CFStringGetIntValue); 2190 #endif 2191 if (!PyArg_ParseTuple(_args, "")) 2192 return NULL; 2193 _rv = CFStringGetIntValue(_self->ob_itself); 2194 _res = Py_BuildValue("l", 2195 _rv); 2196 return _res; 2197 } 2198 2199 static PyObject *CFStringRefObj_CFStringGetDoubleValue(CFStringRefObject *_self, PyObject *_args) 2200 { 2201 PyObject *_res = NULL; 2202 double _rv; 2203 #ifndef CFStringGetDoubleValue 2204 PyMac_PRECHECK(CFStringGetDoubleValue); 2205 #endif 2206 if (!PyArg_ParseTuple(_args, "")) 2207 return NULL; 2208 _rv = CFStringGetDoubleValue(_self->ob_itself); 2209 _res = Py_BuildValue("d", 2210 _rv); 2211 return _res; 2212 } 2213 2214 static PyObject *CFStringRefObj_CFStringConvertIANACharSetNameToEncoding(CFStringRefObject *_self, PyObject *_args) 2215 { 2216 PyObject *_res = NULL; 2217 CFStringEncoding _rv; 2218 #ifndef CFStringConvertIANACharSetNameToEncoding 2219 PyMac_PRECHECK(CFStringConvertIANACharSetNameToEncoding); 2220 #endif 2221 if (!PyArg_ParseTuple(_args, "")) 2222 return NULL; 2223 _rv = CFStringConvertIANACharSetNameToEncoding(_self->ob_itself); 2224 _res = Py_BuildValue("l", 2225 _rv); 2226 return _res; 2227 } 2228 2229 static PyObject *CFStringRefObj_CFShowStr(CFStringRefObject *_self, PyObject *_args) 2230 { 2231 PyObject *_res = NULL; 2232 #ifndef CFShowStr 2233 PyMac_PRECHECK(CFShowStr); 2234 #endif 2235 if (!PyArg_ParseTuple(_args, "")) 2236 return NULL; 2237 CFShowStr(_self->ob_itself); 2238 Py_INCREF(Py_None); 2239 _res = Py_None; 2240 return _res; 2241 } 2242 2243 static PyObject *CFStringRefObj_CFURLCreateWithString(CFStringRefObject *_self, PyObject *_args) 2244 { 2245 PyObject *_res = NULL; 2246 CFURLRef _rv; 2247 CFURLRef baseURL; 2248 if (!PyArg_ParseTuple(_args, "O&", 2249 OptionalCFURLRefObj_Convert, &baseURL)) 2250 return NULL; 2251 _rv = CFURLCreateWithString((CFAllocatorRef)NULL, 2252 _self->ob_itself, 2253 baseURL); 2254 _res = Py_BuildValue("O&", 2255 CFURLRefObj_New, _rv); 2256 return _res; 2257 } 2258 2259 static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPath(CFStringRefObject *_self, PyObject *_args) 2260 { 2261 PyObject *_res = NULL; 2262 CFURLRef _rv; 2263 CFURLPathStyle pathStyle; 2264 Boolean isDirectory; 2265 if (!PyArg_ParseTuple(_args, "ll", 2266 &pathStyle, 2267 &isDirectory)) 2268 return NULL; 2269 _rv = CFURLCreateWithFileSystemPath((CFAllocatorRef)NULL, 2270 _self->ob_itself, 2271 pathStyle, 2272 isDirectory); 2273 _res = Py_BuildValue("O&", 2274 CFURLRefObj_New, _rv); 2275 return _res; 2276 } 2277 2278 static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase(CFStringRefObject *_self, PyObject *_args) 2279 { 2280 PyObject *_res = NULL; 2281 CFURLRef _rv; 2282 CFURLPathStyle pathStyle; 2283 Boolean isDirectory; 2284 CFURLRef baseURL; 2285 if (!PyArg_ParseTuple(_args, "llO&", 2286 &pathStyle, 2287 &isDirectory, 2288 OptionalCFURLRefObj_Convert, &baseURL)) 2289 return NULL; 2290 _rv = CFURLCreateWithFileSystemPathRelativeToBase((CFAllocatorRef)NULL, 2291 _self->ob_itself, 2292 pathStyle, 2293 isDirectory, 2294 baseURL); 2295 _res = Py_BuildValue("O&", 2296 CFURLRefObj_New, _rv); 2297 return _res; 2298 } 2299 2300 static PyObject *CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes(CFStringRefObject *_self, PyObject *_args) 2301 { 2302 PyObject *_res = NULL; 2303 CFStringRef _rv; 2304 CFStringRef charactersToLeaveEscaped; 2305 if (!PyArg_ParseTuple(_args, "O&", 2306 CFStringRefObj_Convert, &charactersToLeaveEscaped)) 2307 return NULL; 2308 _rv = CFURLCreateStringByReplacingPercentEscapes((CFAllocatorRef)NULL, 2309 _self->ob_itself, 2310 charactersToLeaveEscaped); 2311 _res = Py_BuildValue("O&", 2312 CFStringRefObj_New, _rv); 2313 return _res; 2314 } 2315 2316 static PyObject *CFStringRefObj_CFURLCreateStringByAddingPercentEscapes(CFStringRefObject *_self, PyObject *_args) 2317 { 2318 PyObject *_res = NULL; 2319 CFStringRef _rv; 2320 CFStringRef charactersToLeaveUnescaped; 2321 CFStringRef legalURLCharactersToBeEscaped; 2322 CFStringEncoding encoding; 2323 if (!PyArg_ParseTuple(_args, "O&O&l", 2324 CFStringRefObj_Convert, &charactersToLeaveUnescaped, 2325 CFStringRefObj_Convert, &legalURLCharactersToBeEscaped, 2326 &encoding)) 2327 return NULL; 2328 _rv = CFURLCreateStringByAddingPercentEscapes((CFAllocatorRef)NULL, 2329 _self->ob_itself, 2330 charactersToLeaveUnescaped, 2331 legalURLCharactersToBeEscaped, 2332 encoding); 2333 _res = Py_BuildValue("O&", 2334 CFStringRefObj_New, _rv); 2335 return _res; 2336 } 2337 2338 static PyObject *CFStringRefObj_CFStringGetString(CFStringRefObject *_self, PyObject *_args) 2339 { 2340 PyObject *_res = NULL; 2341 2342 int size = CFStringGetLength(_self->ob_itself)+1; 2343 char *data = malloc(size); 2344 2345 if( data == NULL ) return PyErr_NoMemory(); 2346 if ( CFStringGetCString(_self->ob_itself, data, size, 0) ) { 2347 _res = (PyObject *)PyString_FromString(data); 2348 } else { 2349 PyErr_SetString(PyExc_RuntimeError, "CFStringGetCString could not fit the string"); 2350 _res = NULL; 2351 } 2352 free(data); 2353 return _res; 2354 2355 } 2356 2357 static PyObject *CFStringRefObj_CFStringGetUnicode(CFStringRefObject *_self, PyObject *_args) 2358 { 2359 PyObject *_res = NULL; 2360 2361 int size = CFStringGetLength(_self->ob_itself)+1; 2362 Py_UNICODE *data = malloc(size*sizeof(Py_UNICODE)); 2363 CFRange range; 2364 2365 range.location = 0; 2366 range.length = size; 2367 if( data == NULL ) return PyErr_NoMemory(); 2368 CFStringGetCharacters(_self->ob_itself, range, data); 2369 _res = (PyObject *)PyUnicode_FromUnicode(data, size-1); 2370 free(data); 2371 return _res; 2372 2373 } 2374 2375 static PyMethodDef CFStringRefObj_methods[] = { 2376 {"CFStringCreateWithSubstring", (PyCFunction)CFStringRefObj_CFStringCreateWithSubstring, 1, 2377 PyDoc_STR("(CFRange range) -> (CFStringRef _rv)")}, 2378 {"CFStringCreateCopy", (PyCFunction)CFStringRefObj_CFStringCreateCopy, 1, 2379 PyDoc_STR("() -> (CFStringRef _rv)")}, 2380 {"CFStringGetLength", (PyCFunction)CFStringRefObj_CFStringGetLength, 1, 2381 PyDoc_STR("() -> (CFIndex _rv)")}, 2382 {"CFStringGetBytes", (PyCFunction)CFStringRefObj_CFStringGetBytes, 1, 2383 PyDoc_STR("(CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, CFIndex maxBufLen) -> (CFIndex _rv, UInt8 buffer, CFIndex usedBufLen)")}, 2384 {"CFStringCreateExternalRepresentation", (PyCFunction)CFStringRefObj_CFStringCreateExternalRepresentation, 1, 2385 PyDoc_STR("(CFStringEncoding encoding, UInt8 lossByte) -> (CFDataRef _rv)")}, 2386 {"CFStringGetSmallestEncoding", (PyCFunction)CFStringRefObj_CFStringGetSmallestEncoding, 1, 2387 PyDoc_STR("() -> (CFStringEncoding _rv)")}, 2388 {"CFStringGetFastestEncoding", (PyCFunction)CFStringRefObj_CFStringGetFastestEncoding, 1, 2389 PyDoc_STR("() -> (CFStringEncoding _rv)")}, 2390 {"CFStringCompareWithOptions", (PyCFunction)CFStringRefObj_CFStringCompareWithOptions, 1, 2391 PyDoc_STR("(CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")}, 2392 {"CFStringCompare", (PyCFunction)CFStringRefObj_CFStringCompare, 1, 2393 PyDoc_STR("(CFStringRef theString2, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")}, 2394 {"CFStringFindWithOptions", (PyCFunction)CFStringRefObj_CFStringFindWithOptions, 1, 2395 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions) -> (Boolean _rv, CFRange result)")}, 2396 {"CFStringCreateArrayWithFindResults", (PyCFunction)CFStringRefObj_CFStringCreateArrayWithFindResults, 1, 2397 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions) -> (CFArrayRef _rv)")}, 2398 {"CFStringFind", (PyCFunction)CFStringRefObj_CFStringFind, 1, 2399 PyDoc_STR("(CFStringRef stringToFind, CFOptionFlags compareOptions) -> (CFRange _rv)")}, 2400 {"CFStringHasPrefix", (PyCFunction)CFStringRefObj_CFStringHasPrefix, 1, 2401 PyDoc_STR("(CFStringRef prefix) -> (Boolean _rv)")}, 2402 {"CFStringHasSuffix", (PyCFunction)CFStringRefObj_CFStringHasSuffix, 1, 2403 PyDoc_STR("(CFStringRef suffix) -> (Boolean _rv)")}, 2404 {"CFStringGetLineBounds", (PyCFunction)CFStringRefObj_CFStringGetLineBounds, 1, 2405 PyDoc_STR("(CFRange range) -> (CFIndex lineBeginIndex, CFIndex lineEndIndex, CFIndex contentsEndIndex)")}, 2406 {"CFStringCreateArrayBySeparatingStrings", (PyCFunction)CFStringRefObj_CFStringCreateArrayBySeparatingStrings, 1, 2407 PyDoc_STR("(CFStringRef separatorString) -> (CFArrayRef _rv)")}, 2408 {"CFStringGetIntValue", (PyCFunction)CFStringRefObj_CFStringGetIntValue, 1, 2409 PyDoc_STR("() -> (SInt32 _rv)")}, 2410 {"CFStringGetDoubleValue", (PyCFunction)CFStringRefObj_CFStringGetDoubleValue, 1, 2411 PyDoc_STR("() -> (double _rv)")}, 2412 {"CFStringConvertIANACharSetNameToEncoding", (PyCFunction)CFStringRefObj_CFStringConvertIANACharSetNameToEncoding, 1, 2413 PyDoc_STR("() -> (CFStringEncoding _rv)")}, 2414 {"CFShowStr", (PyCFunction)CFStringRefObj_CFShowStr, 1, 2415 PyDoc_STR("() -> None")}, 2416 {"CFURLCreateWithString", (PyCFunction)CFStringRefObj_CFURLCreateWithString, 1, 2417 PyDoc_STR("(CFURLRef baseURL) -> (CFURLRef _rv)")}, 2418 {"CFURLCreateWithFileSystemPath", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPath, 1, 2419 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory) -> (CFURLRef _rv)")}, 2420 {"CFURLCreateWithFileSystemPathRelativeToBase", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase, 1, 2421 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")}, 2422 {"CFURLCreateStringByReplacingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes, 1, 2423 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")}, 2424 {"CFURLCreateStringByAddingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByAddingPercentEscapes, 1, 2425 PyDoc_STR("(CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding) -> (CFStringRef _rv)")}, 2426 {"CFStringGetString", (PyCFunction)CFStringRefObj_CFStringGetString, 1, 2427 PyDoc_STR("() -> (string _rv)")}, 2428 {"CFStringGetUnicode", (PyCFunction)CFStringRefObj_CFStringGetUnicode, 1, 2429 PyDoc_STR("() -> (unicode _rv)")}, 2430 {NULL, NULL, 0} 822 2431 }; 823 2432 824 #define CF MutableArrayRefObj_getsetlist NULL825 826 827 static int CF MutableArrayRefObj_compare(CFMutableArrayRefObject *self, CFMutableArrayRefObject *other)828 { 829 830 831 832 833 } 834 835 static PyObject * CF MutableArrayRefObj_repr(CFMutableArrayRefObject *self)836 { 837 838 sprintf(buf, "<CFMutableArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);839 840 } 841 842 static int CF MutableArrayRefObj_hash(CFMutableArrayRefObject *self)843 { 844 845 846 } 847 static int CF MutableArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)848 { 849 CFMutableArrayRef itself;850 851 852 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableArrayRefObj_Convert, &itself))853 854 ((CFMutableArrayRefObject *)_self)->ob_itself = itself;855 856 857 858 859 860 861 ((CFMutableArrayRefObject *)_self)->ob_itself = itself;862 863 864 865 } 866 867 #define CF MutableArrayRefObj_tp_alloc PyType_GenericAlloc868 869 static PyObject *CF MutableArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)870 { 871 872 873 ((CFMutableArrayRefObject *)self)->ob_itself = NULL;874 ((CFMutableArrayRefObject *)self)->ob_freeit = CFRelease;875 876 } 877 878 #define CF MutableArrayRefObj_tp_free PyObject_Del879 880 881 PyTypeObject CF MutableArrayRef_Type = {882 883 884 "_CF.CFMutableArrayRef", /*tp_name*/885 sizeof(CFMutableArrayRefObject), /*tp_basicsize*/886 887 888 (destructor) CFMutableArrayRefObj_dealloc, /*tp_dealloc*/889 890 891 892 (cmpfunc) CFMutableArrayRefObj_compare, /*tp_compare*/893 (reprfunc) CFMutableArrayRefObj_repr, /*tp_repr*/894 895 896 897 (hashfunc) CFMutableArrayRefObj_hash, /*tp_hash*/898 899 900 901 902 903 904 905 906 907 908 909 910 911 CFMutableArrayRefObj_methods, /* tp_methods */912 913 CFMutableArrayRefObj_getsetlist, /*tp_getset*/914 915 916 917 918 919 CFMutableArrayRefObj_tp_init, /* tp_init */920 CFMutableArrayRefObj_tp_alloc, /* tp_alloc */921 CFMutableArrayRefObj_tp_new, /* tp_new */922 CFMutableArrayRefObj_tp_free, /* tp_free */2433 #define CFStringRefObj_getsetlist NULL 2434 2435 2436 static int CFStringRefObj_compare(CFStringRefObject *self, CFStringRefObject *other) 2437 { 2438 /* XXXX Or should we use CFEqual?? */ 2439 if ( self->ob_itself > other->ob_itself ) return 1; 2440 if ( self->ob_itself < other->ob_itself ) return -1; 2441 return 0; 2442 } 2443 2444 static PyObject * CFStringRefObj_repr(CFStringRefObject *self) 2445 { 2446 char buf[100]; 2447 sprintf(buf, "<CFStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 2448 return PyString_FromString(buf); 2449 } 2450 2451 static int CFStringRefObj_hash(CFStringRefObject *self) 2452 { 2453 /* XXXX Or should we use CFHash?? */ 2454 return (int)self->ob_itself; 2455 } 2456 static int CFStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 2457 { 2458 CFStringRef itself; 2459 char *kw[] = {"itself", 0}; 2460 2461 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFStringRefObj_Convert, &itself)) 2462 { 2463 ((CFStringRefObject *)_self)->ob_itself = itself; 2464 return 0; 2465 } 2466 2467 /* Any CFTypeRef descendent is allowed as initializer too */ 2468 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 2469 { 2470 ((CFStringRefObject *)_self)->ob_itself = itself; 2471 return 0; 2472 } 2473 return -1; 2474 } 2475 2476 #define CFStringRefObj_tp_alloc PyType_GenericAlloc 2477 2478 static PyObject *CFStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 2479 { 2480 PyObject *self; 2481 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 2482 ((CFStringRefObject *)self)->ob_itself = NULL; 2483 ((CFStringRefObject *)self)->ob_freeit = CFRelease; 2484 return self; 2485 } 2486 2487 #define CFStringRefObj_tp_free PyObject_Del 2488 2489 2490 PyTypeObject CFStringRef_Type = { 2491 PyObject_HEAD_INIT(NULL) 2492 0, /*ob_size*/ 2493 "_CF.CFStringRef", /*tp_name*/ 2494 sizeof(CFStringRefObject), /*tp_basicsize*/ 2495 0, /*tp_itemsize*/ 2496 /* methods */ 2497 (destructor) CFStringRefObj_dealloc, /*tp_dealloc*/ 2498 0, /*tp_print*/ 2499 (getattrfunc)0, /*tp_getattr*/ 2500 (setattrfunc)0, /*tp_setattr*/ 2501 (cmpfunc) CFStringRefObj_compare, /*tp_compare*/ 2502 (reprfunc) CFStringRefObj_repr, /*tp_repr*/ 2503 (PyNumberMethods *)0, /* tp_as_number */ 2504 (PySequenceMethods *)0, /* tp_as_sequence */ 2505 (PyMappingMethods *)0, /* tp_as_mapping */ 2506 (hashfunc) CFStringRefObj_hash, /*tp_hash*/ 2507 0, /*tp_call*/ 2508 0, /*tp_str*/ 2509 PyObject_GenericGetAttr, /*tp_getattro*/ 2510 PyObject_GenericSetAttr, /*tp_setattro */ 2511 0, /*tp_as_buffer*/ 2512 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 2513 0, /*tp_doc*/ 2514 0, /*tp_traverse*/ 2515 0, /*tp_clear*/ 2516 0, /*tp_richcompare*/ 2517 0, /*tp_weaklistoffset*/ 2518 0, /*tp_iter*/ 2519 0, /*tp_iternext*/ 2520 CFStringRefObj_methods, /* tp_methods */ 2521 0, /*tp_members*/ 2522 CFStringRefObj_getsetlist, /*tp_getset*/ 2523 0, /*tp_base*/ 2524 0, /*tp_dict*/ 2525 0, /*tp_descr_get*/ 2526 0, /*tp_descr_set*/ 2527 0, /*tp_dictoffset*/ 2528 CFStringRefObj_tp_init, /* tp_init */ 2529 CFStringRefObj_tp_alloc, /* tp_alloc */ 2530 CFStringRefObj_tp_new, /* tp_new */ 2531 CFStringRefObj_tp_free, /* tp_free */ 923 2532 }; 924 2533 925 /* --------------- End object type CFMutableArrayRef ---------------- */ 926 927 928 /* ------------------ Object type CFDictionaryRef ------------------- */ 929 930 PyTypeObject CFDictionaryRef_Type; 931 932 #define CFDictionaryRefObj_Check(x) ((x)->ob_type == &CFDictionaryRef_Type || PyObject_TypeCheck((x), &CFDictionaryRef_Type)) 933 934 typedef struct CFDictionaryRefObject { 935 PyObject_HEAD 936 CFDictionaryRef ob_itself; 937 void (*ob_freeit)(CFTypeRef ptr); 938 } CFDictionaryRefObject; 939 940 PyObject *CFDictionaryRefObj_New(CFDictionaryRef itself) 941 { 942 CFDictionaryRefObject *it; 943 if (itself == NULL) 944 { 945 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 946 return NULL; 947 } 948 it = PyObject_NEW(CFDictionaryRefObject, &CFDictionaryRef_Type); 949 if (it == NULL) return NULL; 950 /* XXXX Should we tp_init or tp_new our basetype? */ 951 it->ob_itself = itself; 952 it->ob_freeit = CFRelease; 953 return (PyObject *)it; 954 } 955 956 int CFDictionaryRefObj_Convert(PyObject *v, CFDictionaryRef *p_itself) 957 { 958 959 if (v == Py_None) { *p_itself = NULL; return 1; } 960 /* Check for other CF objects here */ 961 962 if (!CFDictionaryRefObj_Check(v)) 963 { 964 PyErr_SetString(PyExc_TypeError, "CFDictionaryRef required"); 965 return 0; 966 } 967 *p_itself = ((CFDictionaryRefObject *)v)->ob_itself; 968 return 1; 969 } 970 971 static void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self) 972 { 973 if (self->ob_freeit && self->ob_itself) 974 { 975 self->ob_freeit((CFTypeRef)self->ob_itself); 976 self->ob_itself = NULL; 977 } 978 CFTypeRef_Type.tp_dealloc((PyObject *)self); 979 } 980 981 static PyObject *CFDictionaryRefObj_CFDictionaryCreateCopy(CFDictionaryRefObject *_self, PyObject *_args) 982 { 983 PyObject *_res = NULL; 984 CFDictionaryRef _rv; 985 if (!PyArg_ParseTuple(_args, "")) 986 return NULL; 987 _rv = CFDictionaryCreateCopy((CFAllocatorRef)NULL, 988 _self->ob_itself); 989 _res = Py_BuildValue("O&", 990 CFDictionaryRefObj_New, _rv); 991 return _res; 992 } 993 994 static PyObject *CFDictionaryRefObj_CFDictionaryGetCount(CFDictionaryRefObject *_self, PyObject *_args) 995 { 996 PyObject *_res = NULL; 997 CFIndex _rv; 998 #ifndef CFDictionaryGetCount 999 PyMac_PRECHECK(CFDictionaryGetCount); 1000 #endif 1001 if (!PyArg_ParseTuple(_args, "")) 1002 return NULL; 1003 _rv = CFDictionaryGetCount(_self->ob_itself); 1004 _res = Py_BuildValue("l", 1005 _rv); 1006 return _res; 1007 } 1008 1009 static PyMethodDef CFDictionaryRefObj_methods[] = { 1010 {"CFDictionaryCreateCopy", (PyCFunction)CFDictionaryRefObj_CFDictionaryCreateCopy, 1, 1011 PyDoc_STR("() -> (CFDictionaryRef _rv)")}, 1012 {"CFDictionaryGetCount", (PyCFunction)CFDictionaryRefObj_CFDictionaryGetCount, 1, 1013 PyDoc_STR("() -> (CFIndex _rv)")}, 1014 {NULL, NULL, 0} 2534 /* ------------------ End object type CFStringRef ------------------- */ 2535 2536 2537 /* ----------------- Object type CFMutableStringRef ----------------- */ 2538 2539 PyTypeObject CFMutableStringRef_Type; 2540 2541 #define CFMutableStringRefObj_Check(x) ((x)->ob_type == &CFMutableStringRef_Type || PyObject_TypeCheck((x), &CFMutableStringRef_Type)) 2542 2543 typedef struct CFMutableStringRefObject { 2544 PyObject_HEAD 2545 CFMutableStringRef ob_itself; 2546 void (*ob_freeit)(CFTypeRef ptr); 2547 } CFMutableStringRefObject; 2548 2549 PyObject *CFMutableStringRefObj_New(CFMutableStringRef itself) 2550 { 2551 CFMutableStringRefObject *it; 2552 if (itself == NULL) 2553 { 2554 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 2555 return NULL; 2556 } 2557 it = PyObject_NEW(CFMutableStringRefObject, &CFMutableStringRef_Type); 2558 if (it == NULL) return NULL; 2559 /* XXXX Should we tp_init or tp_new our basetype? */ 2560 it->ob_itself = itself; 2561 it->ob_freeit = CFRelease; 2562 return (PyObject *)it; 2563 } 2564 2565 int CFMutableStringRefObj_Convert(PyObject *v, CFMutableStringRef *p_itself) 2566 { 2567 2568 if (v == Py_None) { *p_itself = NULL; return 1; } 2569 /* Check for other CF objects here */ 2570 2571 if (!CFMutableStringRefObj_Check(v)) 2572 { 2573 PyErr_SetString(PyExc_TypeError, "CFMutableStringRef required"); 2574 return 0; 2575 } 2576 *p_itself = ((CFMutableStringRefObject *)v)->ob_itself; 2577 return 1; 2578 } 2579 2580 static void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self) 2581 { 2582 if (self->ob_freeit && self->ob_itself) 2583 { 2584 self->ob_freeit((CFTypeRef)self->ob_itself); 2585 self->ob_itself = NULL; 2586 } 2587 CFStringRef_Type.tp_dealloc((PyObject *)self); 2588 } 2589 2590 static PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *_self, PyObject *_args) 2591 { 2592 PyObject *_res = NULL; 2593 CFStringRef appendedString; 2594 #ifndef CFStringAppend 2595 PyMac_PRECHECK(CFStringAppend); 2596 #endif 2597 if (!PyArg_ParseTuple(_args, "O&", 2598 CFStringRefObj_Convert, &appendedString)) 2599 return NULL; 2600 CFStringAppend(_self->ob_itself, 2601 appendedString); 2602 Py_INCREF(Py_None); 2603 _res = Py_None; 2604 return _res; 2605 } 2606 2607 static PyObject *CFMutableStringRefObj_CFStringAppendCharacters(CFMutableStringRefObject *_self, PyObject *_args) 2608 { 2609 PyObject *_res = NULL; 2610 UniChar *chars__in__; 2611 UniCharCount chars__len__; 2612 int chars__in_len__; 2613 #ifndef CFStringAppendCharacters 2614 PyMac_PRECHECK(CFStringAppendCharacters); 2615 #endif 2616 if (!PyArg_ParseTuple(_args, "u#", 2617 &chars__in__, &chars__in_len__)) 2618 return NULL; 2619 chars__len__ = chars__in_len__; 2620 CFStringAppendCharacters(_self->ob_itself, 2621 chars__in__, chars__len__); 2622 Py_INCREF(Py_None); 2623 _res = Py_None; 2624 return _res; 2625 } 2626 2627 static PyObject *CFMutableStringRefObj_CFStringAppendPascalString(CFMutableStringRefObject *_self, PyObject *_args) 2628 { 2629 PyObject *_res = NULL; 2630 Str255 pStr; 2631 CFStringEncoding encoding; 2632 #ifndef CFStringAppendPascalString 2633 PyMac_PRECHECK(CFStringAppendPascalString); 2634 #endif 2635 if (!PyArg_ParseTuple(_args, "O&l", 2636 PyMac_GetStr255, pStr, 2637 &encoding)) 2638 return NULL; 2639 CFStringAppendPascalString(_self->ob_itself, 2640 pStr, 2641 encoding); 2642 Py_INCREF(Py_None); 2643 _res = Py_None; 2644 return _res; 2645 } 2646 2647 static PyObject *CFMutableStringRefObj_CFStringAppendCString(CFMutableStringRefObject *_self, PyObject *_args) 2648 { 2649 PyObject *_res = NULL; 2650 char* cStr; 2651 CFStringEncoding encoding; 2652 #ifndef CFStringAppendCString 2653 PyMac_PRECHECK(CFStringAppendCString); 2654 #endif 2655 if (!PyArg_ParseTuple(_args, "sl", 2656 &cStr, 2657 &encoding)) 2658 return NULL; 2659 CFStringAppendCString(_self->ob_itself, 2660 cStr, 2661 encoding); 2662 Py_INCREF(Py_None); 2663 _res = Py_None; 2664 return _res; 2665 } 2666 2667 static PyObject *CFMutableStringRefObj_CFStringInsert(CFMutableStringRefObject *_self, PyObject *_args) 2668 { 2669 PyObject *_res = NULL; 2670 CFIndex idx; 2671 CFStringRef insertedStr; 2672 #ifndef CFStringInsert 2673 PyMac_PRECHECK(CFStringInsert); 2674 #endif 2675 if (!PyArg_ParseTuple(_args, "lO&", 2676 &idx, 2677 CFStringRefObj_Convert, &insertedStr)) 2678 return NULL; 2679 CFStringInsert(_self->ob_itself, 2680 idx, 2681 insertedStr); 2682 Py_INCREF(Py_None); 2683 _res = Py_None; 2684 return _res; 2685 } 2686 2687 static PyObject *CFMutableStringRefObj_CFStringDelete(CFMutableStringRefObject *_self, PyObject *_args) 2688 { 2689 PyObject *_res = NULL; 2690 CFRange range; 2691 #ifndef CFStringDelete 2692 PyMac_PRECHECK(CFStringDelete); 2693 #endif 2694 if (!PyArg_ParseTuple(_args, "O&", 2695 CFRange_Convert, &range)) 2696 return NULL; 2697 CFStringDelete(_self->ob_itself, 2698 range); 2699 Py_INCREF(Py_None); 2700 _res = Py_None; 2701 return _res; 2702 } 2703 2704 static PyObject *CFMutableStringRefObj_CFStringReplace(CFMutableStringRefObject *_self, PyObject *_args) 2705 { 2706 PyObject *_res = NULL; 2707 CFRange range; 2708 CFStringRef replacement; 2709 #ifndef CFStringReplace 2710 PyMac_PRECHECK(CFStringReplace); 2711 #endif 2712 if (!PyArg_ParseTuple(_args, "O&O&", 2713 CFRange_Convert, &range, 2714 CFStringRefObj_Convert, &replacement)) 2715 return NULL; 2716 CFStringReplace(_self->ob_itself, 2717 range, 2718 replacement); 2719 Py_INCREF(Py_None); 2720 _res = Py_None; 2721 return _res; 2722 } 2723 2724 static PyObject *CFMutableStringRefObj_CFStringReplaceAll(CFMutableStringRefObject *_self, PyObject *_args) 2725 { 2726 PyObject *_res = NULL; 2727 CFStringRef replacement; 2728 #ifndef CFStringReplaceAll 2729 PyMac_PRECHECK(CFStringReplaceAll); 2730 #endif 2731 if (!PyArg_ParseTuple(_args, "O&", 2732 CFStringRefObj_Convert, &replacement)) 2733 return NULL; 2734 CFStringReplaceAll(_self->ob_itself, 2735 replacement); 2736 Py_INCREF(Py_None); 2737 _res = Py_None; 2738 return _res; 2739 } 2740 2741 static PyObject *CFMutableStringRefObj_CFStringPad(CFMutableStringRefObject *_self, PyObject *_args) 2742 { 2743 PyObject *_res = NULL; 2744 CFStringRef padString; 2745 CFIndex length; 2746 CFIndex indexIntoPad; 2747 #ifndef CFStringPad 2748 PyMac_PRECHECK(CFStringPad); 2749 #endif 2750 if (!PyArg_ParseTuple(_args, "O&ll", 2751 CFStringRefObj_Convert, &padString, 2752 &length, 2753 &indexIntoPad)) 2754 return NULL; 2755 CFStringPad(_self->ob_itself, 2756 padString, 2757 length, 2758 indexIntoPad); 2759 Py_INCREF(Py_None); 2760 _res = Py_None; 2761 return _res; 2762 } 2763 2764 static PyObject *CFMutableStringRefObj_CFStringTrim(CFMutableStringRefObject *_self, PyObject *_args) 2765 { 2766 PyObject *_res = NULL; 2767 CFStringRef trimString; 2768 #ifndef CFStringTrim 2769 PyMac_PRECHECK(CFStringTrim); 2770 #endif 2771 if (!PyArg_ParseTuple(_args, "O&", 2772 CFStringRefObj_Convert, &trimString)) 2773 return NULL; 2774 CFStringTrim(_self->ob_itself, 2775 trimString); 2776 Py_INCREF(Py_None); 2777 _res = Py_None; 2778 return _res; 2779 } 2780 2781 static PyObject *CFMutableStringRefObj_CFStringTrimWhitespace(CFMutableStringRefObject *_self, PyObject *_args) 2782 { 2783 PyObject *_res = NULL; 2784 #ifndef CFStringTrimWhitespace 2785 PyMac_PRECHECK(CFStringTrimWhitespace); 2786 #endif 2787 if (!PyArg_ParseTuple(_args, "")) 2788 return NULL; 2789 CFStringTrimWhitespace(_self->ob_itself); 2790 Py_INCREF(Py_None); 2791 _res = Py_None; 2792 return _res; 2793 } 2794 2795 static PyMethodDef CFMutableStringRefObj_methods[] = { 2796 {"CFStringAppend", (PyCFunction)CFMutableStringRefObj_CFStringAppend, 1, 2797 PyDoc_STR("(CFStringRef appendedString) -> None")}, 2798 {"CFStringAppendCharacters", (PyCFunction)CFMutableStringRefObj_CFStringAppendCharacters, 1, 2799 PyDoc_STR("(Buffer chars) -> None")}, 2800 {"CFStringAppendPascalString", (PyCFunction)CFMutableStringRefObj_CFStringAppendPascalString, 1, 2801 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> None")}, 2802 {"CFStringAppendCString", (PyCFunction)CFMutableStringRefObj_CFStringAppendCString, 1, 2803 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> None")}, 2804 {"CFStringInsert", (PyCFunction)CFMutableStringRefObj_CFStringInsert, 1, 2805 PyDoc_STR("(CFIndex idx, CFStringRef insertedStr) -> None")}, 2806 {"CFStringDelete", (PyCFunction)CFMutableStringRefObj_CFStringDelete, 1, 2807 PyDoc_STR("(CFRange range) -> None")}, 2808 {"CFStringReplace", (PyCFunction)CFMutableStringRefObj_CFStringReplace, 1, 2809 PyDoc_STR("(CFRange range, CFStringRef replacement) -> None")}, 2810 {"CFStringReplaceAll", (PyCFunction)CFMutableStringRefObj_CFStringReplaceAll, 1, 2811 PyDoc_STR("(CFStringRef replacement) -> None")}, 2812 {"CFStringPad", (PyCFunction)CFMutableStringRefObj_CFStringPad, 1, 2813 PyDoc_STR("(CFStringRef padString, CFIndex length, CFIndex indexIntoPad) -> None")}, 2814 {"CFStringTrim", (PyCFunction)CFMutableStringRefObj_CFStringTrim, 1, 2815 PyDoc_STR("(CFStringRef trimString) -> None")}, 2816 {"CFStringTrimWhitespace", (PyCFunction)CFMutableStringRefObj_CFStringTrimWhitespace, 1, 2817 PyDoc_STR("() -> None")}, 2818 {NULL, NULL, 0} 1015 2819 }; 1016 2820 1017 #define CF DictionaryRefObj_getsetlist NULL1018 1019 1020 static int CF DictionaryRefObj_compare(CFDictionaryRefObject *self, CFDictionaryRefObject *other)1021 { 1022 1023 1024 1025 1026 } 1027 1028 static PyObject * CF DictionaryRefObj_repr(CFDictionaryRefObject *self)1029 { 1030 1031 sprintf(buf, "<CFDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);1032 1033 } 1034 1035 static int CF DictionaryRefObj_hash(CFDictionaryRefObject *self)1036 { 1037 1038 1039 } 1040 static int CF DictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)1041 { 1042 CFDictionaryRef itself;1043 1044 1045 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDictionaryRefObj_Convert, &itself))1046 1047 ((CFDictionaryRefObject *)_self)->ob_itself = itself;1048 1049 1050 1051 1052 1053 1054 ((CFDictionaryRefObject *)_self)->ob_itself = itself;1055 1056 1057 1058 } 1059 1060 #define CF DictionaryRefObj_tp_alloc PyType_GenericAlloc1061 1062 static PyObject *CF DictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)1063 { 1064 1065 1066 ((CFDictionaryRefObject *)self)->ob_itself = NULL;1067 ((CFDictionaryRefObject *)self)->ob_freeit = CFRelease;1068 1069 } 1070 1071 #define CF DictionaryRefObj_tp_free PyObject_Del1072 1073 1074 PyTypeObject CF DictionaryRef_Type = {1075 1076 1077 "_CF.CFDictionaryRef", /*tp_name*/1078 sizeof(CFDictionaryRefObject), /*tp_basicsize*/1079 1080 1081 (destructor) CFDictionaryRefObj_dealloc, /*tp_dealloc*/1082 1083 1084 1085 (cmpfunc) CFDictionaryRefObj_compare, /*tp_compare*/1086 (reprfunc) CFDictionaryRefObj_repr, /*tp_repr*/1087 1088 1089 1090 (hashfunc) CFDictionaryRefObj_hash, /*tp_hash*/1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 CFDictionaryRefObj_methods, /* tp_methods */1105 1106 CFDictionaryRefObj_getsetlist, /*tp_getset*/1107 1108 1109 1110 1111 1112 CFDictionaryRefObj_tp_init, /* tp_init */1113 CFDictionaryRefObj_tp_alloc, /* tp_alloc */1114 CFDictionaryRefObj_tp_new, /* tp_new */1115 CFDictionaryRefObj_tp_free, /* tp_free */2821 #define CFMutableStringRefObj_getsetlist NULL 2822 2823 2824 static int CFMutableStringRefObj_compare(CFMutableStringRefObject *self, CFMutableStringRefObject *other) 2825 { 2826 /* XXXX Or should we use CFEqual?? */ 2827 if ( self->ob_itself > other->ob_itself ) return 1; 2828 if ( self->ob_itself < other->ob_itself ) return -1; 2829 return 0; 2830 } 2831 2832 static PyObject * CFMutableStringRefObj_repr(CFMutableStringRefObject *self) 2833 { 2834 char buf[100]; 2835 sprintf(buf, "<CFMutableStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 2836 return PyString_FromString(buf); 2837 } 2838 2839 static int CFMutableStringRefObj_hash(CFMutableStringRefObject *self) 2840 { 2841 /* XXXX Or should we use CFHash?? */ 2842 return (int)self->ob_itself; 2843 } 2844 static int CFMutableStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 2845 { 2846 CFMutableStringRef itself; 2847 char *kw[] = {"itself", 0}; 2848 2849 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableStringRefObj_Convert, &itself)) 2850 { 2851 ((CFMutableStringRefObject *)_self)->ob_itself = itself; 2852 return 0; 2853 } 2854 2855 /* Any CFTypeRef descendent is allowed as initializer too */ 2856 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 2857 { 2858 ((CFMutableStringRefObject *)_self)->ob_itself = itself; 2859 return 0; 2860 } 2861 return -1; 2862 } 2863 2864 #define CFMutableStringRefObj_tp_alloc PyType_GenericAlloc 2865 2866 static PyObject *CFMutableStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 2867 { 2868 PyObject *self; 2869 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 2870 ((CFMutableStringRefObject *)self)->ob_itself = NULL; 2871 ((CFMutableStringRefObject *)self)->ob_freeit = CFRelease; 2872 return self; 2873 } 2874 2875 #define CFMutableStringRefObj_tp_free PyObject_Del 2876 2877 2878 PyTypeObject CFMutableStringRef_Type = { 2879 PyObject_HEAD_INIT(NULL) 2880 0, /*ob_size*/ 2881 "_CF.CFMutableStringRef", /*tp_name*/ 2882 sizeof(CFMutableStringRefObject), /*tp_basicsize*/ 2883 0, /*tp_itemsize*/ 2884 /* methods */ 2885 (destructor) CFMutableStringRefObj_dealloc, /*tp_dealloc*/ 2886 0, /*tp_print*/ 2887 (getattrfunc)0, /*tp_getattr*/ 2888 (setattrfunc)0, /*tp_setattr*/ 2889 (cmpfunc) CFMutableStringRefObj_compare, /*tp_compare*/ 2890 (reprfunc) CFMutableStringRefObj_repr, /*tp_repr*/ 2891 (PyNumberMethods *)0, /* tp_as_number */ 2892 (PySequenceMethods *)0, /* tp_as_sequence */ 2893 (PyMappingMethods *)0, /* tp_as_mapping */ 2894 (hashfunc) CFMutableStringRefObj_hash, /*tp_hash*/ 2895 0, /*tp_call*/ 2896 0, /*tp_str*/ 2897 PyObject_GenericGetAttr, /*tp_getattro*/ 2898 PyObject_GenericSetAttr, /*tp_setattro */ 2899 0, /*tp_as_buffer*/ 2900 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 2901 0, /*tp_doc*/ 2902 0, /*tp_traverse*/ 2903 0, /*tp_clear*/ 2904 0, /*tp_richcompare*/ 2905 0, /*tp_weaklistoffset*/ 2906 0, /*tp_iter*/ 2907 0, /*tp_iternext*/ 2908 CFMutableStringRefObj_methods, /* tp_methods */ 2909 0, /*tp_members*/ 2910 CFMutableStringRefObj_getsetlist, /*tp_getset*/ 2911 0, /*tp_base*/ 2912 0, /*tp_dict*/ 2913 0, /*tp_descr_get*/ 2914 0, /*tp_descr_set*/ 2915 0, /*tp_dictoffset*/ 2916 CFMutableStringRefObj_tp_init, /* tp_init */ 2917 CFMutableStringRefObj_tp_alloc, /* tp_alloc */ 2918 CFMutableStringRefObj_tp_new, /* tp_new */ 2919 CFMutableStringRefObj_tp_free, /* tp_free */ 1116 2920 }; 1117 2921 1118 /* ---------------- End object type CFDictionaryRef ----------------- */ 1119 1120 1121 /* --------------- Object type CFMutableDictionaryRef --------------- */ 1122 1123 PyTypeObject CFMutableDictionaryRef_Type; 1124 1125 #define CFMutableDictionaryRefObj_Check(x) ((x)->ob_type == &CFMutableDictionaryRef_Type || PyObject_TypeCheck((x), &CFMutableDictionaryRef_Type)) 1126 1127 typedef struct CFMutableDictionaryRefObject { 1128 PyObject_HEAD 1129 CFMutableDictionaryRef ob_itself; 1130 void (*ob_freeit)(CFTypeRef ptr); 1131 } CFMutableDictionaryRefObject; 1132 1133 PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef itself) 1134 { 1135 CFMutableDictionaryRefObject *it; 1136 if (itself == NULL) 1137 { 1138 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 1139 return NULL; 1140 } 1141 it = PyObject_NEW(CFMutableDictionaryRefObject, &CFMutableDictionaryRef_Type); 1142 if (it == NULL) return NULL; 1143 /* XXXX Should we tp_init or tp_new our basetype? */ 1144 it->ob_itself = itself; 1145 it->ob_freeit = CFRelease; 1146 return (PyObject *)it; 1147 } 1148 1149 int CFMutableDictionaryRefObj_Convert(PyObject *v, CFMutableDictionaryRef *p_itself) 1150 { 1151 1152 if (v == Py_None) { *p_itself = NULL; return 1; } 1153 /* Check for other CF objects here */ 1154 1155 if (!CFMutableDictionaryRefObj_Check(v)) 1156 { 1157 PyErr_SetString(PyExc_TypeError, "CFMutableDictionaryRef required"); 1158 return 0; 1159 } 1160 *p_itself = ((CFMutableDictionaryRefObject *)v)->ob_itself; 1161 return 1; 1162 } 1163 1164 static void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self) 1165 { 1166 if (self->ob_freeit && self->ob_itself) 1167 { 1168 self->ob_freeit((CFTypeRef)self->ob_itself); 1169 self->ob_itself = NULL; 1170 } 1171 CFDictionaryRef_Type.tp_dealloc((PyObject *)self); 1172 } 1173 1174 static PyObject *CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues(CFMutableDictionaryRefObject *_self, PyObject *_args) 1175 { 1176 PyObject *_res = NULL; 1177 #ifndef CFDictionaryRemoveAllValues 1178 PyMac_PRECHECK(CFDictionaryRemoveAllValues); 1179 #endif 1180 if (!PyArg_ParseTuple(_args, "")) 1181 return NULL; 1182 CFDictionaryRemoveAllValues(_self->ob_itself); 1183 Py_INCREF(Py_None); 1184 _res = Py_None; 1185 return _res; 1186 } 1187 1188 static PyMethodDef CFMutableDictionaryRefObj_methods[] = { 1189 {"CFDictionaryRemoveAllValues", (PyCFunction)CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues, 1, 1190 PyDoc_STR("() -> None")}, 1191 {NULL, NULL, 0} 2922 /* --------------- End object type CFMutableStringRef --------------- */ 2923 2924 2925 /* ---------------------- Object type CFURLRef ---------------------- */ 2926 2927 PyTypeObject CFURLRef_Type; 2928 2929 #define CFURLRefObj_Check(x) ((x)->ob_type == &CFURLRef_Type || PyObject_TypeCheck((x), &CFURLRef_Type)) 2930 2931 typedef struct CFURLRefObject { 2932 PyObject_HEAD 2933 CFURLRef ob_itself; 2934 void (*ob_freeit)(CFTypeRef ptr); 2935 } CFURLRefObject; 2936 2937 PyObject *CFURLRefObj_New(CFURLRef itself) 2938 { 2939 CFURLRefObject *it; 2940 if (itself == NULL) 2941 { 2942 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 2943 return NULL; 2944 } 2945 it = PyObject_NEW(CFURLRefObject, &CFURLRef_Type); 2946 if (it == NULL) return NULL; 2947 /* XXXX Should we tp_init or tp_new our basetype? */ 2948 it->ob_itself = itself; 2949 it->ob_freeit = CFRelease; 2950 return (PyObject *)it; 2951 } 2952 2953 int CFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself) 2954 { 2955 2956 if (v == Py_None) { *p_itself = NULL; return 1; } 2957 /* Check for other CF objects here */ 2958 2959 if (!CFURLRefObj_Check(v)) 2960 { 2961 PyErr_SetString(PyExc_TypeError, "CFURLRef required"); 2962 return 0; 2963 } 2964 *p_itself = ((CFURLRefObject *)v)->ob_itself; 2965 return 1; 2966 } 2967 2968 static void CFURLRefObj_dealloc(CFURLRefObject *self) 2969 { 2970 if (self->ob_freeit && self->ob_itself) 2971 { 2972 self->ob_freeit((CFTypeRef)self->ob_itself); 2973 self->ob_itself = NULL; 2974 } 2975 CFTypeRef_Type.tp_dealloc((PyObject *)self); 2976 } 2977 2978 static PyObject *CFURLRefObj_CFURLCreateData(CFURLRefObject *_self, PyObject *_args) 2979 { 2980 PyObject *_res = NULL; 2981 CFDataRef _rv; 2982 CFStringEncoding encoding; 2983 Boolean escapeWhitespace; 2984 if (!PyArg_ParseTuple(_args, "ll", 2985 &encoding, 2986 &escapeWhitespace)) 2987 return NULL; 2988 _rv = CFURLCreateData((CFAllocatorRef)NULL, 2989 _self->ob_itself, 2990 encoding, 2991 escapeWhitespace); 2992 _res = Py_BuildValue("O&", 2993 CFDataRefObj_New, _rv); 2994 return _res; 2995 } 2996 2997 static PyObject *CFURLRefObj_CFURLGetFileSystemRepresentation(CFURLRefObject *_self, PyObject *_args) 2998 { 2999 PyObject *_res = NULL; 3000 Boolean _rv; 3001 Boolean resolveAgainstBase; 3002 UInt8 buffer; 3003 CFIndex maxBufLen; 3004 #ifndef CFURLGetFileSystemRepresentation 3005 PyMac_PRECHECK(CFURLGetFileSystemRepresentation); 3006 #endif 3007 if (!PyArg_ParseTuple(_args, "ll", 3008 &resolveAgainstBase, 3009 &maxBufLen)) 3010 return NULL; 3011 _rv = CFURLGetFileSystemRepresentation(_self->ob_itself, 3012 resolveAgainstBase, 3013 &buffer, 3014 maxBufLen); 3015 _res = Py_BuildValue("lb", 3016 _rv, 3017 buffer); 3018 return _res; 3019 } 3020 3021 static PyObject *CFURLRefObj_CFURLCopyAbsoluteURL(CFURLRefObject *_self, PyObject *_args) 3022 { 3023 PyObject *_res = NULL; 3024 CFURLRef _rv; 3025 #ifndef CFURLCopyAbsoluteURL 3026 PyMac_PRECHECK(CFURLCopyAbsoluteURL); 3027 #endif 3028 if (!PyArg_ParseTuple(_args, "")) 3029 return NULL; 3030 _rv = CFURLCopyAbsoluteURL(_self->ob_itself); 3031 _res = Py_BuildValue("O&", 3032 CFURLRefObj_New, _rv); 3033 return _res; 3034 } 3035 3036 static PyObject *CFURLRefObj_CFURLGetString(CFURLRefObject *_self, PyObject *_args) 3037 { 3038 PyObject *_res = NULL; 3039 CFStringRef _rv; 3040 #ifndef CFURLGetString 3041 PyMac_PRECHECK(CFURLGetString); 3042 #endif 3043 if (!PyArg_ParseTuple(_args, "")) 3044 return NULL; 3045 _rv = CFURLGetString(_self->ob_itself); 3046 _res = Py_BuildValue("O&", 3047 CFStringRefObj_New, _rv); 3048 return _res; 3049 } 3050 3051 static PyObject *CFURLRefObj_CFURLGetBaseURL(CFURLRefObject *_self, PyObject *_args) 3052 { 3053 PyObject *_res = NULL; 3054 CFURLRef _rv; 3055 #ifndef CFURLGetBaseURL 3056 PyMac_PRECHECK(CFURLGetBaseURL); 3057 #endif 3058 if (!PyArg_ParseTuple(_args, "")) 3059 return NULL; 3060 _rv = CFURLGetBaseURL(_self->ob_itself); 3061 _res = Py_BuildValue("O&", 3062 CFURLRefObj_New, _rv); 3063 return _res; 3064 } 3065 3066 static PyObject *CFURLRefObj_CFURLCanBeDecomposed(CFURLRefObject *_self, PyObject *_args) 3067 { 3068 PyObject *_res = NULL; 3069 Boolean _rv; 3070 #ifndef CFURLCanBeDecomposed 3071 PyMac_PRECHECK(CFURLCanBeDecomposed); 3072 #endif 3073 if (!PyArg_ParseTuple(_args, "")) 3074 return NULL; 3075 _rv = CFURLCanBeDecomposed(_self->ob_itself); 3076 _res = Py_BuildValue("l", 3077 _rv); 3078 return _res; 3079 } 3080 3081 static PyObject *CFURLRefObj_CFURLCopyScheme(CFURLRefObject *_self, PyObject *_args) 3082 { 3083 PyObject *_res = NULL; 3084 CFStringRef _rv; 3085 #ifndef CFURLCopyScheme 3086 PyMac_PRECHECK(CFURLCopyScheme); 3087 #endif 3088 if (!PyArg_ParseTuple(_args, "")) 3089 return NULL; 3090 _rv = CFURLCopyScheme(_self->ob_itself); 3091 _res = Py_BuildValue("O&", 3092 CFStringRefObj_New, _rv); 3093 return _res; 3094 } 3095 3096 static PyObject *CFURLRefObj_CFURLCopyNetLocation(CFURLRefObject *_self, PyObject *_args) 3097 { 3098 PyObject *_res = NULL; 3099 CFStringRef _rv; 3100 #ifndef CFURLCopyNetLocation 3101 PyMac_PRECHECK(CFURLCopyNetLocation); 3102 #endif 3103 if (!PyArg_ParseTuple(_args, "")) 3104 return NULL; 3105 _rv = CFURLCopyNetLocation(_self->ob_itself); 3106 _res = Py_BuildValue("O&", 3107 CFStringRefObj_New, _rv); 3108 return _res; 3109 } 3110 3111 static PyObject *CFURLRefObj_CFURLCopyPath(CFURLRefObject *_self, PyObject *_args) 3112 { 3113 PyObject *_res = NULL; 3114 CFStringRef _rv; 3115 #ifndef CFURLCopyPath 3116 PyMac_PRECHECK(CFURLCopyPath); 3117 #endif 3118 if (!PyArg_ParseTuple(_args, "")) 3119 return NULL; 3120 _rv = CFURLCopyPath(_self->ob_itself); 3121 _res = Py_BuildValue("O&", 3122 CFStringRefObj_New, _rv); 3123 return _res; 3124 } 3125 3126 static PyObject *CFURLRefObj_CFURLCopyStrictPath(CFURLRefObject *_self, PyObject *_args) 3127 { 3128 PyObject *_res = NULL; 3129 CFStringRef _rv; 3130 Boolean isAbsolute; 3131 #ifndef CFURLCopyStrictPath 3132 PyMac_PRECHECK(CFURLCopyStrictPath); 3133 #endif 3134 if (!PyArg_ParseTuple(_args, "")) 3135 return NULL; 3136 _rv = CFURLCopyStrictPath(_self->ob_itself, 3137 &isAbsolute); 3138 _res = Py_BuildValue("O&l", 3139 CFStringRefObj_New, _rv, 3140 isAbsolute); 3141 return _res; 3142 } 3143 3144 static PyObject *CFURLRefObj_CFURLCopyFileSystemPath(CFURLRefObject *_self, PyObject *_args) 3145 { 3146 PyObject *_res = NULL; 3147 CFStringRef _rv; 3148 CFURLPathStyle pathStyle; 3149 #ifndef CFURLCopyFileSystemPath 3150 PyMac_PRECHECK(CFURLCopyFileSystemPath); 3151 #endif 3152 if (!PyArg_ParseTuple(_args, "l", 3153 &pathStyle)) 3154 return NULL; 3155 _rv = CFURLCopyFileSystemPath(_self->ob_itself, 3156 pathStyle); 3157 _res = Py_BuildValue("O&", 3158 CFStringRefObj_New, _rv); 3159 return _res; 3160 } 3161 3162 static PyObject *CFURLRefObj_CFURLHasDirectoryPath(CFURLRefObject *_self, PyObject *_args) 3163 { 3164 PyObject *_res = NULL; 3165 Boolean _rv; 3166 #ifndef CFURLHasDirectoryPath 3167 PyMac_PRECHECK(CFURLHasDirectoryPath); 3168 #endif 3169 if (!PyArg_ParseTuple(_args, "")) 3170 return NULL; 3171 _rv = CFURLHasDirectoryPath(_self->ob_itself); 3172 _res = Py_BuildValue("l", 3173 _rv); 3174 return _res; 3175 } 3176 3177 static PyObject *CFURLRefObj_CFURLCopyResourceSpecifier(CFURLRefObject *_self, PyObject *_args) 3178 { 3179 PyObject *_res = NULL; 3180 CFStringRef _rv; 3181 #ifndef CFURLCopyResourceSpecifier 3182 PyMac_PRECHECK(CFURLCopyResourceSpecifier); 3183 #endif 3184 if (!PyArg_ParseTuple(_args, "")) 3185 return NULL; 3186 _rv = CFURLCopyResourceSpecifier(_self->ob_itself); 3187 _res = Py_BuildValue("O&", 3188 CFStringRefObj_New, _rv); 3189 return _res; 3190 } 3191 3192 static PyObject *CFURLRefObj_CFURLCopyHostName(CFURLRefObject *_self, PyObject *_args) 3193 { 3194 PyObject *_res = NULL; 3195 CFStringRef _rv; 3196 #ifndef CFURLCopyHostName 3197 PyMac_PRECHECK(CFURLCopyHostName); 3198 #endif 3199 if (!PyArg_ParseTuple(_args, "")) 3200 return NULL; 3201 _rv = CFURLCopyHostName(_self->ob_itself); 3202 _res = Py_BuildValue("O&", 3203 CFStringRefObj_New, _rv); 3204 return _res; 3205 } 3206 3207 static PyObject *CFURLRefObj_CFURLGetPortNumber(CFURLRefObject *_self, PyObject *_args) 3208 { 3209 PyObject *_res = NULL; 3210 SInt32 _rv; 3211 #ifndef CFURLGetPortNumber 3212 PyMac_PRECHECK(CFURLGetPortNumber); 3213 #endif 3214 if (!PyArg_ParseTuple(_args, "")) 3215 return NULL; 3216 _rv = CFURLGetPortNumber(_self->ob_itself); 3217 _res = Py_BuildValue("l", 3218 _rv); 3219 return _res; 3220 } 3221 3222 static PyObject *CFURLRefObj_CFURLCopyUserName(CFURLRefObject *_self, PyObject *_args) 3223 { 3224 PyObject *_res = NULL; 3225 CFStringRef _rv; 3226 #ifndef CFURLCopyUserName 3227 PyMac_PRECHECK(CFURLCopyUserName); 3228 #endif 3229 if (!PyArg_ParseTuple(_args, "")) 3230 return NULL; 3231 _rv = CFURLCopyUserName(_self->ob_itself); 3232 _res = Py_BuildValue("O&", 3233 CFStringRefObj_New, _rv); 3234 return _res; 3235 } 3236 3237 static PyObject *CFURLRefObj_CFURLCopyPassword(CFURLRefObject *_self, PyObject *_args) 3238 { 3239 PyObject *_res = NULL; 3240 CFStringRef _rv; 3241 #ifndef CFURLCopyPassword 3242 PyMac_PRECHECK(CFURLCopyPassword); 3243 #endif 3244 if (!PyArg_ParseTuple(_args, "")) 3245 return NULL; 3246 _rv = CFURLCopyPassword(_self->ob_itself); 3247 _res = Py_BuildValue("O&", 3248 CFStringRefObj_New, _rv); 3249 return _res; 3250 } 3251 3252 static PyObject *CFURLRefObj_CFURLCopyParameterString(CFURLRefObject *_self, PyObject *_args) 3253 { 3254 PyObject *_res = NULL; 3255 CFStringRef _rv; 3256 CFStringRef charactersToLeaveEscaped; 3257 #ifndef CFURLCopyParameterString 3258 PyMac_PRECHECK(CFURLCopyParameterString); 3259 #endif 3260 if (!PyArg_ParseTuple(_args, "O&", 3261 CFStringRefObj_Convert, &charactersToLeaveEscaped)) 3262 return NULL; 3263 _rv = CFURLCopyParameterString(_self->ob_itself, 3264 charactersToLeaveEscaped); 3265 _res = Py_BuildValue("O&", 3266 CFStringRefObj_New, _rv); 3267 return _res; 3268 } 3269 3270 static PyObject *CFURLRefObj_CFURLCopyQueryString(CFURLRefObject *_self, PyObject *_args) 3271 { 3272 PyObject *_res = NULL; 3273 CFStringRef _rv; 3274 CFStringRef charactersToLeaveEscaped; 3275 #ifndef CFURLCopyQueryString 3276 PyMac_PRECHECK(CFURLCopyQueryString); 3277 #endif 3278 if (!PyArg_ParseTuple(_args, "O&", 3279 CFStringRefObj_Convert, &charactersToLeaveEscaped)) 3280 return NULL; 3281 _rv = CFURLCopyQueryString(_self->ob_itself, 3282 charactersToLeaveEscaped); 3283 _res = Py_BuildValue("O&", 3284 CFStringRefObj_New, _rv); 3285 return _res; 3286 } 3287 3288 static PyObject *CFURLRefObj_CFURLCopyFragment(CFURLRefObject *_self, PyObject *_args) 3289 { 3290 PyObject *_res = NULL; 3291 CFStringRef _rv; 3292 CFStringRef charactersToLeaveEscaped; 3293 #ifndef CFURLCopyFragment 3294 PyMac_PRECHECK(CFURLCopyFragment); 3295 #endif 3296 if (!PyArg_ParseTuple(_args, "O&", 3297 CFStringRefObj_Convert, &charactersToLeaveEscaped)) 3298 return NULL; 3299 _rv = CFURLCopyFragment(_self->ob_itself, 3300 charactersToLeaveEscaped); 3301 _res = Py_BuildValue("O&", 3302 CFStringRefObj_New, _rv); 3303 return _res; 3304 } 3305 3306 static PyObject *CFURLRefObj_CFURLCopyLastPathComponent(CFURLRefObject *_self, PyObject *_args) 3307 { 3308 PyObject *_res = NULL; 3309 CFStringRef _rv; 3310 #ifndef CFURLCopyLastPathComponent 3311 PyMac_PRECHECK(CFURLCopyLastPathComponent); 3312 #endif 3313 if (!PyArg_ParseTuple(_args, "")) 3314 return NULL; 3315 _rv = CFURLCopyLastPathComponent(_self->ob_itself); 3316 _res = Py_BuildValue("O&", 3317 CFStringRefObj_New, _rv); 3318 return _res; 3319 } 3320 3321 static PyObject *CFURLRefObj_CFURLCopyPathExtension(CFURLRefObject *_self, PyObject *_args) 3322 { 3323 PyObject *_res = NULL; 3324 CFStringRef _rv; 3325 #ifndef CFURLCopyPathExtension 3326 PyMac_PRECHECK(CFURLCopyPathExtension); 3327 #endif 3328 if (!PyArg_ParseTuple(_args, "")) 3329 return NULL; 3330 _rv = CFURLCopyPathExtension(_self->ob_itself); 3331 _res = Py_BuildValue("O&", 3332 CFStringRefObj_New, _rv); 3333 return _res; 3334 } 3335 3336 static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathComponent(CFURLRefObject *_self, PyObject *_args) 3337 { 3338 PyObject *_res = NULL; 3339 CFURLRef _rv; 3340 CFStringRef pathComponent; 3341 Boolean isDirectory; 3342 if (!PyArg_ParseTuple(_args, "O&l", 3343 CFStringRefObj_Convert, &pathComponent, 3344 &isDirectory)) 3345 return NULL; 3346 _rv = CFURLCreateCopyAppendingPathComponent((CFAllocatorRef)NULL, 3347 _self->ob_itself, 3348 pathComponent, 3349 isDirectory); 3350 _res = Py_BuildValue("O&", 3351 CFURLRefObj_New, _rv); 3352 return _res; 3353 } 3354 3355 static PyObject *CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent(CFURLRefObject *_self, PyObject *_args) 3356 { 3357 PyObject *_res = NULL; 3358 CFURLRef _rv; 3359 if (!PyArg_ParseTuple(_args, "")) 3360 return NULL; 3361 _rv = CFURLCreateCopyDeletingLastPathComponent((CFAllocatorRef)NULL, 3362 _self->ob_itself); 3363 _res = Py_BuildValue("O&", 3364 CFURLRefObj_New, _rv); 3365 return _res; 3366 } 3367 3368 static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathExtension(CFURLRefObject *_self, PyObject *_args) 3369 { 3370 PyObject *_res = NULL; 3371 CFURLRef _rv; 3372 CFStringRef extension; 3373 if (!PyArg_ParseTuple(_args, "O&", 3374 CFStringRefObj_Convert, &extension)) 3375 return NULL; 3376 _rv = CFURLCreateCopyAppendingPathExtension((CFAllocatorRef)NULL, 3377 _self->ob_itself, 3378 extension); 3379 _res = Py_BuildValue("O&", 3380 CFURLRefObj_New, _rv); 3381 return _res; 3382 } 3383 3384 static PyObject *CFURLRefObj_CFURLCreateCopyDeletingPathExtension(CFURLRefObject *_self, PyObject *_args) 3385 { 3386 PyObject *_res = NULL; 3387 CFURLRef _rv; 3388 if (!PyArg_ParseTuple(_args, "")) 3389 return NULL; 3390 _rv = CFURLCreateCopyDeletingPathExtension((CFAllocatorRef)NULL, 3391 _self->ob_itself); 3392 _res = Py_BuildValue("O&", 3393 CFURLRefObj_New, _rv); 3394 return _res; 3395 } 3396 3397 static PyObject *CFURLRefObj_CFURLGetFSRef(CFURLRefObject *_self, PyObject *_args) 3398 { 3399 PyObject *_res = NULL; 3400 Boolean _rv; 3401 FSRef fsRef; 3402 #ifndef CFURLGetFSRef 3403 PyMac_PRECHECK(CFURLGetFSRef); 3404 #endif 3405 if (!PyArg_ParseTuple(_args, "")) 3406 return NULL; 3407 _rv = CFURLGetFSRef(_self->ob_itself, 3408 &fsRef); 3409 _res = Py_BuildValue("lO&", 3410 _rv, 3411 PyMac_BuildFSRef, &fsRef); 3412 return _res; 3413 } 3414 3415 static PyMethodDef CFURLRefObj_methods[] = { 3416 {"CFURLCreateData", (PyCFunction)CFURLRefObj_CFURLCreateData, 1, 3417 PyDoc_STR("(CFStringEncoding encoding, Boolean escapeWhitespace) -> (CFDataRef _rv)")}, 3418 {"CFURLGetFileSystemRepresentation", (PyCFunction)CFURLRefObj_CFURLGetFileSystemRepresentation, 1, 3419 PyDoc_STR("(Boolean resolveAgainstBase, CFIndex maxBufLen) -> (Boolean _rv, UInt8 buffer)")}, 3420 {"CFURLCopyAbsoluteURL", (PyCFunction)CFURLRefObj_CFURLCopyAbsoluteURL, 1, 3421 PyDoc_STR("() -> (CFURLRef _rv)")}, 3422 {"CFURLGetString", (PyCFunction)CFURLRefObj_CFURLGetString, 1, 3423 PyDoc_STR("() -> (CFStringRef _rv)")}, 3424 {"CFURLGetBaseURL", (PyCFunction)CFURLRefObj_CFURLGetBaseURL, 1, 3425 PyDoc_STR("() -> (CFURLRef _rv)")}, 3426 {"CFURLCanBeDecomposed", (PyCFunction)CFURLRefObj_CFURLCanBeDecomposed, 1, 3427 PyDoc_STR("() -> (Boolean _rv)")}, 3428 {"CFURLCopyScheme", (PyCFunction)CFURLRefObj_CFURLCopyScheme, 1, 3429 PyDoc_STR("() -> (CFStringRef _rv)")}, 3430 {"CFURLCopyNetLocation", (PyCFunction)CFURLRefObj_CFURLCopyNetLocation, 1, 3431 PyDoc_STR("() -> (CFStringRef _rv)")}, 3432 {"CFURLCopyPath", (PyCFunction)CFURLRefObj_CFURLCopyPath, 1, 3433 PyDoc_STR("() -> (CFStringRef _rv)")}, 3434 {"CFURLCopyStrictPath", (PyCFunction)CFURLRefObj_CFURLCopyStrictPath, 1, 3435 PyDoc_STR("() -> (CFStringRef _rv, Boolean isAbsolute)")}, 3436 {"CFURLCopyFileSystemPath", (PyCFunction)CFURLRefObj_CFURLCopyFileSystemPath, 1, 3437 PyDoc_STR("(CFURLPathStyle pathStyle) -> (CFStringRef _rv)")}, 3438 {"CFURLHasDirectoryPath", (PyCFunction)CFURLRefObj_CFURLHasDirectoryPath, 1, 3439 PyDoc_STR("() -> (Boolean _rv)")}, 3440 {"CFURLCopyResourceSpecifier", (PyCFunction)CFURLRefObj_CFURLCopyResourceSpecifier, 1, 3441 PyDoc_STR("() -> (CFStringRef _rv)")}, 3442 {"CFURLCopyHostName", (PyCFunction)CFURLRefObj_CFURLCopyHostName, 1, 3443 PyDoc_STR("() -> (CFStringRef _rv)")}, 3444 {"CFURLGetPortNumber", (PyCFunction)CFURLRefObj_CFURLGetPortNumber, 1, 3445 PyDoc_STR("() -> (SInt32 _rv)")}, 3446 {"CFURLCopyUserName", (PyCFunction)CFURLRefObj_CFURLCopyUserName, 1, 3447 PyDoc_STR("() -> (CFStringRef _rv)")}, 3448 {"CFURLCopyPassword", (PyCFunction)CFURLRefObj_CFURLCopyPassword, 1, 3449 PyDoc_STR("() -> (CFStringRef _rv)")}, 3450 {"CFURLCopyParameterString", (PyCFunction)CFURLRefObj_CFURLCopyParameterString, 1, 3451 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")}, 3452 {"CFURLCopyQueryString", (PyCFunction)CFURLRefObj_CFURLCopyQueryString, 1, 3453 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")}, 3454 {"CFURLCopyFragment", (PyCFunction)CFURLRefObj_CFURLCopyFragment, 1, 3455 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")}, 3456 {"CFURLCopyLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCopyLastPathComponent, 1, 3457 PyDoc_STR("() -> (CFStringRef _rv)")}, 3458 {"CFURLCopyPathExtension", (PyCFunction)CFURLRefObj_CFURLCopyPathExtension, 1, 3459 PyDoc_STR("() -> (CFStringRef _rv)")}, 3460 {"CFURLCreateCopyAppendingPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathComponent, 1, 3461 PyDoc_STR("(CFStringRef pathComponent, Boolean isDirectory) -> (CFURLRef _rv)")}, 3462 {"CFURLCreateCopyDeletingLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent, 1, 3463 PyDoc_STR("() -> (CFURLRef _rv)")}, 3464 {"CFURLCreateCopyAppendingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathExtension, 1, 3465 PyDoc_STR("(CFStringRef extension) -> (CFURLRef _rv)")}, 3466 {"CFURLCreateCopyDeletingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingPathExtension, 1, 3467 PyDoc_STR("() -> (CFURLRef _rv)")}, 3468 {"CFURLGetFSRef", (PyCFunction)CFURLRefObj_CFURLGetFSRef, 1, 3469 PyDoc_STR("() -> (Boolean _rv, FSRef fsRef)")}, 3470 {NULL, NULL, 0} 1192 3471 }; 1193 3472 1194 #define CF MutableDictionaryRefObj_getsetlist NULL1195 1196 1197 static int CF MutableDictionaryRefObj_compare(CFMutableDictionaryRefObject *self, CFMutableDictionaryRefObject *other)1198 { 1199 1200 1201 1202 1203 } 1204 1205 static PyObject * CF MutableDictionaryRefObj_repr(CFMutableDictionaryRefObject *self)1206 { 1207 1208 sprintf(buf, "<CFMutableDictionaryRefobject at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);1209 1210 } 1211 1212 static int CF MutableDictionaryRefObj_hash(CFMutableDictionaryRefObject *self)1213 { 1214 1215 1216 } 1217 static int CF MutableDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)1218 { 1219 CFMutableDictionaryRef itself;1220 1221 1222 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDictionaryRefObj_Convert, &itself))1223 1224 ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;1225 1226 1227 1228 1229 1230 1231 ((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;1232 1233 1234 1235 } 1236 1237 #define CF MutableDictionaryRefObj_tp_alloc PyType_GenericAlloc1238 1239 static PyObject *CF MutableDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)1240 { 1241 1242 1243 ((CFMutableDictionaryRefObject *)self)->ob_itself = NULL;1244 ((CFMutableDictionaryRefObject *)self)->ob_freeit = CFRelease;1245 1246 } 1247 1248 #define CF MutableDictionaryRefObj_tp_free PyObject_Del1249 1250 1251 PyTypeObject CF MutableDictionaryRef_Type = {1252 1253 1254 "_CF.CFMutableDictionaryRef", /*tp_name*/1255 sizeof(CFMutableDictionaryRefObject), /*tp_basicsize*/1256 1257 1258 (destructor) CFMutableDictionaryRefObj_dealloc, /*tp_dealloc*/1259 1260 1261 1262 (cmpfunc) CFMutableDictionaryRefObj_compare, /*tp_compare*/1263 (reprfunc) CFMutableDictionaryRefObj_repr, /*tp_repr*/1264 1265 1266 1267 (hashfunc) CFMutableDictionaryRefObj_hash, /*tp_hash*/1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 CFMutableDictionaryRefObj_methods, /* tp_methods */1282 1283 CFMutableDictionaryRefObj_getsetlist, /*tp_getset*/1284 1285 1286 1287 1288 1289 CFMutableDictionaryRefObj_tp_init, /* tp_init */1290 CFMutableDictionaryRefObj_tp_alloc, /* tp_alloc */1291 CFMutableDictionaryRefObj_tp_new, /* tp_new */1292 CFMutableDictionaryRefObj_tp_free, /* tp_free */3473 #define CFURLRefObj_getsetlist NULL 3474 3475 3476 static int CFURLRefObj_compare(CFURLRefObject *self, CFURLRefObject *other) 3477 { 3478 /* XXXX Or should we use CFEqual?? */ 3479 if ( self->ob_itself > other->ob_itself ) return 1; 3480 if ( self->ob_itself < other->ob_itself ) return -1; 3481 return 0; 3482 } 3483 3484 static PyObject * CFURLRefObj_repr(CFURLRefObject *self) 3485 { 3486 char buf[100]; 3487 sprintf(buf, "<CFURL object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself); 3488 return PyString_FromString(buf); 3489 } 3490 3491 static int CFURLRefObj_hash(CFURLRefObject *self) 3492 { 3493 /* XXXX Or should we use CFHash?? */ 3494 return (int)self->ob_itself; 3495 } 3496 static int CFURLRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds) 3497 { 3498 CFURLRef itself; 3499 char *kw[] = {"itself", 0}; 3500 3501 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFURLRefObj_Convert, &itself)) 3502 { 3503 ((CFURLRefObject *)_self)->ob_itself = itself; 3504 return 0; 3505 } 3506 3507 /* Any CFTypeRef descendent is allowed as initializer too */ 3508 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself)) 3509 { 3510 ((CFURLRefObject *)_self)->ob_itself = itself; 3511 return 0; 3512 } 3513 return -1; 3514 } 3515 3516 #define CFURLRefObj_tp_alloc PyType_GenericAlloc 3517 3518 static PyObject *CFURLRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds) 3519 { 3520 PyObject *self; 3521 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL; 3522 ((CFURLRefObject *)self)->ob_itself = NULL; 3523 ((CFURLRefObject *)self)->ob_freeit = CFRelease; 3524 return self; 3525 } 3526 3527 #define CFURLRefObj_tp_free PyObject_Del 3528 3529 3530 PyTypeObject CFURLRef_Type = { 3531 PyObject_HEAD_INIT(NULL) 3532 0, /*ob_size*/ 3533 "_CF.CFURLRef", /*tp_name*/ 3534 sizeof(CFURLRefObject), /*tp_basicsize*/ 3535 0, /*tp_itemsize*/ 3536 /* methods */ 3537 (destructor) CFURLRefObj_dealloc, /*tp_dealloc*/ 3538 0, /*tp_print*/ 3539 (getattrfunc)0, /*tp_getattr*/ 3540 (setattrfunc)0, /*tp_setattr*/ 3541 (cmpfunc) CFURLRefObj_compare, /*tp_compare*/ 3542 (reprfunc) CFURLRefObj_repr, /*tp_repr*/ 3543 (PyNumberMethods *)0, /* tp_as_number */ 3544 (PySequenceMethods *)0, /* tp_as_sequence */ 3545 (PyMappingMethods *)0, /* tp_as_mapping */ 3546 (hashfunc) CFURLRefObj_hash, /*tp_hash*/ 3547 0, /*tp_call*/ 3548 0, /*tp_str*/ 3549 PyObject_GenericGetAttr, /*tp_getattro*/ 3550 PyObject_GenericSetAttr, /*tp_setattro */ 3551 0, /*tp_as_buffer*/ 3552 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ 3553 0, /*tp_doc*/ 3554 0, /*tp_traverse*/ 3555 0, /*tp_clear*/ 3556 0, /*tp_richcompare*/ 3557 0, /*tp_weaklistoffset*/ 3558 0, /*tp_iter*/ 3559 0, /*tp_iternext*/ 3560 CFURLRefObj_methods, /* tp_methods */ 3561 0, /*tp_members*/ 3562 CFURLRefObj_getsetlist, /*tp_getset*/ 3563 0, /*tp_base*/ 3564 0, /*tp_dict*/ 3565 0, /*tp_descr_get*/ 3566 0, /*tp_descr_set*/ 3567 0, /*tp_dictoffset*/ 3568 CFURLRefObj_tp_init, /* tp_init */ 3569 CFURLRefObj_tp_alloc, /* tp_alloc */ 3570 CFURLRefObj_tp_new, /* tp_new */ 3571 CFURLRefObj_tp_free, /* tp_free */ 1293 3572 }; 1294 3573 1295 /* ------------- End object type CFMutableDictionaryRef ------------- */1296 1297 1298 /* --------------------- Object type CFDataRef ---------------------- */1299 1300 PyTypeObject CFDataRef_Type;1301 1302 #define CFDataRefObj_Check(x) ((x)->ob_type == &CFDataRef_Type || PyObject_TypeCheck((x), &CFDataRef_Type))1303 1304 typedef struct CFDataRefObject {1305 PyObject_HEAD1306 CFDataRef ob_itself;1307 void (*ob_freeit)(CFTypeRef ptr);1308 } CFDataRefObject;1309 1310 PyObject *CFDataRefObj_New(CFDataRef itself)1311 {1312 CFDataRefObject *it;1313 if (itself == NULL)1314 {1315 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");1316 return NULL;1317 }1318 it = PyObject_NEW(CFDataRefObject, &CFDataRef_Type);1319 if (it == NULL) return NULL;1320 /* XXXX Should we tp_init or tp_new our basetype? */1321 it->ob_itself = itself;1322 it->ob_freeit = CFRelease;1323 return (PyObject *)it;1324 }1325 1326 int CFDataRefObj_Convert(PyObject *v, CFDataRef *p_itself)1327 {1328 1329 if (v == Py_None) { *p_itself = NULL; return 1; }1330 if (PyString_Check(v)) {1331 char *cStr;1332 Py_ssize_t cLen;1333 if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;1334 *p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen);1335 return 1;1336 }1337 1338 if (!CFDataRefObj_Check(v))1339 {1340 PyErr_SetString(PyExc_TypeError, "CFDataRef required");1341 return 0;1342 }1343 *p_itself = ((CFDataRefObject *)v)->ob_itself;1344 return 1;1345 }1346 1347 static void CFDataRefObj_dealloc(CFDataRefObject *self)1348 {1349 if (self->ob_freeit && self->ob_itself)1350 {1351 self->ob_freeit((CFTypeRef)self->ob_itself);1352 self->ob_itself = NULL;1353 }1354 CFTypeRef_Type.tp_dealloc((PyObject *)self);1355 }1356 1357 static PyObject *CFDataRefObj_CFDataCreateCopy(CFDataRefObject *_self, PyObject *_args)1358 {1359 PyObject *_res = NULL;1360 CFDataRef _rv;1361 if (!PyArg_ParseTuple(_args, ""))1362 return NULL;1363 _rv = CFDataCreateCopy((CFAllocatorRef)NULL,1364 _self->ob_itself);1365 _res = Py_BuildValue("O&",1366 CFDataRefObj_New, _rv);1367 return _res;1368 }1369 1370 static PyObject *CFDataRefObj_CFDataGetLength(CFDataRefObject *_self, PyObject *_args)1371 {1372 PyObject *_res = NULL;1373 CFIndex _rv;1374 #ifndef CFDataGetLength1375 PyMac_PRECHECK(CFDataGetLength);1376 #endif1377 if (!PyArg_ParseTuple(_args, ""))1378 return NULL;1379 _rv = CFDataGetLength(_self->ob_itself);1380 _res = Py_BuildValue("l",1381 _rv);1382 return _res;1383 }1384 1385 static PyObject *CFDataRefObj_CFStringCreateFromExternalRepresentation(CFDataRefObject *_self, PyObject *_args)1386 {1387 PyObject *_res = NULL;1388 CFStringRef _rv;1389 CFStringEncoding encoding;1390 if (!PyArg_ParseTuple(_args, "l",1391 &encoding))1392 return NULL;1393 _rv = CFStringCreateFromExternalRepresentation((CFAllocatorRef)NULL,1394 _self->ob_itself,1395 encoding);1396 _res = Py_BuildValue("O&",1397 CFStringRefObj_New, _rv);1398 return _res;1399 }1400 1401 static PyObject *CFDataRefObj_CFDataGetData(CFDataRefObject *_self, PyObject *_args)1402 {1403 PyObject *_res = NULL;1404 1405 int size = CFDataGetLength(_self->ob_itself);1406 char *data = (char *)CFDataGetBytePtr(_self->ob_itself);1407 1408 _res = (PyObject *)PyString_FromStringAndSize(data, size);1409 return _res;1410 1411 }1412 1413 static PyMethodDef CFDataRefObj_methods[] = {1414 {"CFDataCreateCopy", (PyCFunction)CFDataRefObj_CFDataCreateCopy, 1,1415 PyDoc_STR("() -> (CFDataRef _rv)")},1416 {"CFDataGetLength", (PyCFunction)CFDataRefObj_CFDataGetLength, 1,1417 PyDoc_STR("() -> (CFIndex _rv)")},1418 {"CFStringCreateFromExternalRepresentation", (PyCFunction)CFDataRefObj_CFStringCreateFromExternalRepresentation, 1,1419 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},1420 {"CFDataGetData", (PyCFunction)CFDataRefObj_CFDataGetData, 1,1421 PyDoc_STR("() -> (string _rv)")},1422 {NULL, NULL, 0}1423 };1424 1425 #define CFDataRefObj_getsetlist NULL1426 1427 1428 static int CFDataRefObj_compare(CFDataRefObject *self, CFDataRefObject *other)1429 {1430 /* XXXX Or should we use CFEqual?? */1431 if ( self->ob_itself > other->ob_itself ) return 1;1432 if ( self->ob_itself < other->ob_itself ) return -1;1433 return 0;1434 }1435 1436 static PyObject * CFDataRefObj_repr(CFDataRefObject *self)1437 {1438 char buf[100];1439 sprintf(buf, "<CFDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);1440 return PyString_FromString(buf);1441 }1442 1443 static int CFDataRefObj_hash(CFDataRefObject *self)1444 {1445 /* XXXX Or should we use CFHash?? */1446 return (int)self->ob_itself;1447 }1448 static int CFDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)1449 {1450 CFDataRef itself;1451 char *kw[] = {"itself", 0};1452 1453 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDataRefObj_Convert, &itself))1454 {1455 ((CFDataRefObject *)_self)->ob_itself = itself;1456 return 0;1457 }1458 1459 /* Any CFTypeRef descendent is allowed as initializer too */1460 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))1461 {1462 ((CFDataRefObject *)_self)->ob_itself = itself;1463 return 0;1464 }1465 return -1;1466 }1467 1468 #define CFDataRefObj_tp_alloc PyType_GenericAlloc1469 1470 static PyObject *CFDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)1471 {1472 PyObject *self;1473 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;1474 ((CFDataRefObject *)self)->ob_itself = NULL;1475 ((CFDataRefObject *)self)->ob_freeit = CFRelease;1476 return self;1477 }1478 1479 #define CFDataRefObj_tp_free PyObject_Del1480 1481 1482 PyTypeObject CFDataRef_Type = {1483 PyObject_HEAD_INIT(NULL)1484 0, /*ob_size*/1485 "_CF.CFDataRef", /*tp_name*/1486 sizeof(CFDataRefObject), /*tp_basicsize*/1487 0, /*tp_itemsize*/1488 /* methods */1489 (destructor) CFDataRefObj_dealloc, /*tp_dealloc*/1490 0, /*tp_print*/1491 (getattrfunc)0, /*tp_getattr*/1492 (setattrfunc)0, /*tp_setattr*/1493 (cmpfunc) CFDataRefObj_compare, /*tp_compare*/1494 (reprfunc) CFDataRefObj_repr, /*tp_repr*/1495 (PyNumberMethods *)0, /* tp_as_number */1496 (PySequenceMethods *)0, /* tp_as_sequence */1497 (PyMappingMethods *)0, /* tp_as_mapping */1498 (hashfunc) CFDataRefObj_hash, /*tp_hash*/1499 0, /*tp_call*/1500 0, /*tp_str*/1501 PyObject_GenericGetAttr, /*tp_getattro*/1502 PyObject_GenericSetAttr, /*tp_setattro */1503 0, /*tp_as_buffer*/1504 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */1505 0, /*tp_doc*/1506 0, /*tp_traverse*/1507 0, /*tp_clear*/1508 0, /*tp_richcompare*/1509 0, /*tp_weaklistoffset*/1510 0, /*tp_iter*/1511 0, /*tp_iternext*/1512 CFDataRefObj_methods, /* tp_methods */1513 0, /*tp_members*/1514 CFDataRefObj_getsetlist, /*tp_getset*/1515 0, /*tp_base*/1516 0, /*tp_dict*/1517 0, /*tp_descr_get*/1518 0, /*tp_descr_set*/1519 0, /*tp_dictoffset*/1520 CFDataRefObj_tp_init, /* tp_init */1521 CFDataRefObj_tp_alloc, /* tp_alloc */1522 CFDataRefObj_tp_new, /* tp_new */1523 CFDataRefObj_tp_free, /* tp_free */1524 };1525 1526 /* ------------------- End object type CFDataRef -------------------- */1527 1528 1529 /* ------------------ Object type CFMutableDataRef ------------------ */1530 1531 PyTypeObject CFMutableDataRef_Type;1532 1533 #define CFMutableDataRefObj_Check(x) ((x)->ob_type == &CFMutableDataRef_Type || PyObject_TypeCheck((x), &CFMutableDataRef_Type))1534 1535 typedef struct CFMutableDataRefObject {1536 PyObject_HEAD1537 CFMutableDataRef ob_itself;1538 void (*ob_freeit)(CFTypeRef ptr);1539 } CFMutableDataRefObject;1540 1541 PyObject *CFMutableDataRefObj_New(CFMutableDataRef itself)1542 {1543 CFMutableDataRefObject *it;1544 if (itself == NULL)1545 {1546 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");1547 return NULL;1548 }1549 it = PyObject_NEW(CFMutableDataRefObject, &CFMutableDataRef_Type);1550 if (it == NULL) return NULL;1551 /* XXXX Should we tp_init or tp_new our basetype? */1552 it->ob_itself = itself;1553 it->ob_freeit = CFRelease;1554 return (PyObject *)it;1555 }1556 1557 int CFMutableDataRefObj_Convert(PyObject *v, CFMutableDataRef *p_itself)1558 {1559 1560 if (v == Py_None) { *p_itself = NULL; return 1; }1561 /* Check for other CF objects here */1562 1563 if (!CFMutableDataRefObj_Check(v))1564 {1565 PyErr_SetString(PyExc_TypeError, "CFMutableDataRef required");1566 return 0;1567 }1568 *p_itself = ((CFMutableDataRefObject *)v)->ob_itself;1569 return 1;1570 }1571 1572 static void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self)1573 {1574 if (self->ob_freeit && self->ob_itself)1575 {1576 self->ob_freeit((CFTypeRef)self->ob_itself);1577 self->ob_itself = NULL;1578 }1579 CFDataRef_Type.tp_dealloc((PyObject *)self);1580 }1581 1582 static PyObject *CFMutableDataRefObj_CFDataSetLength(CFMutableDataRefObject *_self, PyObject *_args)1583 {1584 PyObject *_res = NULL;1585 CFIndex length;1586 #ifndef CFDataSetLength1587 PyMac_PRECHECK(CFDataSetLength);1588 #endif1589 if (!PyArg_ParseTuple(_args, "l",1590 &length))1591 return NULL;1592 CFDataSetLength(_self->ob_itself,1593 length);1594 Py_INCREF(Py_None);1595 _res = Py_None;1596 return _res;1597 }1598 1599 static PyObject *CFMutableDataRefObj_CFDataIncreaseLength(CFMutableDataRefObject *_self, PyObject *_args)1600 {1601 PyObject *_res = NULL;1602 CFIndex extraLength;1603 #ifndef CFDataIncreaseLength1604 PyMac_PRECHECK(CFDataIncreaseLength);1605 #endif1606 if (!PyArg_ParseTuple(_args, "l",1607 &extraLength))1608 return NULL;1609 CFDataIncreaseLength(_self->ob_itself,1610 extraLength);1611 Py_INCREF(Py_None);1612 _res = Py_None;1613 return _res;1614 }1615 1616 static PyObject *CFMutableDataRefObj_CFDataAppendBytes(CFMutableDataRefObject *_self, PyObject *_args)1617 {1618 PyObject *_res = NULL;1619 unsigned char *bytes__in__;1620 long bytes__len__;1621 int bytes__in_len__;1622 #ifndef CFDataAppendBytes1623 PyMac_PRECHECK(CFDataAppendBytes);1624 #endif1625 if (!PyArg_ParseTuple(_args, "s#",1626 &bytes__in__, &bytes__in_len__))1627 return NULL;1628 bytes__len__ = bytes__in_len__;1629 CFDataAppendBytes(_self->ob_itself,1630 bytes__in__, bytes__len__);1631 Py_INCREF(Py_None);1632 _res = Py_None;1633 return _res;1634 }1635 1636 static PyObject *CFMutableDataRefObj_CFDataReplaceBytes(CFMutableDataRefObject *_self, PyObject *_args)1637 {1638 PyObject *_res = NULL;1639 CFRange range;1640 unsigned char *newBytes__in__;1641 long newBytes__len__;1642 int newBytes__in_len__;1643 #ifndef CFDataReplaceBytes1644 PyMac_PRECHECK(CFDataReplaceBytes);1645 #endif1646 if (!PyArg_ParseTuple(_args, "O&s#",1647 CFRange_Convert, &range,1648 &newBytes__in__, &newBytes__in_len__))1649 return NULL;1650 newBytes__len__ = newBytes__in_len__;1651 CFDataReplaceBytes(_self->ob_itself,1652 range,1653 newBytes__in__, newBytes__len__);1654 Py_INCREF(Py_None);1655 _res = Py_None;1656 return _res;1657 }1658 1659 static PyObject *CFMutableDataRefObj_CFDataDeleteBytes(CFMutableDataRefObject *_self, PyObject *_args)1660 {1661 PyObject *_res = NULL;1662 CFRange range;1663 #ifndef CFDataDeleteBytes1664 PyMac_PRECHECK(CFDataDeleteBytes);1665 #endif1666 if (!PyArg_ParseTuple(_args, "O&",1667 CFRange_Convert, &range))1668 return NULL;1669 CFDataDeleteBytes(_self->ob_itself,1670 range);1671 Py_INCREF(Py_None);1672 _res = Py_None;1673 return _res;1674 }1675 1676 static PyMethodDef CFMutableDataRefObj_methods[] = {1677 {"CFDataSetLength", (PyCFunction)CFMutableDataRefObj_CFDataSetLength, 1,1678 PyDoc_STR("(CFIndex length) -> None")},1679 {"CFDataIncreaseLength", (PyCFunction)CFMutableDataRefObj_CFDataIncreaseLength, 1,1680 PyDoc_STR("(CFIndex extraLength) -> None")},1681 {"CFDataAppendBytes", (PyCFunction)CFMutableDataRefObj_CFDataAppendBytes, 1,1682 PyDoc_STR("(Buffer bytes) -> None")},1683 {"CFDataReplaceBytes", (PyCFunction)CFMutableDataRefObj_CFDataReplaceBytes, 1,1684 PyDoc_STR("(CFRange range, Buffer newBytes) -> None")},1685 {"CFDataDeleteBytes", (PyCFunction)CFMutableDataRefObj_CFDataDeleteBytes, 1,1686 PyDoc_STR("(CFRange range) -> None")},1687 {NULL, NULL, 0}1688 };1689 1690 #define CFMutableDataRefObj_getsetlist NULL1691 1692 1693 static int CFMutableDataRefObj_compare(CFMutableDataRefObject *self, CFMutableDataRefObject *other)1694 {1695 /* XXXX Or should we use CFEqual?? */1696 if ( self->ob_itself > other->ob_itself ) return 1;1697 if ( self->ob_itself < other->ob_itself ) return -1;1698 return 0;1699 }1700 1701 static PyObject * CFMutableDataRefObj_repr(CFMutableDataRefObject *self)1702 {1703 char buf[100];1704 sprintf(buf, "<CFMutableDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);1705 return PyString_FromString(buf);1706 }1707 1708 static int CFMutableDataRefObj_hash(CFMutableDataRefObject *self)1709 {1710 /* XXXX Or should we use CFHash?? */1711 return (int)self->ob_itself;1712 }1713 static int CFMutableDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)1714 {1715 CFMutableDataRef itself;1716 char *kw[] = {"itself", 0};1717 1718 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDataRefObj_Convert, &itself))1719 {1720 ((CFMutableDataRefObject *)_self)->ob_itself = itself;1721 return 0;1722 }1723 1724 /* Any CFTypeRef descendent is allowed as initializer too */1725 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))1726 {1727 ((CFMutableDataRefObject *)_self)->ob_itself = itself;1728 return 0;1729 }1730 return -1;1731 }1732 1733 #define CFMutableDataRefObj_tp_alloc PyType_GenericAlloc1734 1735 static PyObject *CFMutableDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)1736 {1737 PyObject *self;1738 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;1739 ((CFMutableDataRefObject *)self)->ob_itself = NULL;1740 ((CFMutableDataRefObject *)self)->ob_freeit = CFRelease;1741 return self;1742 }1743 1744 #define CFMutableDataRefObj_tp_free PyObject_Del1745 1746 1747 PyTypeObject CFMutableDataRef_Type = {1748 PyObject_HEAD_INIT(NULL)1749 0, /*ob_size*/1750 "_CF.CFMutableDataRef", /*tp_name*/1751 sizeof(CFMutableDataRefObject), /*tp_basicsize*/1752 0, /*tp_itemsize*/1753 /* methods */1754 (destructor) CFMutableDataRefObj_dealloc, /*tp_dealloc*/1755 0, /*tp_print*/1756 (getattrfunc)0, /*tp_getattr*/1757 (setattrfunc)0, /*tp_setattr*/1758 (cmpfunc) CFMutableDataRefObj_compare, /*tp_compare*/1759 (reprfunc) CFMutableDataRefObj_repr, /*tp_repr*/1760 (PyNumberMethods *)0, /* tp_as_number */1761 (PySequenceMethods *)0, /* tp_as_sequence */1762 (PyMappingMethods *)0, /* tp_as_mapping */1763 (hashfunc) CFMutableDataRefObj_hash, /*tp_hash*/1764 0, /*tp_call*/1765 0, /*tp_str*/1766 PyObject_GenericGetAttr, /*tp_getattro*/1767 PyObject_GenericSetAttr, /*tp_setattro */1768 0, /*tp_as_buffer*/1769 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */1770 0, /*tp_doc*/1771 0, /*tp_traverse*/1772 0, /*tp_clear*/1773 0, /*tp_richcompare*/1774 0, /*tp_weaklistoffset*/1775 0, /*tp_iter*/1776 0, /*tp_iternext*/1777 CFMutableDataRefObj_methods, /* tp_methods */1778 0, /*tp_members*/1779 CFMutableDataRefObj_getsetlist, /*tp_getset*/1780 0, /*tp_base*/1781 0, /*tp_dict*/1782 0, /*tp_descr_get*/1783 0, /*tp_descr_set*/1784 0, /*tp_dictoffset*/1785 CFMutableDataRefObj_tp_init, /* tp_init */1786 CFMutableDataRefObj_tp_alloc, /* tp_alloc */1787 CFMutableDataRefObj_tp_new, /* tp_new */1788 CFMutableDataRefObj_tp_free, /* tp_free */1789 };1790 1791 /* ---------------- End object type CFMutableDataRef ---------------- */1792 1793 1794 /* -------------------- Object type CFStringRef --------------------- */1795 1796 PyTypeObject CFStringRef_Type;1797 1798 #define CFStringRefObj_Check(x) ((x)->ob_type == &CFStringRef_Type || PyObject_TypeCheck((x), &CFStringRef_Type))1799 1800 typedef struct CFStringRefObject {1801 PyObject_HEAD1802 CFStringRef ob_itself;1803 void (*ob_freeit)(CFTypeRef ptr);1804 } CFStringRefObject;1805 1806 PyObject *CFStringRefObj_New(CFStringRef itself)1807 {1808 CFStringRefObject *it;1809 if (itself == NULL)1810 {1811 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");1812 return NULL;1813 }1814 it = PyObject_NEW(CFStringRefObject, &CFStringRef_Type);1815 if (it == NULL) return NULL;1816 /* XXXX Should we tp_init or tp_new our basetype? */1817 it->ob_itself = itself;1818 it->ob_freeit = CFRelease;1819 return (PyObject *)it;1820 }1821 1822 int CFStringRefObj_Convert(PyObject *v, CFStringRef *p_itself)1823 {1824 1825 if (v == Py_None) { *p_itself = NULL; return 1; }1826 if (PyString_Check(v)) {1827 char *cStr;1828 if (!PyArg_Parse(v, "es", "ascii", &cStr))1829 return 0;1830 *p_itself = CFStringCreateWithCString((CFAllocatorRef)NULL, cStr, kCFStringEncodingASCII);1831 PyMem_Free(cStr);1832 return 1;1833 }1834 if (PyUnicode_Check(v)) {1835 /* We use the CF types here, if Python was configured differently that will give an error */1836 CFIndex size = PyUnicode_GetSize(v);1837 UniChar *unichars = PyUnicode_AsUnicode(v);1838 if (!unichars) return 0;1839 *p_itself = CFStringCreateWithCharacters((CFAllocatorRef)NULL, unichars, size);1840 return 1;1841 }1842 1843 1844 if (!CFStringRefObj_Check(v))1845 {1846 PyErr_SetString(PyExc_TypeError, "CFStringRef required");1847 return 0;1848 }1849 *p_itself = ((CFStringRefObject *)v)->ob_itself;1850 return 1;1851 }1852 1853 static void CFStringRefObj_dealloc(CFStringRefObject *self)1854 {1855 if (self->ob_freeit && self->ob_itself)1856 {1857 self->ob_freeit((CFTypeRef)self->ob_itself);1858 self->ob_itself = NULL;1859 }1860 CFTypeRef_Type.tp_dealloc((PyObject *)self);1861 }1862 1863 static PyObject *CFStringRefObj_CFStringCreateWithSubstring(CFStringRefObject *_self, PyObject *_args)1864 {1865 PyObject *_res = NULL;1866 CFStringRef _rv;1867 CFRange range;1868 if (!PyArg_ParseTuple(_args, "O&",1869 CFRange_Convert, &range))1870 return NULL;1871 _rv = CFStringCreateWithSubstring((CFAllocatorRef)NULL,1872 _self->ob_itself,1873 range);1874 _res = Py_BuildValue("O&",1875 CFStringRefObj_New, _rv);1876 return _res;1877 }1878 1879 static PyObject *CFStringRefObj_CFStringCreateCopy(CFStringRefObject *_self, PyObject *_args)1880 {1881 PyObject *_res = NULL;1882 CFStringRef _rv;1883 if (!PyArg_ParseTuple(_args, ""))1884 return NULL;1885 _rv = CFStringCreateCopy((CFAllocatorRef)NULL,1886 _self->ob_itself);1887 _res = Py_BuildValue("O&",1888 CFStringRefObj_New, _rv);1889 return _res;1890 }1891 1892 static PyObject *CFStringRefObj_CFStringGetLength(CFStringRefObject *_self, PyObject *_args)1893 {1894 PyObject *_res = NULL;1895 CFIndex _rv;1896 #ifndef CFStringGetLength1897 PyMac_PRECHECK(CFStringGetLength);1898 #endif1899 if (!PyArg_ParseTuple(_args, ""))1900 return NULL;1901 _rv = CFStringGetLength(_self->ob_itself);1902 _res = Py_BuildValue("l",1903 _rv);1904 return _res;1905 }1906 1907 static PyObject *CFStringRefObj_CFStringGetBytes(CFStringRefObject *_self, PyObject *_args)1908 {1909 PyObject *_res = NULL;1910 CFIndex _rv;1911 CFRange range;1912 CFStringEncoding encoding;1913 UInt8 lossByte;1914 Boolean isExternalRepresentation;1915 UInt8 buffer;1916 CFIndex maxBufLen;1917 CFIndex usedBufLen;1918 #ifndef CFStringGetBytes1919 PyMac_PRECHECK(CFStringGetBytes);1920 #endif1921 if (!PyArg_ParseTuple(_args, "O&lbll",1922 CFRange_Convert, &range,1923 &encoding,1924 &lossByte,1925 &isExternalRepresentation,1926 &maxBufLen))1927 return NULL;1928 _rv = CFStringGetBytes(_self->ob_itself,1929 range,1930 encoding,1931 lossByte,1932 isExternalRepresentation,1933 &buffer,1934 maxBufLen,1935 &usedBufLen);1936 _res = Py_BuildValue("lbl",1937 _rv,1938 buffer,1939 usedBufLen);1940 return _res;1941 }1942 1943 static PyObject *CFStringRefObj_CFStringCreateExternalRepresentation(CFStringRefObject *_self, PyObject *_args)1944 {1945 PyObject *_res = NULL;1946 CFDataRef _rv;1947 CFStringEncoding encoding;1948 UInt8 lossByte;1949 if (!PyArg_ParseTuple(_args, "lb",1950 &encoding,1951 &lossByte))1952 return NULL;1953 _rv = CFStringCreateExternalRepresentation((CFAllocatorRef)NULL,1954 _self->ob_itself,1955 encoding,1956 lossByte);1957 _res = Py_BuildValue("O&",1958 CFDataRefObj_New, _rv);1959 return _res;1960 }1961 1962 static PyObject *CFStringRefObj_CFStringGetSmallestEncoding(CFStringRefObject *_self, PyObject *_args)1963 {1964 PyObject *_res = NULL;1965 CFStringEncoding _rv;1966 #ifndef CFStringGetSmallestEncoding1967 PyMac_PRECHECK(CFStringGetSmallestEncoding);1968 #endif1969 if (!PyArg_ParseTuple(_args, ""))1970 return NULL;1971 _rv = CFStringGetSmallestEncoding(_self->ob_itself);1972 _res = Py_BuildValue("l",1973 _rv);1974 return _res;1975 }1976 1977 static PyObject *CFStringRefObj_CFStringGetFastestEncoding(CFStringRefObject *_self, PyObject *_args)1978 {1979 PyObject *_res = NULL;1980 CFStringEncoding _rv;1981 #ifndef CFStringGetFastestEncoding1982 PyMac_PRECHECK(CFStringGetFastestEncoding);1983 #endif1984 if (!PyArg_ParseTuple(_args, ""))1985 return NULL;1986 _rv = CFStringGetFastestEncoding(_self->ob_itself);1987 _res = Py_BuildValue("l",1988 _rv);1989 return _res;1990 }1991 1992 static PyObject *CFStringRefObj_CFStringCompareWithOptions(CFStringRefObject *_self, PyObject *_args)1993 {1994 PyObject *_res = NULL;1995 CFComparisonResult _rv;1996 CFStringRef theString2;1997 CFRange rangeToCompare;1998 CFOptionFlags compareOptions;1999 #ifndef CFStringCompareWithOptions2000 PyMac_PRECHECK(CFStringCompareWithOptions);2001 #endif2002 if (!PyArg_ParseTuple(_args, "O&O&l",2003 CFStringRefObj_Convert, &theString2,2004 CFRange_Convert, &rangeToCompare,2005 &compareOptions))2006 return NULL;2007 _rv = CFStringCompareWithOptions(_self->ob_itself,2008 theString2,2009 rangeToCompare,2010 compareOptions);2011 _res = Py_BuildValue("l",2012 _rv);2013 return _res;2014 }2015 2016 static PyObject *CFStringRefObj_CFStringCompare(CFStringRefObject *_self, PyObject *_args)2017 {2018 PyObject *_res = NULL;2019 CFComparisonResult _rv;2020 CFStringRef theString2;2021 CFOptionFlags compareOptions;2022 #ifndef CFStringCompare2023 PyMac_PRECHECK(CFStringCompare);2024 #endif2025 if (!PyArg_ParseTuple(_args, "O&l",2026 CFStringRefObj_Convert, &theString2,2027 &compareOptions))2028 return NULL;2029 _rv = CFStringCompare(_self->ob_itself,2030 theString2,2031 compareOptions);2032 _res = Py_BuildValue("l",2033 _rv);2034 return _res;2035 }2036 2037 static PyObject *CFStringRefObj_CFStringFindWithOptions(CFStringRefObject *_self, PyObject *_args)2038 {2039 PyObject *_res = NULL;2040 Boolean _rv;2041 CFStringRef stringToFind;2042 CFRange rangeToSearch;2043 CFOptionFlags searchOptions;2044 CFRange result;2045 #ifndef CFStringFindWithOptions2046 PyMac_PRECHECK(CFStringFindWithOptions);2047 #endif2048 if (!PyArg_ParseTuple(_args, "O&O&l",2049 CFStringRefObj_Convert, &stringToFind,2050 CFRange_Convert, &rangeToSearch,2051 &searchOptions))2052 return NULL;2053 _rv = CFStringFindWithOptions(_self->ob_itself,2054 stringToFind,2055 rangeToSearch,2056 searchOptions,2057 &result);2058 _res = Py_BuildValue("lO&",2059 _rv,2060 CFRange_New, result);2061 return _res;2062 }2063 2064 static PyObject *CFStringRefObj_CFStringCreateArrayWithFindResults(CFStringRefObject *_self, PyObject *_args)2065 {2066 PyObject *_res = NULL;2067 CFArrayRef _rv;2068 CFStringRef stringToFind;2069 CFRange rangeToSearch;2070 CFOptionFlags compareOptions;2071 if (!PyArg_ParseTuple(_args, "O&O&l",2072 CFStringRefObj_Convert, &stringToFind,2073 CFRange_Convert, &rangeToSearch,2074 &compareOptions))2075 return NULL;2076 _rv = CFStringCreateArrayWithFindResults((CFAllocatorRef)NULL,2077 _self->ob_itself,2078 stringToFind,2079 rangeToSearch,2080 compareOptions);2081 _res = Py_BuildValue("O&",2082 CFArrayRefObj_New, _rv);2083 return _res;2084 }2085 2086 static PyObject *CFStringRefObj_CFStringFind(CFStringRefObject *_self, PyObject *_args)2087 {2088 PyObject *_res = NULL;2089 CFRange _rv;2090 CFStringRef stringToFind;2091 CFOptionFlags compareOptions;2092 #ifndef CFStringFind2093 PyMac_PRECHECK(CFStringFind);2094 #endif2095 if (!PyArg_ParseTuple(_args, "O&l",2096 CFStringRefObj_Convert, &stringToFind,2097 &compareOptions))2098 return NULL;2099 _rv = CFStringFind(_self->ob_itself,2100 stringToFind,2101 compareOptions);2102 _res = Py_BuildValue("O&",2103 CFRange_New, _rv);2104 return _res;2105 }2106 2107 static PyObject *CFStringRefObj_CFStringHasPrefix(CFStringRefObject *_self, PyObject *_args)2108 {2109 PyObject *_res = NULL;2110 Boolean _rv;2111 CFStringRef prefix;2112 #ifndef CFStringHasPrefix2113 PyMac_PRECHECK(CFStringHasPrefix);2114 #endif2115 if (!PyArg_ParseTuple(_args, "O&",2116 CFStringRefObj_Convert, &prefix))2117 return NULL;2118 _rv = CFStringHasPrefix(_self->ob_itself,2119 prefix);2120 _res = Py_BuildValue("l",2121 _rv);2122 return _res;2123 }2124 2125 static PyObject *CFStringRefObj_CFStringHasSuffix(CFStringRefObject *_self, PyObject *_args)2126 {2127 PyObject *_res = NULL;2128 Boolean _rv;2129 CFStringRef suffix;2130 #ifndef CFStringHasSuffix2131 PyMac_PRECHECK(CFStringHasSuffix);2132 #endif2133 if (!PyArg_ParseTuple(_args, "O&",2134 CFStringRefObj_Convert, &suffix))2135 return NULL;2136 _rv = CFStringHasSuffix(_self->ob_itself,2137 suffix);2138 _res = Py_BuildValue("l",2139 _rv);2140 return _res;2141 }2142 2143 static PyObject *CFStringRefObj_CFStringGetLineBounds(CFStringRefObject *_self, PyObject *_args)2144 {2145 PyObject *_res = NULL;2146 CFRange range;2147 CFIndex lineBeginIndex;2148 CFIndex lineEndIndex;2149 CFIndex contentsEndIndex;2150 #ifndef CFStringGetLineBounds2151 PyMac_PRECHECK(CFStringGetLineBounds);2152 #endif2153 if (!PyArg_ParseTuple(_args, "O&",2154 CFRange_Convert, &range))2155 return NULL;2156 CFStringGetLineBounds(_self->ob_itself,2157 range,2158 &lineBeginIndex,2159 &lineEndIndex,2160 &contentsEndIndex);2161 _res = Py_BuildValue("lll",2162 lineBeginIndex,2163 lineEndIndex,2164 contentsEndIndex);2165 return _res;2166 }2167 2168 static PyObject *CFStringRefObj_CFStringCreateArrayBySeparatingStrings(CFStringRefObject *_self, PyObject *_args)2169 {2170 PyObject *_res = NULL;2171 CFArrayRef _rv;2172 CFStringRef separatorString;2173 if (!PyArg_ParseTuple(_args, "O&",2174 CFStringRefObj_Convert, &separatorString))2175 return NULL;2176 _rv = CFStringCreateArrayBySeparatingStrings((CFAllocatorRef)NULL,2177 _self->ob_itself,2178 separatorString);2179 _res = Py_BuildValue("O&",2180 CFArrayRefObj_New, _rv);2181 return _res;2182 }2183 2184 static PyObject *CFStringRefObj_CFStringGetIntValue(CFStringRefObject *_self, PyObject *_args)2185 {2186 PyObject *_res = NULL;2187 SInt32 _rv;2188 #ifndef CFStringGetIntValue2189 PyMac_PRECHECK(CFStringGetIntValue);2190 #endif2191 if (!PyArg_ParseTuple(_args, ""))2192 return NULL;2193 _rv = CFStringGetIntValue(_self->ob_itself);2194 _res = Py_BuildValue("l",2195 _rv);2196 return _res;2197 }2198 2199 static PyObject *CFStringRefObj_CFStringGetDoubleValue(CFStringRefObject *_self, PyObject *_args)2200 {2201 PyObject *_res = NULL;2202 double _rv;2203 #ifndef CFStringGetDoubleValue2204 PyMac_PRECHECK(CFStringGetDoubleValue);2205 #endif2206 if (!PyArg_ParseTuple(_args, ""))2207 return NULL;2208 _rv = CFStringGetDoubleValue(_self->ob_itself);2209 _res = Py_BuildValue("d",2210 _rv);2211 return _res;2212 }2213 2214 static PyObject *CFStringRefObj_CFStringConvertIANACharSetNameToEncoding(CFStringRefObject *_self, PyObject *_args)2215 {2216 PyObject *_res = NULL;2217 CFStringEncoding _rv;2218 #ifndef CFStringConvertIANACharSetNameToEncoding2219 PyMac_PRECHECK(CFStringConvertIANACharSetNameToEncoding);2220 #endif2221 if (!PyArg_ParseTuple(_args, ""))2222 return NULL;2223 _rv = CFStringConvertIANACharSetNameToEncoding(_self->ob_itself);2224 _res = Py_BuildValue("l",2225 _rv);2226 return _res;2227 }2228 2229 static PyObject *CFStringRefObj_CFShowStr(CFStringRefObject *_self, PyObject *_args)2230 {2231 PyObject *_res = NULL;2232 #ifndef CFShowStr2233 PyMac_PRECHECK(CFShowStr);2234 #endif2235 if (!PyArg_ParseTuple(_args, ""))2236 return NULL;2237 CFShowStr(_self->ob_itself);2238 Py_INCREF(Py_None);2239 _res = Py_None;2240 return _res;2241 }2242 2243 static PyObject *CFStringRefObj_CFURLCreateWithString(CFStringRefObject *_self, PyObject *_args)2244 {2245 PyObject *_res = NULL;2246 CFURLRef _rv;2247 CFURLRef baseURL;2248 if (!PyArg_ParseTuple(_args, "O&",2249 OptionalCFURLRefObj_Convert, &baseURL))2250 return NULL;2251 _rv = CFURLCreateWithString((CFAllocatorRef)NULL,2252 _self->ob_itself,2253 baseURL);2254 _res = Py_BuildValue("O&",2255 CFURLRefObj_New, _rv);2256 return _res;2257 }2258 2259 static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPath(CFStringRefObject *_self, PyObject *_args)2260 {2261 PyObject *_res = NULL;2262 CFURLRef _rv;2263 CFURLPathStyle pathStyle;2264 Boolean isDirectory;2265 if (!PyArg_ParseTuple(_args, "ll",2266 &pathStyle,2267 &isDirectory))2268 return NULL;2269 _rv = CFURLCreateWithFileSystemPath((CFAllocatorRef)NULL,2270 _self->ob_itself,2271 pathStyle,2272 isDirectory);2273 _res = Py_BuildValue("O&",2274 CFURLRefObj_New, _rv);2275 return _res;2276 }2277 2278 static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase(CFStringRefObject *_self, PyObject *_args)2279 {2280 PyObject *_res = NULL;2281 CFURLRef _rv;2282 CFURLPathStyle pathStyle;2283 Boolean isDirectory;2284 CFURLRef baseURL;2285 if (!PyArg_ParseTuple(_args, "llO&",2286 &pathStyle,2287 &isDirectory,2288 OptionalCFURLRefObj_Convert, &baseURL))2289 return NULL;2290 _rv = CFURLCreateWithFileSystemPathRelativeToBase((CFAllocatorRef)NULL,2291 _self->ob_itself,2292 pathStyle,2293 isDirectory,2294 baseURL);2295 _res = Py_BuildValue("O&",2296 CFURLRefObj_New, _rv);2297 return _res;2298 }2299 2300 static PyObject *CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes(CFStringRefObject *_self, PyObject *_args)2301 {2302 PyObject *_res = NULL;2303 CFStringRef _rv;2304 CFStringRef charactersToLeaveEscaped;2305 if (!PyArg_ParseTuple(_args, "O&",2306 CFStringRefObj_Convert, &charactersToLeaveEscaped))2307 return NULL;2308 _rv = CFURLCreateStringByReplacingPercentEscapes((CFAllocatorRef)NULL,2309 _self->ob_itself,2310 charactersToLeaveEscaped);2311 _res = Py_BuildValue("O&",2312 CFStringRefObj_New, _rv);2313 return _res;2314 }2315 2316 static PyObject *CFStringRefObj_CFURLCreateStringByAddingPercentEscapes(CFStringRefObject *_self, PyObject *_args)2317 {2318 PyObject *_res = NULL;2319 CFStringRef _rv;2320 CFStringRef charactersToLeaveUnescaped;2321 CFStringRef legalURLCharactersToBeEscaped;2322 CFStringEncoding encoding;2323 if (!PyArg_ParseTuple(_args, "O&O&l",2324 CFStringRefObj_Convert, &charactersToLeaveUnescaped,2325 CFStringRefObj_Convert, &legalURLCharactersToBeEscaped,2326 &encoding))2327 return NULL;2328 _rv = CFURLCreateStringByAddingPercentEscapes((CFAllocatorRef)NULL,2329 _self->ob_itself,2330 charactersToLeaveUnescaped,2331 legalURLCharactersToBeEscaped,2332 encoding);2333 _res = Py_BuildValue("O&",2334 CFStringRefObj_New, _rv);2335 return _res;2336 }2337 2338 static PyObject *CFStringRefObj_CFStringGetString(CFStringRefObject *_self, PyObject *_args)2339 {2340 PyObject *_res = NULL;2341 2342 int size = CFStringGetLength(_self->ob_itself)+1;2343 char *data = malloc(size);2344 2345 if( data == NULL ) return PyErr_NoMemory();2346 if ( CFStringGetCString(_self->ob_itself, data, size, 0) ) {2347 _res = (PyObject *)PyString_FromString(data);2348 } else {2349 PyErr_SetString(PyExc_RuntimeError, "CFStringGetCString could not fit the string");2350 _res = NULL;2351 }2352 free(data);2353 return _res;2354 2355 }2356 2357 static PyObject *CFStringRefObj_CFStringGetUnicode(CFStringRefObject *_self, PyObject *_args)2358 {2359 PyObject *_res = NULL;2360 2361 int size = CFStringGetLength(_self->ob_itself)+1;2362 Py_UNICODE *data = malloc(size*sizeof(Py_UNICODE));2363 CFRange range;2364 2365 range.location = 0;2366 range.length = size;2367 if( data == NULL ) return PyErr_NoMemory();2368 CFStringGetCharacters(_self->ob_itself, range, data);2369 _res = (PyObject *)PyUnicode_FromUnicode(data, size-1);2370 free(data);2371 return _res;2372 2373 }2374 2375 static PyMethodDef CFStringRefObj_methods[] = {2376 {"CFStringCreateWithSubstring", (PyCFunction)CFStringRefObj_CFStringCreateWithSubstring, 1,2377 PyDoc_STR("(CFRange range) -> (CFStringRef _rv)")},2378 {"CFStringCreateCopy", (PyCFunction)CFStringRefObj_CFStringCreateCopy, 1,2379 PyDoc_STR("() -> (CFStringRef _rv)")},2380 {"CFStringGetLength", (PyCFunction)CFStringRefObj_CFStringGetLength, 1,2381 PyDoc_STR("() -> (CFIndex _rv)")},2382 {"CFStringGetBytes", (PyCFunction)CFStringRefObj_CFStringGetBytes, 1,2383 PyDoc_STR("(CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, CFIndex maxBufLen) -> (CFIndex _rv, UInt8 buffer, CFIndex usedBufLen)")},2384 {"CFStringCreateExternalRepresentation", (PyCFunction)CFStringRefObj_CFStringCreateExternalRepresentation, 1,2385 PyDoc_STR("(CFStringEncoding encoding, UInt8 lossByte) -> (CFDataRef _rv)")},2386 {"CFStringGetSmallestEncoding", (PyCFunction)CFStringRefObj_CFStringGetSmallestEncoding, 1,2387 PyDoc_STR("() -> (CFStringEncoding _rv)")},2388 {"CFStringGetFastestEncoding", (PyCFunction)CFStringRefObj_CFStringGetFastestEncoding, 1,2389 PyDoc_STR("() -> (CFStringEncoding _rv)")},2390 {"CFStringCompareWithOptions", (PyCFunction)CFStringRefObj_CFStringCompareWithOptions, 1,2391 PyDoc_STR("(CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},2392 {"CFStringCompare", (PyCFunction)CFStringRefObj_CFStringCompare, 1,2393 PyDoc_STR("(CFStringRef theString2, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},2394 {"CFStringFindWithOptions", (PyCFunction)CFStringRefObj_CFStringFindWithOptions, 1,2395 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions) -> (Boolean _rv, CFRange result)")},2396 {"CFStringCreateArrayWithFindResults", (PyCFunction)CFStringRefObj_CFStringCreateArrayWithFindResults, 1,2397 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions) -> (CFArrayRef _rv)")},2398 {"CFStringFind", (PyCFunction)CFStringRefObj_CFStringFind, 1,2399 PyDoc_STR("(CFStringRef stringToFind, CFOptionFlags compareOptions) -> (CFRange _rv)")},2400 {"CFStringHasPrefix", (PyCFunction)CFStringRefObj_CFStringHasPrefix, 1,2401 PyDoc_STR("(CFStringRef prefix) -> (Boolean _rv)")},2402 {"CFStringHasSuffix", (PyCFunction)CFStringRefObj_CFStringHasSuffix, 1,2403 PyDoc_STR("(CFStringRef suffix) -> (Boolean _rv)")},2404 {"CFStringGetLineBounds", (PyCFunction)CFStringRefObj_CFStringGetLineBounds, 1,2405 PyDoc_STR("(CFRange range) -> (CFIndex lineBeginIndex, CFIndex lineEndIndex, CFIndex contentsEndIndex)")},2406 {"CFStringCreateArrayBySeparatingStrings", (PyCFunction)CFStringRefObj_CFStringCreateArrayBySeparatingStrings, 1,2407 PyDoc_STR("(CFStringRef separatorString) -> (CFArrayRef _rv)")},2408 {"CFStringGetIntValue", (PyCFunction)CFStringRefObj_CFStringGetIntValue, 1,2409 PyDoc_STR("() -> (SInt32 _rv)")},2410 {"CFStringGetDoubleValue", (PyCFunction)CFStringRefObj_CFStringGetDoubleValue, 1,2411 PyDoc_STR("() -> (double _rv)")},2412 {"CFStringConvertIANACharSetNameToEncoding", (PyCFunction)CFStringRefObj_CFStringConvertIANACharSetNameToEncoding, 1,2413 PyDoc_STR("() -> (CFStringEncoding _rv)")},2414 {"CFShowStr", (PyCFunction)CFStringRefObj_CFShowStr, 1,2415 PyDoc_STR("() -> None")},2416 {"CFURLCreateWithString", (PyCFunction)CFStringRefObj_CFURLCreateWithString, 1,2417 PyDoc_STR("(CFURLRef baseURL) -> (CFURLRef _rv)")},2418 {"CFURLCreateWithFileSystemPath", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPath, 1,2419 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory) -> (CFURLRef _rv)")},2420 {"CFURLCreateWithFileSystemPathRelativeToBase", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase, 1,2421 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")},2422 {"CFURLCreateStringByReplacingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes, 1,2423 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},2424 {"CFURLCreateStringByAddingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByAddingPercentEscapes, 1,2425 PyDoc_STR("(CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding) -> (CFStringRef _rv)")},2426 {"CFStringGetString", (PyCFunction)CFStringRefObj_CFStringGetString, 1,2427 PyDoc_STR("() -> (string _rv)")},2428 {"CFStringGetUnicode", (PyCFunction)CFStringRefObj_CFStringGetUnicode, 1,2429 PyDoc_STR("() -> (unicode _rv)")},2430 {NULL, NULL, 0}2431 };2432 2433 #define CFStringRefObj_getsetlist NULL2434 2435 2436 static int CFStringRefObj_compare(CFStringRefObject *self, CFStringRefObject *other)2437 {2438 /* XXXX Or should we use CFEqual?? */2439 if ( self->ob_itself > other->ob_itself ) return 1;2440 if ( self->ob_itself < other->ob_itself ) return -1;2441 return 0;2442 }2443 2444 static PyObject * CFStringRefObj_repr(CFStringRefObject *self)2445 {2446 char buf[100];2447 sprintf(buf, "<CFStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);2448 return PyString_FromString(buf);2449 }2450 2451 static int CFStringRefObj_hash(CFStringRefObject *self)2452 {2453 /* XXXX Or should we use CFHash?? */2454 return (int)self->ob_itself;2455 }2456 static int CFStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)2457 {2458 CFStringRef itself;2459 char *kw[] = {"itself", 0};2460 2461 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFStringRefObj_Convert, &itself))2462 {2463 ((CFStringRefObject *)_self)->ob_itself = itself;2464 return 0;2465 }2466 2467 /* Any CFTypeRef descendent is allowed as initializer too */2468 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))2469 {2470 ((CFStringRefObject *)_self)->ob_itself = itself;2471 return 0;2472 }2473 return -1;2474 }2475 2476 #define CFStringRefObj_tp_alloc PyType_GenericAlloc2477 2478 static PyObject *CFStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)2479 {2480 PyObject *self;2481 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;2482 ((CFStringRefObject *)self)->ob_itself = NULL;2483 ((CFStringRefObject *)self)->ob_freeit = CFRelease;2484 return self;2485 }2486 2487 #define CFStringRefObj_tp_free PyObject_Del2488 2489 2490 PyTypeObject CFStringRef_Type = {2491 PyObject_HEAD_INIT(NULL)2492 0, /*ob_size*/2493 "_CF.CFStringRef", /*tp_name*/2494 sizeof(CFStringRefObject), /*tp_basicsize*/2495 0, /*tp_itemsize*/2496 /* methods */2497 (destructor) CFStringRefObj_dealloc, /*tp_dealloc*/2498 0, /*tp_print*/2499 (getattrfunc)0, /*tp_getattr*/2500 (setattrfunc)0, /*tp_setattr*/2501 (cmpfunc) CFStringRefObj_compare, /*tp_compare*/2502 (reprfunc) CFStringRefObj_repr, /*tp_repr*/2503 (PyNumberMethods *)0, /* tp_as_number */2504 (PySequenceMethods *)0, /* tp_as_sequence */2505 (PyMappingMethods *)0, /* tp_as_mapping */2506 (hashfunc) CFStringRefObj_hash, /*tp_hash*/2507 0, /*tp_call*/2508 0, /*tp_str*/2509 PyObject_GenericGetAttr, /*tp_getattro*/2510 PyObject_GenericSetAttr, /*tp_setattro */2511 0, /*tp_as_buffer*/2512 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */2513 0, /*tp_doc*/2514 0, /*tp_traverse*/2515 0, /*tp_clear*/2516 0, /*tp_richcompare*/2517 0, /*tp_weaklistoffset*/2518 0, /*tp_iter*/2519 0, /*tp_iternext*/2520 CFStringRefObj_methods, /* tp_methods */2521 0, /*tp_members*/2522 CFStringRefObj_getsetlist, /*tp_getset*/2523 0, /*tp_base*/2524 0, /*tp_dict*/2525 0, /*tp_descr_get*/2526 0, /*tp_descr_set*/2527 0, /*tp_dictoffset*/2528 CFStringRefObj_tp_init, /* tp_init */2529 CFStringRefObj_tp_alloc, /* tp_alloc */2530 CFStringRefObj_tp_new, /* tp_new */2531 CFStringRefObj_tp_free, /* tp_free */2532 };2533 2534 /* ------------------ End object type CFStringRef ------------------- */2535 2536 2537 /* ----------------- Object type CFMutableStringRef ----------------- */2538 2539 PyTypeObject CFMutableStringRef_Type;2540 2541 #define CFMutableStringRefObj_Check(x) ((x)->ob_type == &CFMutableStringRef_Type || PyObject_TypeCheck((x), &CFMutableStringRef_Type))2542 2543 typedef struct CFMutableStringRefObject {2544 PyObject_HEAD2545 CFMutableStringRef ob_itself;2546 void (*ob_freeit)(CFTypeRef ptr);2547 } CFMutableStringRefObject;2548 2549 PyObject *CFMutableStringRefObj_New(CFMutableStringRef itself)2550 {2551 CFMutableStringRefObject *it;2552 if (itself == NULL)2553 {2554 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");2555 return NULL;2556 }2557 it = PyObject_NEW(CFMutableStringRefObject, &CFMutableStringRef_Type);2558 if (it == NULL) return NULL;2559 /* XXXX Should we tp_init or tp_new our basetype? */2560 it->ob_itself = itself;2561 it->ob_freeit = CFRelease;2562 return (PyObject *)it;2563 }2564 2565 int CFMutableStringRefObj_Convert(PyObject *v, CFMutableStringRef *p_itself)2566 {2567 2568 if (v == Py_None) { *p_itself = NULL; return 1; }2569 /* Check for other CF objects here */2570 2571 if (!CFMutableStringRefObj_Check(v))2572 {2573 PyErr_SetString(PyExc_TypeError, "CFMutableStringRef required");2574 return 0;2575 }2576 *p_itself = ((CFMutableStringRefObject *)v)->ob_itself;2577 return 1;2578 }2579 2580 static void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self)2581 {2582 if (self->ob_freeit && self->ob_itself)2583 {2584 self->ob_freeit((CFTypeRef)self->ob_itself);2585 self->ob_itself = NULL;2586 }2587 CFStringRef_Type.tp_dealloc((PyObject *)self);2588 }2589 2590 static PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *_self, PyObject *_args)2591 {2592 PyObject *_res = NULL;2593 CFStringRef appendedString;2594 #ifndef CFStringAppend2595 PyMac_PRECHECK(CFStringAppend);2596 #endif2597 if (!PyArg_ParseTuple(_args, "O&",2598 CFStringRefObj_Convert, &appendedString))2599 return NULL;2600 CFStringAppend(_self->ob_itself,2601 appendedString);2602 Py_INCREF(Py_None);2603 _res = Py_None;2604 return _res;2605 }2606 2607 static PyObject *CFMutableStringRefObj_CFStringAppendCharacters(CFMutableStringRefObject *_self, PyObject *_args)2608 {2609 PyObject *_res = NULL;2610 UniChar *chars__in__;2611 UniCharCount chars__len__;2612 int chars__in_len__;2613 #ifndef CFStringAppendCharacters2614 PyMac_PRECHECK(CFStringAppendCharacters);2615 #endif2616 if (!PyArg_ParseTuple(_args, "u#",2617 &chars__in__, &chars__in_len__))2618 return NULL;2619 chars__len__ = chars__in_len__;2620 CFStringAppendCharacters(_self->ob_itself,2621 chars__in__, chars__len__);2622 Py_INCREF(Py_None);2623 _res = Py_None;2624 return _res;2625 }2626 2627 static PyObject *CFMutableStringRefObj_CFStringAppendPascalString(CFMutableStringRefObject *_self, PyObject *_args)2628 {2629 PyObject *_res = NULL;2630 Str255 pStr;2631 CFStringEncoding encoding;2632 #ifndef CFStringAppendPascalString2633 PyMac_PRECHECK(CFStringAppendPascalString);2634 #endif2635 if (!PyArg_ParseTuple(_args, "O&l",2636 PyMac_GetStr255, pStr,2637 &encoding))2638 return NULL;2639 CFStringAppendPascalString(_self->ob_itself,2640 pStr,2641 encoding);2642 Py_INCREF(Py_None);2643 _res = Py_None;2644 return _res;2645 }2646 2647 static PyObject *CFMutableStringRefObj_CFStringAppendCString(CFMutableStringRefObject *_self, PyObject *_args)2648 {2649 PyObject *_res = NULL;2650 char* cStr;2651 CFStringEncoding encoding;2652 #ifndef CFStringAppendCString2653 PyMac_PRECHECK(CFStringAppendCString);2654 #endif2655 if (!PyArg_ParseTuple(_args, "sl",2656 &cStr,2657 &encoding))2658 return NULL;2659 CFStringAppendCString(_self->ob_itself,2660 cStr,2661 encoding);2662 Py_INCREF(Py_None);2663 _res = Py_None;2664 return _res;2665 }2666 2667 static PyObject *CFMutableStringRefObj_CFStringInsert(CFMutableStringRefObject *_self, PyObject *_args)2668 {2669 PyObject *_res = NULL;2670 CFIndex idx;2671 CFStringRef insertedStr;2672 #ifndef CFStringInsert2673 PyMac_PRECHECK(CFStringInsert);2674 #endif2675 if (!PyArg_ParseTuple(_args, "lO&",2676 &idx,2677 CFStringRefObj_Convert, &insertedStr))2678 return NULL;2679 CFStringInsert(_self->ob_itself,2680 idx,2681 insertedStr);2682 Py_INCREF(Py_None);2683 _res = Py_None;2684 return _res;2685 }2686 2687 static PyObject *CFMutableStringRefObj_CFStringDelete(CFMutableStringRefObject *_self, PyObject *_args)2688 {2689 PyObject *_res = NULL;2690 CFRange range;2691 #ifndef CFStringDelete2692 PyMac_PRECHECK(CFStringDelete);2693 #endif2694 if (!PyArg_ParseTuple(_args, "O&",2695 CFRange_Convert, &range))2696 return NULL;2697 CFStringDelete(_self->ob_itself,2698 range);2699 Py_INCREF(Py_None);2700 _res = Py_None;2701 return _res;2702 }2703 2704 static PyObject *CFMutableStringRefObj_CFStringReplace(CFMutableStringRefObject *_self, PyObject *_args)2705 {2706 PyObject *_res = NULL;2707 CFRange range;2708 CFStringRef replacement;2709 #ifndef CFStringReplace2710 PyMac_PRECHECK(CFStringReplace);2711 #endif2712 if (!PyArg_ParseTuple(_args, "O&O&",2713 CFRange_Convert, &range,2714 CFStringRefObj_Convert, &replacement))2715 return NULL;2716 CFStringReplace(_self->ob_itself,2717 range,2718 replacement);2719 Py_INCREF(Py_None);2720 _res = Py_None;2721 return _res;2722 }2723 2724 static PyObject *CFMutableStringRefObj_CFStringReplaceAll(CFMutableStringRefObject *_self, PyObject *_args)2725 {2726 PyObject *_res = NULL;2727 CFStringRef replacement;2728 #ifndef CFStringReplaceAll2729 PyMac_PRECHECK(CFStringReplaceAll);2730 #endif2731 if (!PyArg_ParseTuple(_args, "O&",2732 CFStringRefObj_Convert, &replacement))2733 return NULL;2734 CFStringReplaceAll(_self->ob_itself,2735 replacement);2736 Py_INCREF(Py_None);2737 _res = Py_None;2738 return _res;2739 }2740 2741 static PyObject *CFMutableStringRefObj_CFStringPad(CFMutableStringRefObject *_self, PyObject *_args)2742 {2743 PyObject *_res = NULL;2744 CFStringRef padString;2745 CFIndex length;2746 CFIndex indexIntoPad;2747 #ifndef CFStringPad2748 PyMac_PRECHECK(CFStringPad);2749 #endif2750 if (!PyArg_ParseTuple(_args, "O&ll",2751 CFStringRefObj_Convert, &padString,2752 &length,2753 &indexIntoPad))2754 return NULL;2755 CFStringPad(_self->ob_itself,2756 padString,2757 length,2758 indexIntoPad);2759 Py_INCREF(Py_None);2760 _res = Py_None;2761 return _res;2762 }2763 2764 static PyObject *CFMutableStringRefObj_CFStringTrim(CFMutableStringRefObject *_self, PyObject *_args)2765 {2766 PyObject *_res = NULL;2767 CFStringRef trimString;2768 #ifndef CFStringTrim2769 PyMac_PRECHECK(CFStringTrim);2770 #endif2771 if (!PyArg_ParseTuple(_args, "O&",2772 CFStringRefObj_Convert, &trimString))2773 return NULL;2774 CFStringTrim(_self->ob_itself,2775 trimString);2776 Py_INCREF(Py_None);2777 _res = Py_None;2778 return _res;2779 }2780 2781 static PyObject *CFMutableStringRefObj_CFStringTrimWhitespace(CFMutableStringRefObject *_self, PyObject *_args)2782 {2783 PyObject *_res = NULL;2784 #ifndef CFStringTrimWhitespace2785 PyMac_PRECHECK(CFStringTrimWhitespace);2786 #endif2787 if (!PyArg_ParseTuple(_args, ""))2788 return NULL;2789 CFStringTrimWhitespace(_self->ob_itself);2790 Py_INCREF(Py_None);2791 _res = Py_None;2792 return _res;2793 }2794 2795 static PyMethodDef CFMutableStringRefObj_methods[] = {2796 {"CFStringAppend", (PyCFunction)CFMutableStringRefObj_CFStringAppend, 1,2797 PyDoc_STR("(CFStringRef appendedString) -> None")},2798 {"CFStringAppendCharacters", (PyCFunction)CFMutableStringRefObj_CFStringAppendCharacters, 1,2799 PyDoc_STR("(Buffer chars) -> None")},2800 {"CFStringAppendPascalString", (PyCFunction)CFMutableStringRefObj_CFStringAppendPascalString, 1,2801 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> None")},2802 {"CFStringAppendCString", (PyCFunction)CFMutableStringRefObj_CFStringAppendCString, 1,2803 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> None")},2804 {"CFStringInsert", (PyCFunction)CFMutableStringRefObj_CFStringInsert, 1,2805 PyDoc_STR("(CFIndex idx, CFStringRef insertedStr) -> None")},2806 {"CFStringDelete", (PyCFunction)CFMutableStringRefObj_CFStringDelete, 1,2807 PyDoc_STR("(CFRange range) -> None")},2808 {"CFStringReplace", (PyCFunction)CFMutableStringRefObj_CFStringReplace, 1,2809 PyDoc_STR("(CFRange range, CFStringRef replacement) -> None")},2810 {"CFStringReplaceAll", (PyCFunction)CFMutableStringRefObj_CFStringReplaceAll, 1,2811 PyDoc_STR("(CFStringRef replacement) -> None")},2812 {"CFStringPad", (PyCFunction)CFMutableStringRefObj_CFStringPad, 1,2813 PyDoc_STR("(CFStringRef padString, CFIndex length, CFIndex indexIntoPad) -> None")},2814 {"CFStringTrim", (PyCFunction)CFMutableStringRefObj_CFStringTrim, 1,2815 PyDoc_STR("(CFStringRef trimString) -> None")},2816 {"CFStringTrimWhitespace", (PyCFunction)CFMutableStringRefObj_CFStringTrimWhitespace, 1,2817 PyDoc_STR("() -> None")},2818 {NULL, NULL, 0}2819 };2820 2821 #define CFMutableStringRefObj_getsetlist NULL2822 2823 2824 static int CFMutableStringRefObj_compare(CFMutableStringRefObject *self, CFMutableStringRefObject *other)2825 {2826 /* XXXX Or should we use CFEqual?? */2827 if ( self->ob_itself > other->ob_itself ) return 1;2828 if ( self->ob_itself < other->ob_itself ) return -1;2829 return 0;2830 }2831 2832 static PyObject * CFMutableStringRefObj_repr(CFMutableStringRefObject *self)2833 {2834 char buf[100];2835 sprintf(buf, "<CFMutableStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);2836 return PyString_FromString(buf);2837 }2838 2839 static int CFMutableStringRefObj_hash(CFMutableStringRefObject *self)2840 {2841 /* XXXX Or should we use CFHash?? */2842 return (int)self->ob_itself;2843 }2844 static int CFMutableStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)2845 {2846 CFMutableStringRef itself;2847 char *kw[] = {"itself", 0};2848 2849 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableStringRefObj_Convert, &itself))2850 {2851 ((CFMutableStringRefObject *)_self)->ob_itself = itself;2852 return 0;2853 }2854 2855 /* Any CFTypeRef descendent is allowed as initializer too */2856 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))2857 {2858 ((CFMutableStringRefObject *)_self)->ob_itself = itself;2859 return 0;2860 }2861 return -1;2862 }2863 2864 #define CFMutableStringRefObj_tp_alloc PyType_GenericAlloc2865 2866 static PyObject *CFMutableStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)2867 {2868 PyObject *self;2869 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;2870 ((CFMutableStringRefObject *)self)->ob_itself = NULL;2871 ((CFMutableStringRefObject *)self)->ob_freeit = CFRelease;2872 return self;2873 }2874 2875 #define CFMutableStringRefObj_tp_free PyObject_Del2876 2877 2878 PyTypeObject CFMutableStringRef_Type = {2879 PyObject_HEAD_INIT(NULL)2880 0, /*ob_size*/2881 "_CF.CFMutableStringRef", /*tp_name*/2882 sizeof(CFMutableStringRefObject), /*tp_basicsize*/2883 0, /*tp_itemsize*/2884 /* methods */2885 (destructor) CFMutableStringRefObj_dealloc, /*tp_dealloc*/2886 0, /*tp_print*/2887 (getattrfunc)0, /*tp_getattr*/2888 (setattrfunc)0, /*tp_setattr*/2889 (cmpfunc) CFMutableStringRefObj_compare, /*tp_compare*/2890 (reprfunc) CFMutableStringRefObj_repr, /*tp_repr*/2891 (PyNumberMethods *)0, /* tp_as_number */2892 (PySequenceMethods *)0, /* tp_as_sequence */2893 (PyMappingMethods *)0, /* tp_as_mapping */2894 (hashfunc) CFMutableStringRefObj_hash, /*tp_hash*/2895 0, /*tp_call*/2896 0, /*tp_str*/2897 PyObject_GenericGetAttr, /*tp_getattro*/2898 PyObject_GenericSetAttr, /*tp_setattro */2899 0, /*tp_as_buffer*/2900 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */2901 0, /*tp_doc*/2902 0, /*tp_traverse*/2903 0, /*tp_clear*/2904 0, /*tp_richcompare*/2905 0, /*tp_weaklistoffset*/2906 0, /*tp_iter*/2907 0, /*tp_iternext*/2908 CFMutableStringRefObj_methods, /* tp_methods */2909 0, /*tp_members*/2910 CFMutableStringRefObj_getsetlist, /*tp_getset*/2911 0, /*tp_base*/2912 0, /*tp_dict*/2913 0, /*tp_descr_get*/2914 0, /*tp_descr_set*/2915 0, /*tp_dictoffset*/2916 CFMutableStringRefObj_tp_init, /* tp_init */2917 CFMutableStringRefObj_tp_alloc, /* tp_alloc */2918 CFMutableStringRefObj_tp_new, /* tp_new */2919 CFMutableStringRefObj_tp_free, /* tp_free */2920 };2921 2922 /* --------------- End object type CFMutableStringRef --------------- */2923 2924 2925 /* ---------------------- Object type CFURLRef ---------------------- */2926 2927 PyTypeObject CFURLRef_Type;2928 2929 #define CFURLRefObj_Check(x) ((x)->ob_type == &CFURLRef_Type || PyObject_TypeCheck((x), &CFURLRef_Type))2930 2931 typedef struct CFURLRefObject {2932 PyObject_HEAD2933 CFURLRef ob_itself;2934 void (*ob_freeit)(CFTypeRef ptr);2935 } CFURLRefObject;2936 2937 PyObject *CFURLRefObj_New(CFURLRef itself)2938 {2939 CFURLRefObject *it;2940 if (itself == NULL)2941 {2942 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");2943 return NULL;2944 }2945 it = PyObject_NEW(CFURLRefObject, &CFURLRef_Type);2946 if (it == NULL) return NULL;2947 /* XXXX Should we tp_init or tp_new our basetype? */2948 it->ob_itself = itself;2949 it->ob_freeit = CFRelease;2950 return (PyObject *)it;2951 }2952 2953 int CFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself)2954 {2955 2956 if (v == Py_None) { *p_itself = NULL; return 1; }2957 /* Check for other CF objects here */2958 2959 if (!CFURLRefObj_Check(v))2960 {2961 PyErr_SetString(PyExc_TypeError, "CFURLRef required");2962 return 0;2963 }2964 *p_itself = ((CFURLRefObject *)v)->ob_itself;2965 return 1;2966 }2967 2968 static void CFURLRefObj_dealloc(CFURLRefObject *self)2969 {2970 if (self->ob_freeit && self->ob_itself)2971 {2972 self->ob_freeit((CFTypeRef)self->ob_itself);2973 self->ob_itself = NULL;2974 }2975 CFTypeRef_Type.tp_dealloc((PyObject *)self);2976 }2977 2978 static PyObject *CFURLRefObj_CFURLCreateData(CFURLRefObject *_self, PyObject *_args)2979 {2980 PyObject *_res = NULL;2981 CFDataRef _rv;2982 CFStringEncoding encoding;2983 Boolean escapeWhitespace;2984 if (!PyArg_ParseTuple(_args, "ll",2985 &encoding,2986 &escapeWhitespace))2987 return NULL;2988 _rv = CFURLCreateData((CFAllocatorRef)NULL,2989 _self->ob_itself,2990 encoding,2991 escapeWhitespace);2992 _res = Py_BuildValue("O&",2993 CFDataRefObj_New, _rv);2994 return _res;2995 }2996 2997 static PyObject *CFURLRefObj_CFURLGetFileSystemRepresentation(CFURLRefObject *_self, PyObject *_args)2998 {2999 PyObject *_res = NULL;3000 Boolean _rv;3001 Boolean resolveAgainstBase;3002 UInt8 buffer;3003 CFIndex maxBufLen;3004 #ifndef CFURLGetFileSystemRepresentation3005 PyMac_PRECHECK(CFURLGetFileSystemRepresentation);3006 #endif3007 if (!PyArg_ParseTuple(_args, "ll",3008 &resolveAgainstBase,3009 &maxBufLen))3010 return NULL;3011 _rv = CFURLGetFileSystemRepresentation(_self->ob_itself,3012 resolveAgainstBase,3013 &buffer,3014 maxBufLen);3015 _res = Py_BuildValue("lb",3016 _rv,3017 buffer);3018 return _res;3019 }3020 3021 static PyObject *CFURLRefObj_CFURLCopyAbsoluteURL(CFURLRefObject *_self, PyObject *_args)3022 {3023 PyObject *_res = NULL;3024 CFURLRef _rv;3025 #ifndef CFURLCopyAbsoluteURL3026 PyMac_PRECHECK(CFURLCopyAbsoluteURL);3027 #endif3028 if (!PyArg_ParseTuple(_args, ""))3029 return NULL;3030 _rv = CFURLCopyAbsoluteURL(_self->ob_itself);3031 _res = Py_BuildValue("O&",3032 CFURLRefObj_New, _rv);3033 return _res;3034 }3035 3036 static PyObject *CFURLRefObj_CFURLGetString(CFURLRefObject *_self, PyObject *_args)3037 {3038 PyObject *_res = NULL;3039 CFStringRef _rv;3040 #ifndef CFURLGetString3041 PyMac_PRECHECK(CFURLGetString);3042 #endif3043 if (!PyArg_ParseTuple(_args, ""))3044 return NULL;3045 _rv = CFURLGetString(_self->ob_itself);3046 _res = Py_BuildValue("O&",3047 CFStringRefObj_New, _rv);3048 return _res;3049 }3050 3051 static PyObject *CFURLRefObj_CFURLGetBaseURL(CFURLRefObject *_self, PyObject *_args)3052 {3053 PyObject *_res = NULL;3054 CFURLRef _rv;3055 #ifndef CFURLGetBaseURL3056 PyMac_PRECHECK(CFURLGetBaseURL);3057 #endif3058 if (!PyArg_ParseTuple(_args, ""))3059 return NULL;3060 _rv = CFURLGetBaseURL(_self->ob_itself);3061 _res = Py_BuildValue("O&",3062 CFURLRefObj_New, _rv);3063 return _res;3064 }3065 3066 static PyObject *CFURLRefObj_CFURLCanBeDecomposed(CFURLRefObject *_self, PyObject *_args)3067 {3068 PyObject *_res = NULL;3069 Boolean _rv;3070 #ifndef CFURLCanBeDecomposed3071 PyMac_PRECHECK(CFURLCanBeDecomposed);3072 #endif3073 if (!PyArg_ParseTuple(_args, ""))3074 return NULL;3075 _rv = CFURLCanBeDecomposed(_self->ob_itself);3076 _res = Py_BuildValue("l",3077 _rv);3078 return _res;3079 }3080 3081 static PyObject *CFURLRefObj_CFURLCopyScheme(CFURLRefObject *_self, PyObject *_args)3082 {3083 PyObject *_res = NULL;3084 CFStringRef _rv;3085 #ifndef CFURLCopyScheme3086 PyMac_PRECHECK(CFURLCopyScheme);3087 #endif3088 if (!PyArg_ParseTuple(_args, ""))3089 return NULL;3090 _rv = CFURLCopyScheme(_self->ob_itself);3091 _res = Py_BuildValue("O&",3092 CFStringRefObj_New, _rv);3093 return _res;3094 }3095 3096 static PyObject *CFURLRefObj_CFURLCopyNetLocation(CFURLRefObject *_self, PyObject *_args)3097 {3098 PyObject *_res = NULL;3099 CFStringRef _rv;3100 #ifndef CFURLCopyNetLocation3101 PyMac_PRECHECK(CFURLCopyNetLocation);3102 #endif3103 if (!PyArg_ParseTuple(_args, ""))3104 return NULL;3105 _rv = CFURLCopyNetLocation(_self->ob_itself);3106 _res = Py_BuildValue("O&",3107 CFStringRefObj_New, _rv);3108 return _res;3109 }3110 3111 static PyObject *CFURLRefObj_CFURLCopyPath(CFURLRefObject *_self, PyObject *_args)3112 {3113 PyObject *_res = NULL;3114 CFStringRef _rv;3115 #ifndef CFURLCopyPath3116 PyMac_PRECHECK(CFURLCopyPath);3117 #endif3118 if (!PyArg_ParseTuple(_args, ""))3119 return NULL;3120 _rv = CFURLCopyPath(_self->ob_itself);3121 _res = Py_BuildValue("O&",3122 CFStringRefObj_New, _rv);3123 return _res;3124 }3125 3126 static PyObject *CFURLRefObj_CFURLCopyStrictPath(CFURLRefObject *_self, PyObject *_args)3127 {3128 PyObject *_res = NULL;3129 CFStringRef _rv;3130 Boolean isAbsolute;3131 #ifndef CFURLCopyStrictPath3132 PyMac_PRECHECK(CFURLCopyStrictPath);3133 #endif3134 if (!PyArg_ParseTuple(_args, ""))3135 return NULL;3136 _rv = CFURLCopyStrictPath(_self->ob_itself,3137 &isAbsolute);3138 _res = Py_BuildValue("O&l",3139 CFStringRefObj_New, _rv,3140 isAbsolute);3141 return _res;3142 }3143 3144 static PyObject *CFURLRefObj_CFURLCopyFileSystemPath(CFURLRefObject *_self, PyObject *_args)3145 {3146 PyObject *_res = NULL;3147 CFStringRef _rv;3148 CFURLPathStyle pathStyle;3149 #ifndef CFURLCopyFileSystemPath3150 PyMac_PRECHECK(CFURLCopyFileSystemPath);3151 #endif3152 if (!PyArg_ParseTuple(_args, "l",3153 &pathStyle))3154 return NULL;3155 _rv = CFURLCopyFileSystemPath(_self->ob_itself,3156 pathStyle);3157 _res = Py_BuildValue("O&",3158 CFStringRefObj_New, _rv);3159 return _res;3160 }3161 3162 static PyObject *CFURLRefObj_CFURLHasDirectoryPath(CFURLRefObject *_self, PyObject *_args)3163 {3164 PyObject *_res = NULL;3165 Boolean _rv;3166 #ifndef CFURLHasDirectoryPath3167 PyMac_PRECHECK(CFURLHasDirectoryPath);3168 #endif3169 if (!PyArg_ParseTuple(_args, ""))3170 return NULL;3171 _rv = CFURLHasDirectoryPath(_self->ob_itself);3172 _res = Py_BuildValue("l",3173 _rv);3174 return _res;3175 }3176 3177 static PyObject *CFURLRefObj_CFURLCopyResourceSpecifier(CFURLRefObject *_self, PyObject *_args)3178 {3179 PyObject *_res = NULL;3180 CFStringRef _rv;3181 #ifndef CFURLCopyResourceSpecifier3182 PyMac_PRECHECK(CFURLCopyResourceSpecifier);3183 #endif3184 if (!PyArg_ParseTuple(_args, ""))3185 return NULL;3186 _rv = CFURLCopyResourceSpecifier(_self->ob_itself);3187 _res = Py_BuildValue("O&",3188 CFStringRefObj_New, _rv);3189 return _res;3190 }3191 3192 static PyObject *CFURLRefObj_CFURLCopyHostName(CFURLRefObject *_self, PyObject *_args)3193 {3194 PyObject *_res = NULL;3195 CFStringRef _rv;3196 #ifndef CFURLCopyHostName3197 PyMac_PRECHECK(CFURLCopyHostName);3198 #endif3199 if (!PyArg_ParseTuple(_args, ""))3200 return NULL;3201 _rv = CFURLCopyHostName(_self->ob_itself);3202 _res = Py_BuildValue("O&",3203 CFStringRefObj_New, _rv);3204 return _res;3205 }3206 3207 static PyObject *CFURLRefObj_CFURLGetPortNumber(CFURLRefObject *_self, PyObject *_args)3208 {3209 PyObject *_res = NULL;3210 SInt32 _rv;3211 #ifndef CFURLGetPortNumber3212 PyMac_PRECHECK(CFURLGetPortNumber);3213 #endif3214 if (!PyArg_ParseTuple(_args, ""))3215 return NULL;3216 _rv = CFURLGetPortNumber(_self->ob_itself);3217 _res = Py_BuildValue("l",3218 _rv);3219 return _res;3220 }3221 3222 static PyObject *CFURLRefObj_CFURLCopyUserName(CFURLRefObject *_self, PyObject *_args)3223 {3224 PyObject *_res = NULL;3225 CFStringRef _rv;3226 #ifndef CFURLCopyUserName3227 PyMac_PRECHECK(CFURLCopyUserName);3228 #endif3229 if (!PyArg_ParseTuple(_args, ""))3230 return NULL;3231 _rv = CFURLCopyUserName(_self->ob_itself);3232 _res = Py_BuildValue("O&",3233 CFStringRefObj_New, _rv);3234 return _res;3235 }3236 3237 static PyObject *CFURLRefObj_CFURLCopyPassword(CFURLRefObject *_self, PyObject *_args)3238 {3239 PyObject *_res = NULL;3240 CFStringRef _rv;3241 #ifndef CFURLCopyPassword3242 PyMac_PRECHECK(CFURLCopyPassword);3243 #endif3244 if (!PyArg_ParseTuple(_args, ""))3245 return NULL;3246 _rv = CFURLCopyPassword(_self->ob_itself);3247 _res = Py_BuildValue("O&",3248 CFStringRefObj_New, _rv);3249 return _res;3250 }3251 3252 static PyObject *CFURLRefObj_CFURLCopyParameterString(CFURLRefObject *_self, PyObject *_args)3253 {3254 PyObject *_res = NULL;3255 CFStringRef _rv;3256 CFStringRef charactersToLeaveEscaped;3257 #ifndef CFURLCopyParameterString3258 PyMac_PRECHECK(CFURLCopyParameterString);3259 #endif3260 if (!PyArg_ParseTuple(_args, "O&",3261 CFStringRefObj_Convert, &charactersToLeaveEscaped))3262 return NULL;3263 _rv = CFURLCopyParameterString(_self->ob_itself,3264 charactersToLeaveEscaped);3265 _res = Py_BuildValue("O&",3266 CFStringRefObj_New, _rv);3267 return _res;3268 }3269 3270 static PyObject *CFURLRefObj_CFURLCopyQueryString(CFURLRefObject *_self, PyObject *_args)3271 {3272 PyObject *_res = NULL;3273 CFStringRef _rv;3274 CFStringRef charactersToLeaveEscaped;3275 #ifndef CFURLCopyQueryString3276 PyMac_PRECHECK(CFURLCopyQueryString);3277 #endif3278 if (!PyArg_ParseTuple(_args, "O&",3279 CFStringRefObj_Convert, &charactersToLeaveEscaped))3280 return NULL;3281 _rv = CFURLCopyQueryString(_self->ob_itself,3282 charactersToLeaveEscaped);3283 _res = Py_BuildValue("O&",3284 CFStringRefObj_New, _rv);3285 return _res;3286 }3287 3288 static PyObject *CFURLRefObj_CFURLCopyFragment(CFURLRefObject *_self, PyObject *_args)3289 {3290 PyObject *_res = NULL;3291 CFStringRef _rv;3292 CFStringRef charactersToLeaveEscaped;3293 #ifndef CFURLCopyFragment3294 PyMac_PRECHECK(CFURLCopyFragment);3295 #endif3296 if (!PyArg_ParseTuple(_args, "O&",3297 CFStringRefObj_Convert, &charactersToLeaveEscaped))3298 return NULL;3299 _rv = CFURLCopyFragment(_self->ob_itself,3300 charactersToLeaveEscaped);3301 _res = Py_BuildValue("O&",3302 CFStringRefObj_New, _rv);3303 return _res;3304 }3305 3306 static PyObject *CFURLRefObj_CFURLCopyLastPathComponent(CFURLRefObject *_self, PyObject *_args)3307 {3308 PyObject *_res = NULL;3309 CFStringRef _rv;3310 #ifndef CFURLCopyLastPathComponent3311 PyMac_PRECHECK(CFURLCopyLastPathComponent);3312 #endif3313 if (!PyArg_ParseTuple(_args, ""))3314 return NULL;3315 _rv = CFURLCopyLastPathComponent(_self->ob_itself);3316 _res = Py_BuildValue("O&",3317 CFStringRefObj_New, _rv);3318 return _res;3319 }3320 3321 static PyObject *CFURLRefObj_CFURLCopyPathExtension(CFURLRefObject *_self, PyObject *_args)3322 {3323 PyObject *_res = NULL;3324 CFStringRef _rv;3325 #ifndef CFURLCopyPathExtension3326 PyMac_PRECHECK(CFURLCopyPathExtension);3327 #endif3328 if (!PyArg_ParseTuple(_args, ""))3329 return NULL;3330 _rv = CFURLCopyPathExtension(_self->ob_itself);3331 _res = Py_BuildValue("O&",3332 CFStringRefObj_New, _rv);3333 return _res;3334 }3335 3336 static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathComponent(CFURLRefObject *_self, PyObject *_args)3337 {3338 PyObject *_res = NULL;3339 CFURLRef _rv;3340 CFStringRef pathComponent;3341 Boolean isDirectory;3342 if (!PyArg_ParseTuple(_args, "O&l",3343 CFStringRefObj_Convert, &pathComponent,3344 &isDirectory))3345 return NULL;3346 _rv = CFURLCreateCopyAppendingPathComponent((CFAllocatorRef)NULL,3347 _self->ob_itself,3348 pathComponent,3349 isDirectory);3350 _res = Py_BuildValue("O&",3351 CFURLRefObj_New, _rv);3352 return _res;3353 }3354 3355 static PyObject *CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent(CFURLRefObject *_self, PyObject *_args)3356 {3357 PyObject *_res = NULL;3358 CFURLRef _rv;3359 if (!PyArg_ParseTuple(_args, ""))3360 return NULL;3361 _rv = CFURLCreateCopyDeletingLastPathComponent((CFAllocatorRef)NULL,3362 _self->ob_itself);3363 _res = Py_BuildValue("O&",3364 CFURLRefObj_New, _rv);3365 return _res;3366 }3367 3368 static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathExtension(CFURLRefObject *_self, PyObject *_args)3369 {3370 PyObject *_res = NULL;3371 CFURLRef _rv;3372 CFStringRef extension;3373 if (!PyArg_ParseTuple(_args, "O&",3374 CFStringRefObj_Convert, &extension))3375 return NULL;3376 _rv = CFURLCreateCopyAppendingPathExtension((CFAllocatorRef)NULL,3377 _self->ob_itself,3378 extension);3379 _res = Py_BuildValue("O&",3380 CFURLRefObj_New, _rv);3381 return _res;3382 }3383 3384 static PyObject *CFURLRefObj_CFURLCreateCopyDeletingPathExtension(CFURLRefObject *_self, PyObject *_args)3385 {3386 PyObject *_res = NULL;3387 CFURLRef _rv;3388 if (!PyArg_ParseTuple(_args, ""))3389 return NULL;3390 _rv = CFURLCreateCopyDeletingPathExtension((CFAllocatorRef)NULL,3391 _self->ob_itself);3392 _res = Py_BuildValue("O&",3393 CFURLRefObj_New, _rv);3394 return _res;3395 }3396 3397 static PyObject *CFURLRefObj_CFURLGetFSRef(CFURLRefObject *_self, PyObject *_args)3398 {3399 PyObject *_res = NULL;3400 Boolean _rv;3401 FSRef fsRef;3402 #ifndef CFURLGetFSRef3403 PyMac_PRECHECK(CFURLGetFSRef);3404 #endif3405 if (!PyArg_ParseTuple(_args, ""))3406 return NULL;3407 _rv = CFURLGetFSRef(_self->ob_itself,3408 &fsRef);3409 _res = Py_BuildValue("lO&",3410 _rv,3411 PyMac_BuildFSRef, &fsRef);3412 return _res;3413 }3414 3415 static PyMethodDef CFURLRefObj_methods[] = {3416 {"CFURLCreateData", (PyCFunction)CFURLRefObj_CFURLCreateData, 1,3417 PyDoc_STR("(CFStringEncoding encoding, Boolean escapeWhitespace) -> (CFDataRef _rv)")},3418 {"CFURLGetFileSystemRepresentation", (PyCFunction)CFURLRefObj_CFURLGetFileSystemRepresentation, 1,3419 PyDoc_STR("(Boolean resolveAgainstBase, CFIndex maxBufLen) -> (Boolean _rv, UInt8 buffer)")},3420 {"CFURLCopyAbsoluteURL", (PyCFunction)CFURLRefObj_CFURLCopyAbsoluteURL, 1,3421 PyDoc_STR("() -> (CFURLRef _rv)")},3422 {"CFURLGetString", (PyCFunction)CFURLRefObj_CFURLGetString, 1,3423 PyDoc_STR("() -> (CFStringRef _rv)")},3424 {"CFURLGetBaseURL", (PyCFunction)CFURLRefObj_CFURLGetBaseURL, 1,3425 PyDoc_STR("() -> (CFURLRef _rv)")},3426 {"CFURLCanBeDecomposed", (PyCFunction)CFURLRefObj_CFURLCanBeDecomposed, 1,3427 PyDoc_STR("() -> (Boolean _rv)")},3428 {"CFURLCopyScheme", (PyCFunction)CFURLRefObj_CFURLCopyScheme, 1,3429 PyDoc_STR("() -> (CFStringRef _rv)")},3430 {"CFURLCopyNetLocation", (PyCFunction)CFURLRefObj_CFURLCopyNetLocation, 1,3431 PyDoc_STR("() -> (CFStringRef _rv)")},3432 {"CFURLCopyPath", (PyCFunction)CFURLRefObj_CFURLCopyPath, 1,3433 PyDoc_STR("() -> (CFStringRef _rv)")},3434 {"CFURLCopyStrictPath", (PyCFunction)CFURLRefObj_CFURLCopyStrictPath, 1,3435 PyDoc_STR("() -> (CFStringRef _rv, Boolean isAbsolute)")},3436 {"CFURLCopyFileSystemPath", (PyCFunction)CFURLRefObj_CFURLCopyFileSystemPath, 1,3437 PyDoc_STR("(CFURLPathStyle pathStyle) -> (CFStringRef _rv)")},3438 {"CFURLHasDirectoryPath", (PyCFunction)CFURLRefObj_CFURLHasDirectoryPath, 1,3439 PyDoc_STR("() -> (Boolean _rv)")},3440 {"CFURLCopyResourceSpecifier", (PyCFunction)CFURLRefObj_CFURLCopyResourceSpecifier, 1,3441 PyDoc_STR("() -> (CFStringRef _rv)")},3442 {"CFURLCopyHostName", (PyCFunction)CFURLRefObj_CFURLCopyHostName, 1,3443 PyDoc_STR("() -> (CFStringRef _rv)")},3444 {"CFURLGetPortNumber", (PyCFunction)CFURLRefObj_CFURLGetPortNumber, 1,3445 PyDoc_STR("() -> (SInt32 _rv)")},3446 {"CFURLCopyUserName", (PyCFunction)CFURLRefObj_CFURLCopyUserName, 1,3447 PyDoc_STR("() -> (CFStringRef _rv)")},3448 {"CFURLCopyPassword", (PyCFunction)CFURLRefObj_CFURLCopyPassword, 1,3449 PyDoc_STR("() -> (CFStringRef _rv)")},3450 {"CFURLCopyParameterString", (PyCFunction)CFURLRefObj_CFURLCopyParameterString, 1,3451 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},3452 {"CFURLCopyQueryString", (PyCFunction)CFURLRefObj_CFURLCopyQueryString, 1,3453 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},3454 {"CFURLCopyFragment", (PyCFunction)CFURLRefObj_CFURLCopyFragment, 1,3455 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},3456 {"CFURLCopyLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCopyLastPathComponent, 1,3457 PyDoc_STR("() -> (CFStringRef _rv)")},3458 {"CFURLCopyPathExtension", (PyCFunction)CFURLRefObj_CFURLCopyPathExtension, 1,3459 PyDoc_STR("() -> (CFStringRef _rv)")},3460 {"CFURLCreateCopyAppendingPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathComponent, 1,3461 PyDoc_STR("(CFStringRef pathComponent, Boolean isDirectory) -> (CFURLRef _rv)")},3462 {"CFURLCreateCopyDeletingLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent, 1,3463 PyDoc_STR("() -> (CFURLRef _rv)")},3464 {"CFURLCreateCopyAppendingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathExtension, 1,3465 PyDoc_STR("(CFStringRef extension) -> (CFURLRef _rv)")},3466 {"CFURLCreateCopyDeletingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingPathExtension, 1,3467 PyDoc_STR("() -> (CFURLRef _rv)")},3468 {"CFURLGetFSRef", (PyCFunction)CFURLRefObj_CFURLGetFSRef, 1,3469 PyDoc_STR("() -> (Boolean _rv, FSRef fsRef)")},3470 {NULL, NULL, 0}3471 };3472 3473 #define CFURLRefObj_getsetlist NULL3474 3475 3476 static int CFURLRefObj_compare(CFURLRefObject *self, CFURLRefObject *other)3477 {3478 /* XXXX Or should we use CFEqual?? */3479 if ( self->ob_itself > other->ob_itself ) return 1;3480 if ( self->ob_itself < other->ob_itself ) return -1;3481 return 0;3482 }3483 3484 static PyObject * CFURLRefObj_repr(CFURLRefObject *self)3485 {3486 char buf[100];3487 sprintf(buf, "<CFURL object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);3488 return PyString_FromString(buf);3489 }3490 3491 static int CFURLRefObj_hash(CFURLRefObject *self)3492 {3493 /* XXXX Or should we use CFHash?? */3494 return (int)self->ob_itself;3495 }3496 static int CFURLRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)3497 {3498 CFURLRef itself;3499 char *kw[] = {"itself", 0};3500 3501 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFURLRefObj_Convert, &itself))3502 {3503 ((CFURLRefObject *)_self)->ob_itself = itself;3504 return 0;3505 }3506 3507 /* Any CFTypeRef descendent is allowed as initializer too */3508 if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))3509 {3510 ((CFURLRefObject *)_self)->ob_itself = itself;3511 return 0;3512 }3513 return -1;3514 }3515 3516 #define CFURLRefObj_tp_alloc PyType_GenericAlloc3517 3518 static PyObject *CFURLRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)3519 {3520 PyObject *self;3521 if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;3522 ((CFURLRefObject *)self)->ob_itself = NULL;3523 ((CFURLRefObject *)self)->ob_freeit = CFRelease;3524 return self;3525 }3526 3527 #define CFURLRefObj_tp_free PyObject_Del3528 3529 3530 PyTypeObject CFURLRef_Type = {3531 PyObject_HEAD_INIT(NULL)3532 0, /*ob_size*/3533 "_CF.CFURLRef", /*tp_name*/3534 sizeof(CFURLRefObject), /*tp_basicsize*/3535 0, /*tp_itemsize*/3536 /* methods */3537 (destructor) CFURLRefObj_dealloc, /*tp_dealloc*/3538 0, /*tp_print*/3539 (getattrfunc)0, /*tp_getattr*/3540 (setattrfunc)0, /*tp_setattr*/3541 (cmpfunc) CFURLRefObj_compare, /*tp_compare*/3542 (reprfunc) CFURLRefObj_repr, /*tp_repr*/3543 (PyNumberMethods *)0, /* tp_as_number */3544 (PySequenceMethods *)0, /* tp_as_sequence */3545 (PyMappingMethods *)0, /* tp_as_mapping */3546 (hashfunc) CFURLRefObj_hash, /*tp_hash*/3547 0, /*tp_call*/3548 0, /*tp_str*/3549 PyObject_GenericGetAttr, /*tp_getattro*/3550 PyObject_GenericSetAttr, /*tp_setattro */3551 0, /*tp_as_buffer*/3552 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */3553 0, /*tp_doc*/3554 0, /*tp_traverse*/3555 0, /*tp_clear*/3556 0, /*tp_richcompare*/3557 0, /*tp_weaklistoffset*/3558 0, /*tp_iter*/3559 0, /*tp_iternext*/3560 CFURLRefObj_methods, /* tp_methods */3561 0, /*tp_members*/3562 CFURLRefObj_getsetlist, /*tp_getset*/3563 0, /*tp_base*/3564 0, /*tp_dict*/3565 0, /*tp_descr_get*/3566 0, /*tp_descr_set*/3567 0, /*tp_dictoffset*/3568 CFURLRefObj_tp_init, /* tp_init */3569 CFURLRefObj_tp_alloc, /* tp_alloc */3570 CFURLRefObj_tp_new, /* tp_new */3571 CFURLRefObj_tp_free, /* tp_free */3572 };3573 3574 3574 /* -------------------- End object type CFURLRef -------------------- */ 3575 3575 … … 3577 3577 static PyObject *CF___CFRangeMake(PyObject *_self, PyObject *_args) 3578 3578 { 3579 3580 3581 3582 3579 PyObject *_res = NULL; 3580 CFRange _rv; 3581 CFIndex loc; 3582 CFIndex len; 3583 3583 #ifndef __CFRangeMake 3584 3585 #endif 3586 3587 3588 3589 3590 3591 3592 3593 3594 3584 PyMac_PRECHECK(__CFRangeMake); 3585 #endif 3586 if (!PyArg_ParseTuple(_args, "ll", 3587 &loc, 3588 &len)) 3589 return NULL; 3590 _rv = __CFRangeMake(loc, 3591 len); 3592 _res = Py_BuildValue("O&", 3593 CFRange_New, _rv); 3594 return _res; 3595 3595 } 3596 3596 3597 3597 static PyObject *CF_CFAllocatorGetTypeID(PyObject *_self, PyObject *_args) 3598 3598 { 3599 3600 3599 PyObject *_res = NULL; 3600 CFTypeID _rv; 3601 3601 #ifndef CFAllocatorGetTypeID 3602 3603 #endif 3604 3605 3606 3607 3608 3609 3602 PyMac_PRECHECK(CFAllocatorGetTypeID); 3603 #endif 3604 if (!PyArg_ParseTuple(_args, "")) 3605 return NULL; 3606 _rv = CFAllocatorGetTypeID(); 3607 _res = Py_BuildValue("l", 3608 _rv); 3609 return _res; 3610 3610 } 3611 3611 3612 3612 static PyObject *CF_CFAllocatorGetPreferredSizeForSize(PyObject *_self, PyObject *_args) 3613 3613 { 3614 3615 3616 3617 3614 PyObject *_res = NULL; 3615 CFIndex _rv; 3616 CFIndex size; 3617 CFOptionFlags hint; 3618 3618 #ifndef CFAllocatorGetPreferredSizeForSize 3619 3620 #endif 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3619 PyMac_PRECHECK(CFAllocatorGetPreferredSizeForSize); 3620 #endif 3621 if (!PyArg_ParseTuple(_args, "ll", 3622 &size, 3623 &hint)) 3624 return NULL; 3625 _rv = CFAllocatorGetPreferredSizeForSize((CFAllocatorRef)NULL, 3626 size, 3627 hint); 3628 _res = Py_BuildValue("l", 3629 _rv); 3630 return _res; 3631 3631 } 3632 3632 3633 3633 static PyObject *CF_CFCopyTypeIDDescription(PyObject *_self, PyObject *_args) 3634 3634 { 3635 3636 3637 3635 PyObject *_res = NULL; 3636 CFStringRef _rv; 3637 CFTypeID type_id; 3638 3638 #ifndef CFCopyTypeIDDescription 3639 3640 #endif 3641 3642 3643 3644 3645 3646 3647 3639 PyMac_PRECHECK(CFCopyTypeIDDescription); 3640 #endif 3641 if (!PyArg_ParseTuple(_args, "l", 3642 &type_id)) 3643 return NULL; 3644 _rv = CFCopyTypeIDDescription(type_id); 3645 _res = Py_BuildValue("O&", 3646 CFStringRefObj_New, _rv); 3647 return _res; 3648 3648 } 3649 3649 3650 3650 static PyObject *CF_CFArrayGetTypeID(PyObject *_self, PyObject *_args) 3651 3651 { 3652 3653 3652 PyObject *_res = NULL; 3653 CFTypeID _rv; 3654 3654 #ifndef CFArrayGetTypeID 3655 3656 #endif 3657 3658 3659 3660 3661 3662 3655 PyMac_PRECHECK(CFArrayGetTypeID); 3656 #endif 3657 if (!PyArg_ParseTuple(_args, "")) 3658 return NULL; 3659 _rv = CFArrayGetTypeID(); 3660 _res = Py_BuildValue("l", 3661 _rv); 3662 return _res; 3663 3663 } 3664 3664 3665 3665 static PyObject *CF_CFArrayCreateMutable(PyObject *_self, PyObject *_args) 3666 3666 { 3667 3668 3669 3667 PyObject *_res = NULL; 3668 CFMutableArrayRef _rv; 3669 CFIndex capacity; 3670 3670 #ifndef CFArrayCreateMutable 3671 3672 #endif 3673 3674 3675 3676 3677 3678 3679 3680 3681 3671 PyMac_PRECHECK(CFArrayCreateMutable); 3672 #endif 3673 if (!PyArg_ParseTuple(_args, "l", 3674 &capacity)) 3675 return NULL; 3676 _rv = CFArrayCreateMutable((CFAllocatorRef)NULL, 3677 capacity, 3678 &kCFTypeArrayCallBacks); 3679 _res = Py_BuildValue("O&", 3680 CFMutableArrayRefObj_New, _rv); 3681 return _res; 3682 3682 } 3683 3683 3684 3684 static PyObject *CF_CFArrayCreateMutableCopy(PyObject *_self, PyObject *_args) 3685 3685 { 3686 3687 3688 3689 3686 PyObject *_res = NULL; 3687 CFMutableArrayRef _rv; 3688 CFIndex capacity; 3689 CFArrayRef theArray; 3690 3690 #ifndef CFArrayCreateMutableCopy 3691 3692 #endif 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3691 PyMac_PRECHECK(CFArrayCreateMutableCopy); 3692 #endif 3693 if (!PyArg_ParseTuple(_args, "lO&", 3694 &capacity, 3695 CFArrayRefObj_Convert, &theArray)) 3696 return NULL; 3697 _rv = CFArrayCreateMutableCopy((CFAllocatorRef)NULL, 3698 capacity, 3699 theArray); 3700 _res = Py_BuildValue("O&", 3701 CFMutableArrayRefObj_New, _rv); 3702 return _res; 3703 3703 } 3704 3704 3705 3705 static PyObject *CF_CFDataGetTypeID(PyObject *_self, PyObject *_args) 3706 3706 { 3707 3708 3707 PyObject *_res = NULL; 3708 CFTypeID _rv; 3709 3709 #ifndef CFDataGetTypeID 3710 3711 #endif 3712 3713 3714 3715 3716 3717 3710 PyMac_PRECHECK(CFDataGetTypeID); 3711 #endif 3712 if (!PyArg_ParseTuple(_args, "")) 3713 return NULL; 3714 _rv = CFDataGetTypeID(); 3715 _res = Py_BuildValue("l", 3716 _rv); 3717 return _res; 3718 3718 } 3719 3719 3720 3720 static PyObject *CF_CFDataCreate(PyObject *_self, PyObject *_args) 3721 3721 { 3722 3723 3724 3725 3726 3722 PyObject *_res = NULL; 3723 CFDataRef _rv; 3724 unsigned char *bytes__in__; 3725 long bytes__len__; 3726 int bytes__in_len__; 3727 3727 #ifndef CFDataCreate 3728 3729 #endif 3730 3731 3732 3733 3734 3735 3736 3737 3738 3728 PyMac_PRECHECK(CFDataCreate); 3729 #endif 3730 if (!PyArg_ParseTuple(_args, "s#", 3731 &bytes__in__, &bytes__in_len__)) 3732 return NULL; 3733 bytes__len__ = bytes__in_len__; 3734 _rv = CFDataCreate((CFAllocatorRef)NULL, 3735 bytes__in__, bytes__len__); 3736 _res = Py_BuildValue("O&", 3737 CFDataRefObj_New, _rv); 3738 return _res; 3739 3739 } 3740 3740 3741 3741 static PyObject *CF_CFDataCreateWithBytesNoCopy(PyObject *_self, PyObject *_args) 3742 3742 { 3743 3744 3745 3746 3747 3743 PyObject *_res = NULL; 3744 CFDataRef _rv; 3745 unsigned char *bytes__in__; 3746 long bytes__len__; 3747 int bytes__in_len__; 3748 3748 #ifndef CFDataCreateWithBytesNoCopy 3749 3750 #endif 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3749 PyMac_PRECHECK(CFDataCreateWithBytesNoCopy); 3750 #endif 3751 if (!PyArg_ParseTuple(_args, "s#", 3752 &bytes__in__, &bytes__in_len__)) 3753 return NULL; 3754 bytes__len__ = bytes__in_len__; 3755 _rv = CFDataCreateWithBytesNoCopy((CFAllocatorRef)NULL, 3756 bytes__in__, bytes__len__, 3757 (CFAllocatorRef)NULL); 3758 _res = Py_BuildValue("O&", 3759 CFDataRefObj_New, _rv); 3760 return _res; 3761 3761 } 3762 3762 3763 3763 static PyObject *CF_CFDataCreateMutable(PyObject *_self, PyObject *_args) 3764 3764 { 3765 3766 3767 3765 PyObject *_res = NULL; 3766 CFMutableDataRef _rv; 3767 CFIndex capacity; 3768 3768 #ifndef CFDataCreateMutable 3769 3770 #endif 3771 3772 3773 3774 3775 3776 3777 3778 3769 PyMac_PRECHECK(CFDataCreateMutable); 3770 #endif 3771 if (!PyArg_ParseTuple(_args, "l", 3772 &capacity)) 3773 return NULL; 3774 _rv = CFDataCreateMutable((CFAllocatorRef)NULL, 3775 capacity); 3776 _res = Py_BuildValue("O&", 3777 CFMutableDataRefObj_New, _rv); 3778 return _res; 3779 3779 } 3780 3780 3781 3781 static PyObject *CF_CFDataCreateMutableCopy(PyObject *_self, PyObject *_args) 3782 3782 { 3783 3784 3785 3786 3783 PyObject *_res = NULL; 3784 CFMutableDataRef _rv; 3785 CFIndex capacity; 3786 CFDataRef theData; 3787 3787 #ifndef CFDataCreateMutableCopy 3788 3789 #endif 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3788 PyMac_PRECHECK(CFDataCreateMutableCopy); 3789 #endif 3790 if (!PyArg_ParseTuple(_args, "lO&", 3791 &capacity, 3792 CFDataRefObj_Convert, &theData)) 3793 return NULL; 3794 _rv = CFDataCreateMutableCopy((CFAllocatorRef)NULL, 3795 capacity, 3796 theData); 3797 _res = Py_BuildValue("O&", 3798 CFMutableDataRefObj_New, _rv); 3799 return _res; 3800 3800 } 3801 3801 3802 3802 static PyObject *CF_CFDictionaryGetTypeID(PyObject *_self, PyObject *_args) 3803 3803 { 3804 3805 3804 PyObject *_res = NULL; 3805 CFTypeID _rv; 3806 3806 #ifndef CFDictionaryGetTypeID 3807 3808 #endif 3809 3810 3811 3812 3813 3814 3807 PyMac_PRECHECK(CFDictionaryGetTypeID); 3808 #endif 3809 if (!PyArg_ParseTuple(_args, "")) 3810 return NULL; 3811 _rv = CFDictionaryGetTypeID(); 3812 _res = Py_BuildValue("l", 3813 _rv); 3814 return _res; 3815 3815 } 3816 3816 3817 3817 static PyObject *CF_CFDictionaryCreateMutable(PyObject *_self, PyObject *_args) 3818 3818 { 3819 3820 3821 3819 PyObject *_res = NULL; 3820 CFMutableDictionaryRef _rv; 3821 CFIndex capacity; 3822 3822 #ifndef CFDictionaryCreateMutable 3823 3824 #endif 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3823 PyMac_PRECHECK(CFDictionaryCreateMutable); 3824 #endif 3825 if (!PyArg_ParseTuple(_args, "l", 3826 &capacity)) 3827 return NULL; 3828 _rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL, 3829 capacity, 3830 &kCFTypeDictionaryKeyCallBacks, 3831 &kCFTypeDictionaryValueCallBacks); 3832 _res = Py_BuildValue("O&", 3833 CFMutableDictionaryRefObj_New, _rv); 3834 return _res; 3835 3835 } 3836 3836 3837 3837 static PyObject *CF_CFDictionaryCreateMutableCopy(PyObject *_self, PyObject *_args) 3838 3838 { 3839 3840 3841 3842 3839 PyObject *_res = NULL; 3840 CFMutableDictionaryRef _rv; 3841 CFIndex capacity; 3842 CFDictionaryRef theDict; 3843 3843 #ifndef CFDictionaryCreateMutableCopy 3844 3845 #endif 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3844 PyMac_PRECHECK(CFDictionaryCreateMutableCopy); 3845 #endif 3846 if (!PyArg_ParseTuple(_args, "lO&", 3847 &capacity, 3848 CFDictionaryRefObj_Convert, &theDict)) 3849 return NULL; 3850 _rv = CFDictionaryCreateMutableCopy((CFAllocatorRef)NULL, 3851 capacity, 3852 theDict); 3853 _res = Py_BuildValue("O&", 3854 CFMutableDictionaryRefObj_New, _rv); 3855 return _res; 3856 3856 } 3857 3857 3858 3858 static PyObject *CF_CFPreferencesCopyAppValue(PyObject *_self, PyObject *_args) 3859 3859 { 3860 3861 3862 3863 3860 PyObject *_res = NULL; 3861 CFTypeRef _rv; 3862 CFStringRef key; 3863 CFStringRef applicationID; 3864 3864 #ifndef CFPreferencesCopyAppValue 3865 3866 #endif 3867 3868 3869 3870 3871 3872 3873 3874 3875 3865 PyMac_PRECHECK(CFPreferencesCopyAppValue); 3866 #endif 3867 if (!PyArg_ParseTuple(_args, "O&O&", 3868 CFStringRefObj_Convert, &key, 3869 CFStringRefObj_Convert, &applicationID)) 3870 return NULL; 3871 _rv = CFPreferencesCopyAppValue(key, 3872 applicationID); 3873 _res = Py_BuildValue("O&", 3874 CFTypeRefObj_New, _rv); 3875 return _res; 3876 3876 } 3877 3877 3878 3878 static PyObject *CF_CFPreferencesGetAppBooleanValue(PyObject *_self, PyObject *_args) 3879 3879 { 3880 3881 3882 3883 3884 3880 PyObject *_res = NULL; 3881 Boolean _rv; 3882 CFStringRef key; 3883 CFStringRef applicationID; 3884 Boolean keyExistsAndHasValidFormat; 3885 3885 #ifndef CFPreferencesGetAppBooleanValue 3886 3887 #endif 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3886 PyMac_PRECHECK(CFPreferencesGetAppBooleanValue); 3887 #endif 3888 if (!PyArg_ParseTuple(_args, "O&O&", 3889 CFStringRefObj_Convert, &key, 3890 CFStringRefObj_Convert, &applicationID)) 3891 return NULL; 3892 _rv = CFPreferencesGetAppBooleanValue(key, 3893 applicationID, 3894 &keyExistsAndHasValidFormat); 3895 _res = Py_BuildValue("ll", 3896 _rv, 3897 keyExistsAndHasValidFormat); 3898 return _res; 3899 3899 } 3900 3900 3901 3901 static PyObject *CF_CFPreferencesGetAppIntegerValue(PyObject *_self, PyObject *_args) 3902 3902 { 3903 3904 3905 3906 3907 3903 PyObject *_res = NULL; 3904 CFIndex _rv; 3905 CFStringRef key; 3906 CFStringRef applicationID; 3907 Boolean keyExistsAndHasValidFormat; 3908 3908 #ifndef CFPreferencesGetAppIntegerValue 3909 3910 #endif 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3909 PyMac_PRECHECK(CFPreferencesGetAppIntegerValue); 3910 #endif 3911 if (!PyArg_ParseTuple(_args, "O&O&", 3912 CFStringRefObj_Convert, &key, 3913 CFStringRefObj_Convert, &applicationID)) 3914 return NULL; 3915 _rv = CFPreferencesGetAppIntegerValue(key, 3916 applicationID, 3917 &keyExistsAndHasValidFormat); 3918 _res = Py_BuildValue("ll", 3919 _rv, 3920 keyExistsAndHasValidFormat); 3921 return _res; 3922 3922 } 3923 3923 3924 3924 static PyObject *CF_CFPreferencesSetAppValue(PyObject *_self, PyObject *_args) 3925 3925 { 3926 3927 3928 3929 3926 PyObject *_res = NULL; 3927 CFStringRef key; 3928 CFTypeRef value; 3929 CFStringRef applicationID; 3930 3930 #ifndef CFPreferencesSetAppValue 3931 3932 #endif 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3931 PyMac_PRECHECK(CFPreferencesSetAppValue); 3932 #endif 3933 if (!PyArg_ParseTuple(_args, "O&O&O&", 3934 CFStringRefObj_Convert, &key, 3935 CFTypeRefObj_Convert, &value, 3936 CFStringRefObj_Convert, &applicationID)) 3937 return NULL; 3938 CFPreferencesSetAppValue(key, 3939 value, 3940 applicationID); 3941 Py_INCREF(Py_None); 3942 _res = Py_None; 3943 return _res; 3944 3944 } 3945 3945 3946 3946 static PyObject *CF_CFPreferencesAddSuitePreferencesToApp(PyObject *_self, PyObject *_args) 3947 3947 { 3948 3949 3950 3948 PyObject *_res = NULL; 3949 CFStringRef applicationID; 3950 CFStringRef suiteID; 3951 3951 #ifndef CFPreferencesAddSuitePreferencesToApp 3952 3953 #endif 3954 3955 3956 3957 3958 3959 3960 3961 3962 3952 PyMac_PRECHECK(CFPreferencesAddSuitePreferencesToApp); 3953 #endif 3954 if (!PyArg_ParseTuple(_args, "O&O&", 3955 CFStringRefObj_Convert, &applicationID, 3956 CFStringRefObj_Convert, &suiteID)) 3957 return NULL; 3958 CFPreferencesAddSuitePreferencesToApp(applicationID, 3959 suiteID); 3960 Py_INCREF(Py_None); 3961 _res = Py_None; 3962 return _res; 3963 3963 } 3964 3964 3965 3965 static PyObject *CF_CFPreferencesRemoveSuitePreferencesFromApp(PyObject *_self, PyObject *_args) 3966 3966 { 3967 3968 3969 3967 PyObject *_res = NULL; 3968 CFStringRef applicationID; 3969 CFStringRef suiteID; 3970 3970 #ifndef CFPreferencesRemoveSuitePreferencesFromApp 3971 3972 #endif 3973 3974 3975 3976 3977 3978 3979 3980 3981 3971 PyMac_PRECHECK(CFPreferencesRemoveSuitePreferencesFromApp); 3972 #endif 3973 if (!PyArg_ParseTuple(_args, "O&O&", 3974 CFStringRefObj_Convert, &applicationID, 3975 CFStringRefObj_Convert, &suiteID)) 3976 return NULL; 3977 CFPreferencesRemoveSuitePreferencesFromApp(applicationID, 3978 suiteID); 3979 Py_INCREF(Py_None); 3980 _res = Py_None; 3981 return _res; 3982 3982 } 3983 3983 3984 3984 static PyObject *CF_CFPreferencesAppSynchronize(PyObject *_self, PyObject *_args) 3985 3985 { 3986 3987 3988 3986 PyObject *_res = NULL; 3987 Boolean _rv; 3988 CFStringRef applicationID; 3989 3989 #ifndef CFPreferencesAppSynchronize 3990 3991 #endif 3992 3993 3994 3995 3996 3997 3998 3990 PyMac_PRECHECK(CFPreferencesAppSynchronize); 3991 #endif 3992 if (!PyArg_ParseTuple(_args, "O&", 3993 CFStringRefObj_Convert, &applicationID)) 3994 return NULL; 3995 _rv = CFPreferencesAppSynchronize(applicationID); 3996 _res = Py_BuildValue("l", 3997 _rv); 3998 return _res; 3999 3999 } 4000 4000 4001 4001 static PyObject *CF_CFPreferencesCopyValue(PyObject *_self, PyObject *_args) 4002 4002 { 4003 4004 4005 4006 4007 4008 4003 PyObject *_res = NULL; 4004 CFTypeRef _rv; 4005 CFStringRef key; 4006 CFStringRef applicationID; 4007 CFStringRef userName; 4008 CFStringRef hostName; 4009 4009 #ifndef CFPreferencesCopyValue 4010 4011 #endif 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4010 PyMac_PRECHECK(CFPreferencesCopyValue); 4011 #endif 4012 if (!PyArg_ParseTuple(_args, "O&O&O&O&", 4013 CFStringRefObj_Convert, &key, 4014 CFStringRefObj_Convert, &applicationID, 4015 CFStringRefObj_Convert, &userName, 4016 CFStringRefObj_Convert, &hostName)) 4017 return NULL; 4018 _rv = CFPreferencesCopyValue(key, 4019 applicationID, 4020 userName, 4021 hostName); 4022 _res = Py_BuildValue("O&", 4023 CFTypeRefObj_New, _rv); 4024 return _res; 4025 4025 } 4026 4026 4027 4027 static PyObject *CF_CFPreferencesCopyMultiple(PyObject *_self, PyObject *_args) 4028 4028 { 4029 4030 4031 4032 4033 4034 4029 PyObject *_res = NULL; 4030 CFDictionaryRef _rv; 4031 CFArrayRef keysToFetch; 4032 CFStringRef applicationID; 4033 CFStringRef userName; 4034 CFStringRef hostName; 4035 4035 #ifndef CFPreferencesCopyMultiple 4036 4037 #endif 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4036 PyMac_PRECHECK(CFPreferencesCopyMultiple); 4037 #endif 4038 if (!PyArg_ParseTuple(_args, "O&O&O&O&", 4039 CFArrayRefObj_Convert, &keysToFetch, 4040 CFStringRefObj_Convert, &applicationID, 4041 CFStringRefObj_Convert, &userName, 4042 CFStringRefObj_Convert, &hostName)) 4043 return NULL; 4044 _rv = CFPreferencesCopyMultiple(keysToFetch, 4045 applicationID, 4046 userName, 4047 hostName); 4048 _res = Py_BuildValue("O&", 4049 CFDictionaryRefObj_New, _rv); 4050 return _res; 4051 4051 } 4052 4052 4053 4053 static PyObject *CF_CFPreferencesSetValue(PyObject *_self, PyObject *_args) 4054 4054 { 4055 4056 4057 4058 4059 4060 4055 PyObject *_res = NULL; 4056 CFStringRef key; 4057 CFTypeRef value; 4058 CFStringRef applicationID; 4059 CFStringRef userName; 4060 CFStringRef hostName; 4061 4061 #ifndef CFPreferencesSetValue 4062 4063 #endif 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4062 PyMac_PRECHECK(CFPreferencesSetValue); 4063 #endif 4064 if (!PyArg_ParseTuple(_args, "O&O&O&O&O&", 4065 CFStringRefObj_Convert, &key, 4066 CFTypeRefObj_Convert, &value, 4067 CFStringRefObj_Convert, &applicationID, 4068 CFStringRefObj_Convert, &userName, 4069 CFStringRefObj_Convert, &hostName)) 4070 return NULL; 4071 CFPreferencesSetValue(key, 4072 value, 4073 applicationID, 4074 userName, 4075 hostName); 4076 Py_INCREF(Py_None); 4077 _res = Py_None; 4078 return _res; 4079 4079 } 4080 4080 4081 4081 static PyObject *CF_CFPreferencesSetMultiple(PyObject *_self, PyObject *_args) 4082 4082 { 4083 4084 4085 4086 4087 4088 4083 PyObject *_res = NULL; 4084 CFDictionaryRef keysToSet; 4085 CFArrayRef keysToRemove; 4086 CFStringRef applicationID; 4087 CFStringRef userName; 4088 CFStringRef hostName; 4089 4089 #ifndef CFPreferencesSetMultiple 4090 4091 #endif 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4090 PyMac_PRECHECK(CFPreferencesSetMultiple); 4091 #endif 4092 if (!PyArg_ParseTuple(_args, "O&O&O&O&O&", 4093 CFDictionaryRefObj_Convert, &keysToSet, 4094 CFArrayRefObj_Convert, &keysToRemove, 4095 CFStringRefObj_Convert, &applicationID, 4096 CFStringRefObj_Convert, &userName, 4097 CFStringRefObj_Convert, &hostName)) 4098 return NULL; 4099 CFPreferencesSetMultiple(keysToSet, 4100 keysToRemove, 4101 applicationID, 4102 userName, 4103 hostName); 4104 Py_INCREF(Py_None); 4105 _res = Py_None; 4106 return _res; 4107 4107 } 4108 4108 4109 4109 static PyObject *CF_CFPreferencesSynchronize(PyObject *_self, PyObject *_args) 4110 4110 { 4111 4112 4113 4114 4115 4111 PyObject *_res = NULL; 4112 Boolean _rv; 4113 CFStringRef applicationID; 4114 CFStringRef userName; 4115 CFStringRef hostName; 4116 4116 #ifndef CFPreferencesSynchronize 4117 4118 #endif 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4117 PyMac_PRECHECK(CFPreferencesSynchronize); 4118 #endif 4119 if (!PyArg_ParseTuple(_args, "O&O&O&", 4120 CFStringRefObj_Convert, &applicationID, 4121 CFStringRefObj_Convert, &userName, 4122 CFStringRefObj_Convert, &hostName)) 4123 return NULL; 4124 _rv = CFPreferencesSynchronize(applicationID, 4125 userName, 4126 hostName); 4127 _res = Py_BuildValue("l", 4128 _rv); 4129 return _res; 4130 4130 } 4131 4131 4132 4132 static PyObject *CF_CFPreferencesCopyApplicationList(PyObject *_self, PyObject *_args) 4133 4133 { 4134 4135 4136 4137 4134 PyObject *_res = NULL; 4135 CFArrayRef _rv; 4136 CFStringRef userName; 4137 CFStringRef hostName; 4138 4138 #ifndef CFPreferencesCopyApplicationList 4139 4140 #endif 4141 4142 4143 4144 4145 4146 4147 4148 4149 4139 PyMac_PRECHECK(CFPreferencesCopyApplicationList); 4140 #endif 4141 if (!PyArg_ParseTuple(_args, "O&O&", 4142 CFStringRefObj_Convert, &userName, 4143 CFStringRefObj_Convert, &hostName)) 4144 return NULL; 4145 _rv = CFPreferencesCopyApplicationList(userName, 4146 hostName); 4147 _res = Py_BuildValue("O&", 4148 CFArrayRefObj_New, _rv); 4149 return _res; 4150 4150 } 4151 4151 4152 4152 static PyObject *CF_CFPreferencesCopyKeyList(PyObject *_self, PyObject *_args) 4153 4153 { 4154 4155 4156 4157 4158 4154 PyObject *_res = NULL; 4155 CFArrayRef _rv; 4156 CFStringRef applicationID; 4157 CFStringRef userName; 4158 CFStringRef hostName; 4159 4159 #ifndef CFPreferencesCopyKeyList 4160 4161 #endif 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4160 PyMac_PRECHECK(CFPreferencesCopyKeyList); 4161 #endif 4162 if (!PyArg_ParseTuple(_args, "O&O&O&", 4163 CFStringRefObj_Convert, &applicationID, 4164 CFStringRefObj_Convert, &userName, 4165 CFStringRefObj_Convert, &hostName)) 4166 return NULL; 4167 _rv = CFPreferencesCopyKeyList(applicationID, 4168 userName, 4169 hostName); 4170 _res = Py_BuildValue("O&", 4171 CFArrayRefObj_New, _rv); 4172 return _res; 4173 4173 } 4174 4174 4175 4175 static PyObject *CF_CFStringGetTypeID(PyObject *_self, PyObject *_args) 4176 4176 { 4177 4178 4177 PyObject *_res = NULL; 4178 CFTypeID _rv; 4179 4179 #ifndef CFStringGetTypeID 4180 4181 #endif 4182 4183 4184 4185 4186 4187 4180 PyMac_PRECHECK(CFStringGetTypeID); 4181 #endif 4182 if (!PyArg_ParseTuple(_args, "")) 4183 return NULL; 4184 _rv = CFStringGetTypeID(); 4185 _res = Py_BuildValue("l", 4186 _rv); 4187 return _res; 4188 4188 } 4189 4189 4190 4190 static PyObject *CF_CFStringCreateWithPascalString(PyObject *_self, PyObject *_args) 4191 4191 { 4192 4193 4194 4195 4192 PyObject *_res = NULL; 4193 CFStringRef _rv; 4194 Str255 pStr; 4195 CFStringEncoding encoding; 4196 4196 #ifndef CFStringCreateWithPascalString 4197 4198 #endif 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4197 PyMac_PRECHECK(CFStringCreateWithPascalString); 4198 #endif 4199 if (!PyArg_ParseTuple(_args, "O&l", 4200 PyMac_GetStr255, pStr, 4201 &encoding)) 4202 return NULL; 4203 _rv = CFStringCreateWithPascalString((CFAllocatorRef)NULL, 4204 pStr, 4205 encoding); 4206 _res = Py_BuildValue("O&", 4207 CFStringRefObj_New, _rv); 4208 return _res; 4209 4209 } 4210 4210 4211 4211 static PyObject *CF_CFStringCreateWithCString(PyObject *_self, PyObject *_args) 4212 4212 { 4213 4214 4215 4216 4213 PyObject *_res = NULL; 4214 CFStringRef _rv; 4215 char* cStr; 4216 CFStringEncoding encoding; 4217 4217 #ifndef CFStringCreateWithCString 4218 4219 #endif 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4218 PyMac_PRECHECK(CFStringCreateWithCString); 4219 #endif 4220 if (!PyArg_ParseTuple(_args, "sl", 4221 &cStr, 4222 &encoding)) 4223 return NULL; 4224 _rv = CFStringCreateWithCString((CFAllocatorRef)NULL, 4225 cStr, 4226 encoding); 4227 _res = Py_BuildValue("O&", 4228 CFStringRefObj_New, _rv); 4229 return _res; 4230 4230 } 4231 4231 4232 4232 static PyObject *CF_CFStringCreateWithCharacters(PyObject *_self, PyObject *_args) 4233 4233 { 4234 4235 4236 4237 4238 4234 PyObject *_res = NULL; 4235 CFStringRef _rv; 4236 UniChar *chars__in__; 4237 UniCharCount chars__len__; 4238 int chars__in_len__; 4239 4239 #ifndef CFStringCreateWithCharacters 4240 4241 #endif 4242 4243 4244 4245 4246 4247 4248 4249 4250 4240 PyMac_PRECHECK(CFStringCreateWithCharacters); 4241 #endif 4242 if (!PyArg_ParseTuple(_args, "u#", 4243 &chars__in__, &chars__in_len__)) 4244 return NULL; 4245 chars__len__ = chars__in_len__; 4246 _rv = CFStringCreateWithCharacters((CFAllocatorRef)NULL, 4247 chars__in__, chars__len__); 4248 _res = Py_BuildValue("O&", 4249 CFStringRefObj_New, _rv); 4250 return _res; 4251 4251 } 4252 4252 4253 4253 static PyObject *CF_CFStringCreateWithPascalStringNoCopy(PyObject *_self, PyObject *_args) 4254 4254 { 4255 4256 4257 4258 4255 PyObject *_res = NULL; 4256 CFStringRef _rv; 4257 Str255 pStr; 4258 CFStringEncoding encoding; 4259 4259 #ifndef CFStringCreateWithPascalStringNoCopy 4260 4261 #endif 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4260 PyMac_PRECHECK(CFStringCreateWithPascalStringNoCopy); 4261 #endif 4262 if (!PyArg_ParseTuple(_args, "O&l", 4263 PyMac_GetStr255, pStr, 4264 &encoding)) 4265 return NULL; 4266 _rv = CFStringCreateWithPascalStringNoCopy((CFAllocatorRef)NULL, 4267 pStr, 4268 encoding, 4269 (CFAllocatorRef)NULL); 4270 _res = Py_BuildValue("O&", 4271 CFStringRefObj_New, _rv); 4272 return _res; 4273 4273 } 4274 4274 4275 4275 static PyObject *CF_CFStringCreateWithCStringNoCopy(PyObject *_self, PyObject *_args) 4276 4276 { 4277 4278 4279 4280 4277 PyObject *_res = NULL; 4278 CFStringRef _rv; 4279 char* cStr; 4280 CFStringEncoding encoding; 4281 4281 #ifndef CFStringCreateWithCStringNoCopy 4282 4283 #endif 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4282 PyMac_PRECHECK(CFStringCreateWithCStringNoCopy); 4283 #endif 4284 if (!PyArg_ParseTuple(_args, "sl", 4285 &cStr, 4286 &encoding)) 4287 return NULL; 4288 _rv = CFStringCreateWithCStringNoCopy((CFAllocatorRef)NULL, 4289 cStr, 4290 encoding, 4291 (CFAllocatorRef)NULL); 4292 _res = Py_BuildValue("O&", 4293 CFStringRefObj_New, _rv); 4294 return _res; 4295 4295 } 4296 4296 4297 4297 static PyObject *CF_CFStringCreateWithCharactersNoCopy(PyObject *_self, PyObject *_args) 4298 4298 { 4299 4300 4301 4302 4303 4299 PyObject *_res = NULL; 4300 CFStringRef _rv; 4301 UniChar *chars__in__; 4302 UniCharCount chars__len__; 4303 int chars__in_len__; 4304 4304 #ifndef CFStringCreateWithCharactersNoCopy 4305 4306 #endif 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4305 PyMac_PRECHECK(CFStringCreateWithCharactersNoCopy); 4306 #endif 4307 if (!PyArg_ParseTuple(_args, "u#", 4308 &chars__in__, &chars__in_len__)) 4309 return NULL; 4310 chars__len__ = chars__in_len__; 4311 _rv = CFStringCreateWithCharactersNoCopy((CFAllocatorRef)NULL, 4312 chars__in__, chars__len__, 4313 (CFAllocatorRef)NULL); 4314 _res = Py_BuildValue("O&", 4315 CFStringRefObj_New, _rv); 4316 return _res; 4317 4317 } 4318 4318 4319 4319 static PyObject *CF_CFStringCreateMutable(PyObject *_self, PyObject *_args) 4320 4320 { 4321 4322 4323 4321 PyObject *_res = NULL; 4322 CFMutableStringRef _rv; 4323 CFIndex maxLength; 4324 4324 #ifndef CFStringCreateMutable 4325 4326 #endif 4327 4328 4329 4330 4331 4332 4333 4334 4325 PyMac_PRECHECK(CFStringCreateMutable); 4326 #endif 4327 if (!PyArg_ParseTuple(_args, "l", 4328 &maxLength)) 4329 return NULL; 4330 _rv = CFStringCreateMutable((CFAllocatorRef)NULL, 4331 maxLength); 4332 _res = Py_BuildValue("O&", 4333 CFMutableStringRefObj_New, _rv); 4334 return _res; 4335 4335 } 4336 4336 4337 4337 static PyObject *CF_CFStringCreateMutableCopy(PyObject *_self, PyObject *_args) 4338 4338 { 4339 4340 4341 4342 4339 PyObject *_res = NULL; 4340 CFMutableStringRef _rv; 4341 CFIndex maxLength; 4342 CFStringRef theString; 4343 4343 #ifndef CFStringCreateMutableCopy 4344 4345 #endif 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4344 PyMac_PRECHECK(CFStringCreateMutableCopy); 4345 #endif 4346 if (!PyArg_ParseTuple(_args, "lO&", 4347 &maxLength, 4348 CFStringRefObj_Convert, &theString)) 4349 return NULL; 4350 _rv = CFStringCreateMutableCopy((CFAllocatorRef)NULL, 4351 maxLength, 4352 theString); 4353 _res = Py_BuildValue("O&", 4354 CFMutableStringRefObj_New, _rv); 4355 return _res; 4356 4356 } 4357 4357 4358 4358 static PyObject *CF_CFStringCreateWithBytes(PyObject *_self, PyObject *_args) 4359 4359 { 4360 4361 4362 4363 4364 4365 4366 4360 PyObject *_res = NULL; 4361 CFStringRef _rv; 4362 unsigned char *bytes__in__; 4363 long bytes__len__; 4364 int bytes__in_len__; 4365 CFStringEncoding encoding; 4366 Boolean isExternalRepresentation; 4367 4367 #ifndef CFStringCreateWithBytes 4368 4369 #endif 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4368 PyMac_PRECHECK(CFStringCreateWithBytes); 4369 #endif 4370 if (!PyArg_ParseTuple(_args, "s#ll", 4371 &bytes__in__, &bytes__in_len__, 4372 &encoding, 4373 &isExternalRepresentation)) 4374 return NULL; 4375 bytes__len__ = bytes__in_len__; 4376 _rv = CFStringCreateWithBytes((CFAllocatorRef)NULL, 4377 bytes__in__, bytes__len__, 4378 encoding, 4379 isExternalRepresentation); 4380 _res = Py_BuildValue("O&", 4381 CFStringRefObj_New, _rv); 4382 return _res; 4383 4383 } 4384 4384 4385 4385 static PyObject *CF_CFStringGetSystemEncoding(PyObject *_self, PyObject *_args) 4386 4386 { 4387 4388 4387 PyObject *_res = NULL; 4388 CFStringEncoding _rv; 4389 4389 #ifndef CFStringGetSystemEncoding 4390 4391 #endif 4392 4393 4394 4395 4396 4397 4390 PyMac_PRECHECK(CFStringGetSystemEncoding); 4391 #endif 4392 if (!PyArg_ParseTuple(_args, "")) 4393 return NULL; 4394 _rv = CFStringGetSystemEncoding(); 4395 _res = Py_BuildValue("l", 4396 _rv); 4397 return _res; 4398 4398 } 4399 4399 4400 4400 static PyObject *CF_CFStringGetMaximumSizeForEncoding(PyObject *_self, PyObject *_args) 4401 4401 { 4402 4403 4404 4405 4402 PyObject *_res = NULL; 4403 CFIndex _rv; 4404 CFIndex length; 4405 CFStringEncoding encoding; 4406 4406 #ifndef CFStringGetMaximumSizeForEncoding 4407 4408 #endif 4409 4410 4411 4412 4413 4414 4415 4416 4417 4407 PyMac_PRECHECK(CFStringGetMaximumSizeForEncoding); 4408 #endif 4409 if (!PyArg_ParseTuple(_args, "ll", 4410 &length, 4411 &encoding)) 4412 return NULL; 4413 _rv = CFStringGetMaximumSizeForEncoding(length, 4414 encoding); 4415 _res = Py_BuildValue("l", 4416 _rv); 4417 return _res; 4418 4418 } 4419 4419 4420 4420 static PyObject *CF_CFStringIsEncodingAvailable(PyObject *_self, PyObject *_args) 4421 4421 { 4422 4423 4424 4422 PyObject *_res = NULL; 4423 Boolean _rv; 4424 CFStringEncoding encoding; 4425 4425 #ifndef CFStringIsEncodingAvailable 4426 4427 #endif 4428 4429 4430 4431 4432 4433 4434 4426 PyMac_PRECHECK(CFStringIsEncodingAvailable); 4427 #endif 4428 if (!PyArg_ParseTuple(_args, "l", 4429 &encoding)) 4430 return NULL; 4431 _rv = CFStringIsEncodingAvailable(encoding); 4432 _res = Py_BuildValue("l", 4433 _rv); 4434 return _res; 4435 4435 } 4436 4436 4437 4437 static PyObject *CF_CFStringGetNameOfEncoding(PyObject *_self, PyObject *_args) 4438 4438 { 4439 4440 4441 4439 PyObject *_res = NULL; 4440 CFStringRef _rv; 4441 CFStringEncoding encoding; 4442 4442 #ifndef CFStringGetNameOfEncoding 4443 4444 #endif 4445 4446 4447 4448 4449 4450 4451 4443 PyMac_PRECHECK(CFStringGetNameOfEncoding); 4444 #endif 4445 if (!PyArg_ParseTuple(_args, "l", 4446 &encoding)) 4447 return NULL; 4448 _rv = CFStringGetNameOfEncoding(encoding); 4449 _res = Py_BuildValue("O&", 4450 CFStringRefObj_New, _rv); 4451 return _res; 4452 4452 } 4453 4453 4454 4454 static PyObject *CF_CFStringConvertEncodingToNSStringEncoding(PyObject *_self, PyObject *_args) 4455 4455 { 4456 4457 4458 4456 PyObject *_res = NULL; 4457 UInt32 _rv; 4458 CFStringEncoding encoding; 4459 4459 #ifndef CFStringConvertEncodingToNSStringEncoding 4460 4461 #endif 4462 4463 4464 4465 4466 4467 4468 4460 PyMac_PRECHECK(CFStringConvertEncodingToNSStringEncoding); 4461 #endif 4462 if (!PyArg_ParseTuple(_args, "l", 4463 &encoding)) 4464 return NULL; 4465 _rv = CFStringConvertEncodingToNSStringEncoding(encoding); 4466 _res = Py_BuildValue("l", 4467 _rv); 4468 return _res; 4469 4469 } 4470 4470 4471 4471 static PyObject *CF_CFStringConvertNSStringEncodingToEncoding(PyObject *_self, PyObject *_args) 4472 4472 { 4473 4474 4475 4473 PyObject *_res = NULL; 4474 CFStringEncoding _rv; 4475 UInt32 encoding; 4476 4476 #ifndef CFStringConvertNSStringEncodingToEncoding 4477 4478 #endif 4479 4480 4481 4482 4483 4484 4485 4477 PyMac_PRECHECK(CFStringConvertNSStringEncodingToEncoding); 4478 #endif 4479 if (!PyArg_ParseTuple(_args, "l", 4480 &encoding)) 4481 return NULL; 4482 _rv = CFStringConvertNSStringEncodingToEncoding(encoding); 4483 _res = Py_BuildValue("l", 4484 _rv); 4485 return _res; 4486 4486 } 4487 4487 4488 4488 static PyObject *CF_CFStringConvertEncodingToWindowsCodepage(PyObject *_self, PyObject *_args) 4489 4489 { 4490 4491 4492 4490 PyObject *_res = NULL; 4491 UInt32 _rv; 4492 CFStringEncoding encoding; 4493 4493 #ifndef CFStringConvertEncodingToWindowsCodepage 4494 4495 #endif 4496 4497 4498 4499 4500 4501 4502 4494 PyMac_PRECHECK(CFStringConvertEncodingToWindowsCodepage); 4495 #endif 4496 if (!PyArg_ParseTuple(_args, "l", 4497 &encoding)) 4498 return NULL; 4499 _rv = CFStringConvertEncodingToWindowsCodepage(encoding); 4500 _res = Py_BuildValue("l", 4501 _rv); 4502 return _res; 4503 4503 } 4504 4504 4505 4505 static PyObject *CF_CFStringConvertWindowsCodepageToEncoding(PyObject *_self, PyObject *_args) 4506 4506 { 4507 4508 4509 4507 PyObject *_res = NULL; 4508 CFStringEncoding _rv; 4509 UInt32 codepage; 4510 4510 #ifndef CFStringConvertWindowsCodepageToEncoding 4511 4512 #endif 4513 4514 4515 4516 4517 4518 4519 4511 PyMac_PRECHECK(CFStringConvertWindowsCodepageToEncoding); 4512 #endif 4513 if (!PyArg_ParseTuple(_args, "l", 4514 &codepage)) 4515 return NULL; 4516 _rv = CFStringConvertWindowsCodepageToEncoding(codepage); 4517 _res = Py_BuildValue("l", 4518 _rv); 4519 return _res; 4520 4520 } 4521 4521 4522 4522 static PyObject *CF_CFStringConvertEncodingToIANACharSetName(PyObject *_self, PyObject *_args) 4523 4523 { 4524 4525 4526 4524 PyObject *_res = NULL; 4525 CFStringRef _rv; 4526 CFStringEncoding encoding; 4527 4527 #ifndef CFStringConvertEncodingToIANACharSetName 4528 4529 #endif 4530 4531 4532 4533 4534 4535 4536 4528 PyMac_PRECHECK(CFStringConvertEncodingToIANACharSetName); 4529 #endif 4530 if (!PyArg_ParseTuple(_args, "l", 4531 &encoding)) 4532 return NULL; 4533 _rv = CFStringConvertEncodingToIANACharSetName(encoding); 4534 _res = Py_BuildValue("O&", 4535 CFStringRefObj_New, _rv); 4536 return _res; 4537 4537 } 4538 4538 4539 4539 static PyObject *CF_CFStringGetMostCompatibleMacStringEncoding(PyObject *_self, PyObject *_args) 4540 4540 { 4541 4542 4543 4541 PyObject *_res = NULL; 4542 CFStringEncoding _rv; 4543 CFStringEncoding encoding; 4544 4544 #ifndef CFStringGetMostCompatibleMacStringEncoding 4545 4546 #endif 4547 4548 4549 4550 4551 4552 4553 4545 PyMac_PRECHECK(CFStringGetMostCompatibleMacStringEncoding); 4546 #endif 4547 if (!PyArg_ParseTuple(_args, "l", 4548 &encoding)) 4549 return NULL; 4550 _rv = CFStringGetMostCompatibleMacStringEncoding(encoding); 4551 _res = Py_BuildValue("l", 4552 _rv); 4553 return _res; 4554 4554 } 4555 4555 4556 4556 static PyObject *CF___CFStringMakeConstantString(PyObject *_self, PyObject *_args) 4557 4557 { 4558 4559 4560 4558 PyObject *_res = NULL; 4559 CFStringRef _rv; 4560 char* cStr; 4561 4561 #ifndef __CFStringMakeConstantString 4562 4563 #endif 4564 4565 4566 4567 4568 4569 4570 4562 PyMac_PRECHECK(__CFStringMakeConstantString); 4563 #endif 4564 if (!PyArg_ParseTuple(_args, "s", 4565 &cStr)) 4566 return NULL; 4567 _rv = __CFStringMakeConstantString(cStr); 4568 _res = Py_BuildValue("O&", 4569 CFStringRefObj_New, _rv); 4570 return _res; 4571 4571 } 4572 4572 4573 4573 static PyObject *CF_CFURLGetTypeID(PyObject *_self, PyObject *_args) 4574 4574 { 4575 4576 4575 PyObject *_res = NULL; 4576 CFTypeID _rv; 4577 4577 #ifndef CFURLGetTypeID 4578 4579 #endif 4580 4581 4582 4583 4584 4585 4578 PyMac_PRECHECK(CFURLGetTypeID); 4579 #endif 4580 if (!PyArg_ParseTuple(_args, "")) 4581 return NULL; 4582 _rv = CFURLGetTypeID(); 4583 _res = Py_BuildValue("l", 4584 _rv); 4585 return _res; 4586 4586 } 4587 4587 4588 4588 static PyObject *CF_CFURLCreateWithBytes(PyObject *_self, PyObject *_args) 4589 4589 { 4590 4591 4592 4593 4594 4595 4596 4590 PyObject *_res = NULL; 4591 CFURLRef _rv; 4592 unsigned char *URLBytes__in__; 4593 long URLBytes__len__; 4594 int URLBytes__in_len__; 4595 CFStringEncoding encoding; 4596 CFURLRef baseURL; 4597 4597 #ifndef CFURLCreateWithBytes 4598 4599 #endif 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4598 PyMac_PRECHECK(CFURLCreateWithBytes); 4599 #endif 4600 if (!PyArg_ParseTuple(_args, "s#lO&", 4601 &URLBytes__in__, &URLBytes__in_len__, 4602 &encoding, 4603 OptionalCFURLRefObj_Convert, &baseURL)) 4604 return NULL; 4605 URLBytes__len__ = URLBytes__in_len__; 4606 _rv = CFURLCreateWithBytes((CFAllocatorRef)NULL, 4607 URLBytes__in__, URLBytes__len__, 4608 encoding, 4609 baseURL); 4610 _res = Py_BuildValue("O&", 4611 CFURLRefObj_New, _rv); 4612 return _res; 4613 4613 } 4614 4614 4615 4615 static PyObject *CF_CFURLCreateFromFileSystemRepresentation(PyObject *_self, PyObject *_args) 4616 4616 { 4617 4618 4619 4620 4621 4622 4617 PyObject *_res = NULL; 4618 CFURLRef _rv; 4619 unsigned char *buffer__in__; 4620 long buffer__len__; 4621 int buffer__in_len__; 4622 Boolean isDirectory; 4623 4623 #ifndef CFURLCreateFromFileSystemRepresentation 4624 4625 #endif 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4624 PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentation); 4625 #endif 4626 if (!PyArg_ParseTuple(_args, "s#l", 4627 &buffer__in__, &buffer__in_len__, 4628 &isDirectory)) 4629 return NULL; 4630 buffer__len__ = buffer__in_len__; 4631 _rv = CFURLCreateFromFileSystemRepresentation((CFAllocatorRef)NULL, 4632 buffer__in__, buffer__len__, 4633 isDirectory); 4634 _res = Py_BuildValue("O&", 4635 CFURLRefObj_New, _rv); 4636 return _res; 4637 4637 } 4638 4638 4639 4639 static PyObject *CF_CFURLCreateFromFileSystemRepresentationRelativeToBase(PyObject *_self, PyObject *_args) 4640 4640 { 4641 4642 4643 4644 4645 4646 4647 4641 PyObject *_res = NULL; 4642 CFURLRef _rv; 4643 unsigned char *buffer__in__; 4644 long buffer__len__; 4645 int buffer__in_len__; 4646 Boolean isDirectory; 4647 CFURLRef baseURL; 4648 4648 #ifndef CFURLCreateFromFileSystemRepresentationRelativeToBase 4649 4650 #endif 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4649 PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentationRelativeToBase); 4650 #endif 4651 if (!PyArg_ParseTuple(_args, "s#lO&", 4652 &buffer__in__, &buffer__in_len__, 4653 &isDirectory, 4654 OptionalCFURLRefObj_Convert, &baseURL)) 4655 return NULL; 4656 buffer__len__ = buffer__in_len__; 4657 _rv = CFURLCreateFromFileSystemRepresentationRelativeToBase((CFAllocatorRef)NULL, 4658 buffer__in__, buffer__len__, 4659 isDirectory, 4660 baseURL); 4661 _res = Py_BuildValue("O&", 4662 CFURLRefObj_New, _rv); 4663 return _res; 4664 4664 } 4665 4665 4666 4666 static PyObject *CF_CFURLCreateFromFSRef(PyObject *_self, PyObject *_args) 4667 4667 { 4668 4669 4670 4668 PyObject *_res = NULL; 4669 CFURLRef _rv; 4670 FSRef fsRef; 4671 4671 #ifndef CFURLCreateFromFSRef 4672 4673 #endif 4674 4675 4676 4677 4678 4679 4680 4681 4672 PyMac_PRECHECK(CFURLCreateFromFSRef); 4673 #endif 4674 if (!PyArg_ParseTuple(_args, "O&", 4675 PyMac_GetFSRef, &fsRef)) 4676 return NULL; 4677 _rv = CFURLCreateFromFSRef((CFAllocatorRef)NULL, 4678 &fsRef); 4679 _res = Py_BuildValue("O&", 4680 CFURLRefObj_New, _rv); 4681 return _res; 4682 4682 } 4683 4683 4684 4684 static PyObject *CF_toCF(PyObject *_self, PyObject *_args) 4685 4685 { 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4686 PyObject *_res = NULL; 4687 4688 CFTypeRef rv; 4689 CFTypeID typeid; 4690 4691 if (!PyArg_ParseTuple(_args, "O&", PyCF_Python2CF, &rv)) 4692 return NULL; 4693 typeid = CFGetTypeID(rv); 4694 4695 if (typeid == CFStringGetTypeID()) 4696 return Py_BuildValue("O&", CFStringRefObj_New, rv); 4697 if (typeid == CFArrayGetTypeID()) 4698 return Py_BuildValue("O&", CFArrayRefObj_New, rv); 4699 if (typeid == CFDictionaryGetTypeID()) 4700 return Py_BuildValue("O&", CFDictionaryRefObj_New, rv); 4701 if (typeid == CFURLGetTypeID()) 4702 return Py_BuildValue("O&", CFURLRefObj_New, rv); 4703 4704 _res = Py_BuildValue("O&", CFTypeRefObj_New, rv); 4705 return _res; 4706 4706 4707 4707 } 4708 4708 4709 4709 static PyMethodDef CF_methods[] = { 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4710 {"__CFRangeMake", (PyCFunction)CF___CFRangeMake, 1, 4711 PyDoc_STR("(CFIndex loc, CFIndex len) -> (CFRange _rv)")}, 4712 {"CFAllocatorGetTypeID", (PyCFunction)CF_CFAllocatorGetTypeID, 1, 4713 PyDoc_STR("() -> (CFTypeID _rv)")}, 4714 {"CFAllocatorGetPreferredSizeForSize", (PyCFunction)CF_CFAllocatorGetPreferredSizeForSize, 1, 4715 PyDoc_STR("(CFIndex size, CFOptionFlags hint) -> (CFIndex _rv)")}, 4716 {"CFCopyTypeIDDescription", (PyCFunction)CF_CFCopyTypeIDDescription, 1, 4717 PyDoc_STR("(CFTypeID type_id) -> (CFStringRef _rv)")}, 4718 {"CFArrayGetTypeID", (PyCFunction)CF_CFArrayGetTypeID, 1, 4719 PyDoc_STR("() -> (CFTypeID _rv)")}, 4720 {"CFArrayCreateMutable", (PyCFunction)CF_CFArrayCreateMutable, 1, 4721 PyDoc_STR("(CFIndex capacity) -> (CFMutableArrayRef _rv)")}, 4722 {"CFArrayCreateMutableCopy", (PyCFunction)CF_CFArrayCreateMutableCopy, 1, 4723 PyDoc_STR("(CFIndex capacity, CFArrayRef theArray) -> (CFMutableArrayRef _rv)")}, 4724 {"CFDataGetTypeID", (PyCFunction)CF_CFDataGetTypeID, 1, 4725 PyDoc_STR("() -> (CFTypeID _rv)")}, 4726 {"CFDataCreate", (PyCFunction)CF_CFDataCreate, 1, 4727 PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")}, 4728 {"CFDataCreateWithBytesNoCopy", (PyCFunction)CF_CFDataCreateWithBytesNoCopy, 1, 4729 PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")}, 4730 {"CFDataCreateMutable", (PyCFunction)CF_CFDataCreateMutable, 1, 4731 PyDoc_STR("(CFIndex capacity) -> (CFMutableDataRef _rv)")}, 4732 {"CFDataCreateMutableCopy", (PyCFunction)CF_CFDataCreateMutableCopy, 1, 4733 PyDoc_STR("(CFIndex capacity, CFDataRef theData) -> (CFMutableDataRef _rv)")}, 4734 {"CFDictionaryGetTypeID", (PyCFunction)CF_CFDictionaryGetTypeID, 1, 4735 PyDoc_STR("() -> (CFTypeID _rv)")}, 4736 {"CFDictionaryCreateMutable", (PyCFunction)CF_CFDictionaryCreateMutable, 1, 4737 PyDoc_STR("(CFIndex capacity) -> (CFMutableDictionaryRef _rv)")}, 4738 {"CFDictionaryCreateMutableCopy", (PyCFunction)CF_CFDictionaryCreateMutableCopy, 1, 4739 PyDoc_STR("(CFIndex capacity, CFDictionaryRef theDict) -> (CFMutableDictionaryRef _rv)")}, 4740 {"CFPreferencesCopyAppValue", (PyCFunction)CF_CFPreferencesCopyAppValue, 1, 4741 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFTypeRef _rv)")}, 4742 {"CFPreferencesGetAppBooleanValue", (PyCFunction)CF_CFPreferencesGetAppBooleanValue, 1, 4743 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (Boolean _rv, Boolean keyExistsAndHasValidFormat)")}, 4744 {"CFPreferencesGetAppIntegerValue", (PyCFunction)CF_CFPreferencesGetAppIntegerValue, 1, 4745 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFIndex _rv, Boolean keyExistsAndHasValidFormat)")}, 4746 {"CFPreferencesSetAppValue", (PyCFunction)CF_CFPreferencesSetAppValue, 1, 4747 PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID) -> None")}, 4748 {"CFPreferencesAddSuitePreferencesToApp", (PyCFunction)CF_CFPreferencesAddSuitePreferencesToApp, 1, 4749 PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")}, 4750 {"CFPreferencesRemoveSuitePreferencesFromApp", (PyCFunction)CF_CFPreferencesRemoveSuitePreferencesFromApp, 1, 4751 PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")}, 4752 {"CFPreferencesAppSynchronize", (PyCFunction)CF_CFPreferencesAppSynchronize, 1, 4753 PyDoc_STR("(CFStringRef applicationID) -> (Boolean _rv)")}, 4754 {"CFPreferencesCopyValue", (PyCFunction)CF_CFPreferencesCopyValue, 1, 4755 PyDoc_STR("(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFTypeRef _rv)")}, 4756 {"CFPreferencesCopyMultiple", (PyCFunction)CF_CFPreferencesCopyMultiple, 1, 4757 PyDoc_STR("(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFDictionaryRef _rv)")}, 4758 {"CFPreferencesSetValue", (PyCFunction)CF_CFPreferencesSetValue, 1, 4759 PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")}, 4760 {"CFPreferencesSetMultiple", (PyCFunction)CF_CFPreferencesSetMultiple, 1, 4761 PyDoc_STR("(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")}, 4762 {"CFPreferencesSynchronize", (PyCFunction)CF_CFPreferencesSynchronize, 1, 4763 PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (Boolean _rv)")}, 4764 {"CFPreferencesCopyApplicationList", (PyCFunction)CF_CFPreferencesCopyApplicationList, 1, 4765 PyDoc_STR("(CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")}, 4766 {"CFPreferencesCopyKeyList", (PyCFunction)CF_CFPreferencesCopyKeyList, 1, 4767 PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")}, 4768 {"CFStringGetTypeID", (PyCFunction)CF_CFStringGetTypeID, 1, 4769 PyDoc_STR("() -> (CFTypeID _rv)")}, 4770 {"CFStringCreateWithPascalString", (PyCFunction)CF_CFStringCreateWithPascalString, 1, 4771 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4772 {"CFStringCreateWithCString", (PyCFunction)CF_CFStringCreateWithCString, 1, 4773 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4774 {"CFStringCreateWithCharacters", (PyCFunction)CF_CFStringCreateWithCharacters, 1, 4775 PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")}, 4776 {"CFStringCreateWithPascalStringNoCopy", (PyCFunction)CF_CFStringCreateWithPascalStringNoCopy, 1, 4777 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4778 {"CFStringCreateWithCStringNoCopy", (PyCFunction)CF_CFStringCreateWithCStringNoCopy, 1, 4779 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4780 {"CFStringCreateWithCharactersNoCopy", (PyCFunction)CF_CFStringCreateWithCharactersNoCopy, 1, 4781 PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")}, 4782 {"CFStringCreateMutable", (PyCFunction)CF_CFStringCreateMutable, 1, 4783 PyDoc_STR("(CFIndex maxLength) -> (CFMutableStringRef _rv)")}, 4784 {"CFStringCreateMutableCopy", (PyCFunction)CF_CFStringCreateMutableCopy, 1, 4785 PyDoc_STR("(CFIndex maxLength, CFStringRef theString) -> (CFMutableStringRef _rv)")}, 4786 {"CFStringCreateWithBytes", (PyCFunction)CF_CFStringCreateWithBytes, 1, 4787 PyDoc_STR("(Buffer bytes, CFStringEncoding encoding, Boolean isExternalRepresentation) -> (CFStringRef _rv)")}, 4788 {"CFStringGetSystemEncoding", (PyCFunction)CF_CFStringGetSystemEncoding, 1, 4789 PyDoc_STR("() -> (CFStringEncoding _rv)")}, 4790 {"CFStringGetMaximumSizeForEncoding", (PyCFunction)CF_CFStringGetMaximumSizeForEncoding, 1, 4791 PyDoc_STR("(CFIndex length, CFStringEncoding encoding) -> (CFIndex _rv)")}, 4792 {"CFStringIsEncodingAvailable", (PyCFunction)CF_CFStringIsEncodingAvailable, 1, 4793 PyDoc_STR("(CFStringEncoding encoding) -> (Boolean _rv)")}, 4794 {"CFStringGetNameOfEncoding", (PyCFunction)CF_CFStringGetNameOfEncoding, 1, 4795 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4796 {"CFStringConvertEncodingToNSStringEncoding", (PyCFunction)CF_CFStringConvertEncodingToNSStringEncoding, 1, 4797 PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")}, 4798 {"CFStringConvertNSStringEncodingToEncoding", (PyCFunction)CF_CFStringConvertNSStringEncodingToEncoding, 1, 4799 PyDoc_STR("(UInt32 encoding) -> (CFStringEncoding _rv)")}, 4800 {"CFStringConvertEncodingToWindowsCodepage", (PyCFunction)CF_CFStringConvertEncodingToWindowsCodepage, 1, 4801 PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")}, 4802 {"CFStringConvertWindowsCodepageToEncoding", (PyCFunction)CF_CFStringConvertWindowsCodepageToEncoding, 1, 4803 PyDoc_STR("(UInt32 codepage) -> (CFStringEncoding _rv)")}, 4804 {"CFStringConvertEncodingToIANACharSetName", (PyCFunction)CF_CFStringConvertEncodingToIANACharSetName, 1, 4805 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")}, 4806 {"CFStringGetMostCompatibleMacStringEncoding", (PyCFunction)CF_CFStringGetMostCompatibleMacStringEncoding, 1, 4807 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringEncoding _rv)")}, 4808 {"__CFStringMakeConstantString", (PyCFunction)CF___CFStringMakeConstantString, 1, 4809 PyDoc_STR("(char* cStr) -> (CFStringRef _rv)")}, 4810 {"CFURLGetTypeID", (PyCFunction)CF_CFURLGetTypeID, 1, 4811 PyDoc_STR("() -> (CFTypeID _rv)")}, 4812 {"CFURLCreateWithBytes", (PyCFunction)CF_CFURLCreateWithBytes, 1, 4813 PyDoc_STR("(Buffer URLBytes, CFStringEncoding encoding, CFURLRef baseURL) -> (CFURLRef _rv)")}, 4814 {"CFURLCreateFromFileSystemRepresentation", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentation, 1, 4815 PyDoc_STR("(Buffer buffer, Boolean isDirectory) -> (CFURLRef _rv)")}, 4816 {"CFURLCreateFromFileSystemRepresentationRelativeToBase", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentationRelativeToBase, 1, 4817 PyDoc_STR("(Buffer buffer, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")}, 4818 {"CFURLCreateFromFSRef", (PyCFunction)CF_CFURLCreateFromFSRef, 1, 4819 PyDoc_STR("(FSRef fsRef) -> (CFURLRef _rv)")}, 4820 {"toCF", (PyCFunction)CF_toCF, 1, 4821 PyDoc_STR("(python_object) -> (CF_object)")}, 4822 {NULL, NULL, 0} 4823 4823 }; 4824 4824 … … 4829 4829 PyObject *CFObj_New(CFTypeRef itself) 4830 4830 { 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4831 if (itself == NULL) 4832 { 4833 PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL"); 4834 return NULL; 4835 } 4836 if (CFGetTypeID(itself) == CFArrayGetTypeID()) return CFArrayRefObj_New((CFArrayRef)itself); 4837 if (CFGetTypeID(itself) == CFDictionaryGetTypeID()) return CFDictionaryRefObj_New((CFDictionaryRef)itself); 4838 if (CFGetTypeID(itself) == CFDataGetTypeID()) return CFDataRefObj_New((CFDataRef)itself); 4839 if (CFGetTypeID(itself) == CFStringGetTypeID()) return CFStringRefObj_New((CFStringRef)itself); 4840 if (CFGetTypeID(itself) == CFURLGetTypeID()) return CFURLRefObj_New((CFURLRef)itself); 4841 /* XXXX Or should we use PyCF_CF2Python here?? */ 4842 return CFTypeRefObj_New(itself); 4843 4843 } 4844 4844 int CFObj_Convert(PyObject *v, CFTypeRef *p_itself) 4845 4845 { 4846 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4847 if (v == Py_None) { *p_itself = NULL; return 1; } 4848 /* Check for other CF objects here */ 4849 4850 if (!CFTypeRefObj_Check(v) && 4851 !CFArrayRefObj_Check(v) && 4852 !CFMutableArrayRefObj_Check(v) && 4853 !CFDictionaryRefObj_Check(v) && 4854 !CFMutableDictionaryRefObj_Check(v) && 4855 !CFDataRefObj_Check(v) && 4856 !CFMutableDataRefObj_Check(v) && 4857 !CFStringRefObj_Check(v) && 4858 !CFMutableStringRefObj_Check(v) && 4859 !CFURLRefObj_Check(v) ) 4860 { 4861 /* XXXX Or should we use PyCF_Python2CF here?? */ 4862 PyErr_SetString(PyExc_TypeError, "CF object required"); 4863 return 0; 4864 } 4865 *p_itself = ((CFTypeRefObject *)v)->ob_itself; 4866 return 1; 4867 4867 } 4868 4868 … … 4870 4870 void init_CF(void) 4871 4871 { 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4872 PyObject *m; 4873 PyObject *d; 4874 4875 4876 4877 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFObj_New); 4878 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFObj_Convert); 4879 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFTypeRefObj_New); 4880 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFTypeRefObj_Convert); 4881 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFStringRef, CFStringRefObj_New); 4882 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFStringRef, CFStringRefObj_Convert); 4883 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableStringRef, CFMutableStringRefObj_New); 4884 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableStringRef, CFMutableStringRefObj_Convert); 4885 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFArrayRef, CFArrayRefObj_New); 4886 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFArrayRef, CFArrayRefObj_Convert); 4887 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableArrayRef, CFMutableArrayRefObj_New); 4888 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableArrayRef, CFMutableArrayRefObj_Convert); 4889 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFDictionaryRef, CFDictionaryRefObj_New); 4890 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFDictionaryRef, CFDictionaryRefObj_Convert); 4891 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableDictionaryRef, CFMutableDictionaryRefObj_New); 4892 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableDictionaryRef, CFMutableDictionaryRefObj_Convert); 4893 PyMac_INIT_TOOLBOX_OBJECT_NEW(CFURLRef, CFURLRefObj_New); 4894 PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFURLRef, CFURLRefObj_Convert); 4895 4896 4897 m = Py_InitModule("_CF", CF_methods); 4898 d = PyModule_GetDict(m); 4899 CF_Error = PyMac_GetOSErrException(); 4900 if (CF_Error == NULL || 4901 PyDict_SetItemString(d, "Error", CF_Error) != 0) 4902 return; 4903 CFTypeRef_Type.ob_type = &PyType_Type; 4904 if (PyType_Ready(&CFTypeRef_Type) < 0) return; 4905 Py_INCREF(&CFTypeRef_Type); 4906 PyModule_AddObject(m, "CFTypeRef", (PyObject *)&CFTypeRef_Type); 4907 /* Backward-compatible name */ 4908 Py_INCREF(&CFTypeRef_Type); 4909 PyModule_AddObject(m, "CFTypeRefType", (PyObject *)&CFTypeRef_Type); 4910 CFArrayRef_Type.ob_type = &PyType_Type; 4911 CFArrayRef_Type.tp_base = &CFTypeRef_Type; 4912 if (PyType_Ready(&CFArrayRef_Type) < 0) return; 4913 Py_INCREF(&CFArrayRef_Type); 4914 PyModule_AddObject(m, "CFArrayRef", (PyObject *)&CFArrayRef_Type); 4915 /* Backward-compatible name */ 4916 Py_INCREF(&CFArrayRef_Type); 4917 PyModule_AddObject(m, "CFArrayRefType", (PyObject *)&CFArrayRef_Type); 4918 CFMutableArrayRef_Type.ob_type = &PyType_Type; 4919 CFMutableArrayRef_Type.tp_base = &CFArrayRef_Type; 4920 if (PyType_Ready(&CFMutableArrayRef_Type) < 0) return; 4921 Py_INCREF(&CFMutableArrayRef_Type); 4922 PyModule_AddObject(m, "CFMutableArrayRef", (PyObject *)&CFMutableArrayRef_Type); 4923 /* Backward-compatible name */ 4924 Py_INCREF(&CFMutableArrayRef_Type); 4925 PyModule_AddObject(m, "CFMutableArrayRefType", (PyObject *)&CFMutableArrayRef_Type); 4926 CFDictionaryRef_Type.ob_type = &PyType_Type; 4927 CFDictionaryRef_Type.tp_base = &CFTypeRef_Type; 4928 if (PyType_Ready(&CFDictionaryRef_Type) < 0) return; 4929 Py_INCREF(&CFDictionaryRef_Type); 4930 PyModule_AddObject(m, "CFDictionaryRef", (PyObject *)&CFDictionaryRef_Type); 4931 /* Backward-compatible name */ 4932 Py_INCREF(&CFDictionaryRef_Type); 4933 PyModule_AddObject(m, "CFDictionaryRefType", (PyObject *)&CFDictionaryRef_Type); 4934 CFMutableDictionaryRef_Type.ob_type = &PyType_Type; 4935 CFMutableDictionaryRef_Type.tp_base = &CFDictionaryRef_Type; 4936 if (PyType_Ready(&CFMutableDictionaryRef_Type) < 0) return; 4937 Py_INCREF(&CFMutableDictionaryRef_Type); 4938 PyModule_AddObject(m, "CFMutableDictionaryRef", (PyObject *)&CFMutableDictionaryRef_Type); 4939 /* Backward-compatible name */ 4940 Py_INCREF(&CFMutableDictionaryRef_Type); 4941 PyModule_AddObject(m, "CFMutableDictionaryRefType", (PyObject *)&CFMutableDictionaryRef_Type); 4942 CFDataRef_Type.ob_type = &PyType_Type; 4943 CFDataRef_Type.tp_base = &CFTypeRef_Type; 4944 if (PyType_Ready(&CFDataRef_Type) < 0) return; 4945 Py_INCREF(&CFDataRef_Type); 4946 PyModule_AddObject(m, "CFDataRef", (PyObject *)&CFDataRef_Type); 4947 /* Backward-compatible name */ 4948 Py_INCREF(&CFDataRef_Type); 4949 PyModule_AddObject(m, "CFDataRefType", (PyObject *)&CFDataRef_Type); 4950 CFMutableDataRef_Type.ob_type = &PyType_Type; 4951 CFMutableDataRef_Type.tp_base = &CFDataRef_Type; 4952 if (PyType_Ready(&CFMutableDataRef_Type) < 0) return; 4953 Py_INCREF(&CFMutableDataRef_Type); 4954 PyModule_AddObject(m, "CFMutableDataRef", (PyObject *)&CFMutableDataRef_Type); 4955 /* Backward-compatible name */ 4956 Py_INCREF(&CFMutableDataRef_Type); 4957 PyModule_AddObject(m, "CFMutableDataRefType", (PyObject *)&CFMutableDataRef_Type); 4958 CFStringRef_Type.ob_type = &PyType_Type; 4959 CFStringRef_Type.tp_base = &CFTypeRef_Type; 4960 if (PyType_Ready(&CFStringRef_Type) < 0) return; 4961 Py_INCREF(&CFStringRef_Type); 4962 PyModule_AddObject(m, "CFStringRef", (PyObject *)&CFStringRef_Type); 4963 /* Backward-compatible name */ 4964 Py_INCREF(&CFStringRef_Type); 4965 PyModule_AddObject(m, "CFStringRefType", (PyObject *)&CFStringRef_Type); 4966 CFMutableStringRef_Type.ob_type = &PyType_Type; 4967 CFMutableStringRef_Type.tp_base = &CFStringRef_Type; 4968 if (PyType_Ready(&CFMutableStringRef_Type) < 0) return; 4969 Py_INCREF(&CFMutableStringRef_Type); 4970 PyModule_AddObject(m, "CFMutableStringRef", (PyObject *)&CFMutableStringRef_Type); 4971 /* Backward-compatible name */ 4972 Py_INCREF(&CFMutableStringRef_Type); 4973 PyModule_AddObject(m, "CFMutableStringRefType", (PyObject *)&CFMutableStringRef_Type); 4974 CFURLRef_Type.ob_type = &PyType_Type; 4975 CFURLRef_Type.tp_base = &CFTypeRef_Type; 4976 if (PyType_Ready(&CFURLRef_Type) < 0) return; 4977 Py_INCREF(&CFURLRef_Type); 4978 PyModule_AddObject(m, "CFURLRef", (PyObject *)&CFURLRef_Type); 4979 /* Backward-compatible name */ 4980 Py_INCREF(&CFURLRef_Type); 4981 PyModule_AddObject(m, "CFURLRefType", (PyObject *)&CFURLRef_Type); 4982 4982 4983 4983 #define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name)) 4984 4985 4986 4987 4988 4989 4984 _STRINGCONST(kCFPreferencesAnyApplication); 4985 _STRINGCONST(kCFPreferencesCurrentApplication); 4986 _STRINGCONST(kCFPreferencesAnyHost); 4987 _STRINGCONST(kCFPreferencesCurrentHost); 4988 _STRINGCONST(kCFPreferencesAnyUser); 4989 _STRINGCONST(kCFPreferencesCurrentUser); 4990 4990 4991 4991 -
python/trunk/Mac/Modules/cf/pycfbridge.c
r2 r391 16 16 PyObject * 17 17 PyCF_CF2Python(CFTypeRef src) { 18 19 20 21 22 23 24 25 26 27 28 29 18 CFTypeID typeid; 19 20 if( src == NULL ) { 21 Py_INCREF(Py_None); 22 return Py_None; 23 } 24 typeid = CFGetTypeID(src); 25 if (typeid == CFArrayGetTypeID()) 26 return PyCF_CF2Python_sequence((CFArrayRef)src); 27 if (typeid == CFDictionaryGetTypeID()) 28 return PyCF_CF2Python_mapping((CFDictionaryRef)src); 29 return PyCF_CF2Python_simple(src); 30 30 } 31 31 32 32 PyObject * 33 33 PyCF_CF2Python_sequence(CFArrayRef src) { 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 err: 52 53 54 34 int size = CFArrayGetCount(src); 35 PyObject *rv; 36 CFTypeRef item_cf; 37 PyObject *item_py = NULL; 38 int i; 39 40 if ( (rv=PyList_New(size)) == NULL ) 41 return NULL; 42 for(i=0; i<size; i++) { 43 item_cf = CFArrayGetValueAtIndex(src, i); 44 if (item_cf == NULL ) goto err; 45 item_py = PyCF_CF2Python(item_cf); 46 if (item_py == NULL ) goto err; 47 if (PyList_SetItem(rv, i, item_py) < 0) goto err; 48 item_py = NULL; 49 } 50 return rv; 51 err: 52 Py_XDECREF(item_py); 53 Py_DECREF(rv); 54 return NULL; 55 55 } 56 56 57 57 PyObject * 58 58 PyCF_CF2Python_mapping(CFTypeRef src) { 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 err: 91 92 93 94 95 96 59 int size = CFDictionaryGetCount(src); 60 PyObject *rv = NULL; 61 CFTypeRef *allkeys = NULL, *allvalues = NULL; 62 CFTypeRef key_cf, value_cf; 63 PyObject *key_py = NULL, *value_py = NULL; 64 int i; 65 66 allkeys = malloc(size*sizeof(CFTypeRef *)); 67 if (allkeys == NULL) { 68 PyErr_NoMemory(); 69 goto err; 70 } 71 allvalues = malloc(size*sizeof(CFTypeRef *)); 72 if (allvalues == NULL) { 73 PyErr_NoMemory(); 74 goto err; 75 } 76 if ( (rv=PyDict_New()) == NULL ) goto err; 77 CFDictionaryGetKeysAndValues(src, allkeys, allvalues); 78 for(i=0; i<size; i++) { 79 key_cf = allkeys[i]; 80 value_cf = allvalues[i]; 81 key_py = PyCF_CF2Python(key_cf); 82 if (key_py == NULL ) goto err; 83 value_py = PyCF_CF2Python(value_cf); 84 if (value_py == NULL ) goto err; 85 if (PyDict_SetItem(rv, key_py, value_py) < 0) goto err; 86 key_py = NULL; 87 value_py = NULL; 88 } 89 return rv; 90 err: 91 Py_XDECREF(key_py); 92 Py_XDECREF(value_py); 93 Py_XDECREF(rv); 94 free(allkeys); 95 free(allvalues); 96 return NULL; 97 97 } 98 98 99 99 PyObject * 100 100 PyCF_CF2Python_simple(CFTypeRef src) { 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 101 CFTypeID typeid; 102 103 typeid = CFGetTypeID(src); 104 if (typeid == CFStringGetTypeID()) 105 return PyCF_CF2Python_string((CFStringRef)src); 106 if (typeid == CFBooleanGetTypeID()) 107 return PyBool_FromLong((long)CFBooleanGetValue(src)); 108 if (typeid == CFNumberGetTypeID()) { 109 if (CFNumberIsFloatType(src)) { 110 double d; 111 CFNumberGetValue(src, kCFNumberDoubleType, &d); 112 return PyFloat_FromDouble(d); 113 } else { 114 long l; 115 if (!CFNumberGetValue(src, kCFNumberLongType, &l)) 116 /* XXXX Out of range! */; 117 return PyInt_FromLong(l); 118 } 119 } 120 /* XXXX Should return as CFTypeRef, really... */ 121 PyMac_Error(resNotFound); 122 return NULL; 123 123 } 124 124 … … 126 126 PyObject * 127 127 PyCF_CF2Python_string(CFStringRef src) { 128 129 130 131 132 133 134 135 136 137 138 139 128 int size = CFStringGetLength(src)+1; 129 Py_UNICODE *data = malloc(size*sizeof(Py_UNICODE)); 130 CFRange range; 131 PyObject *rv; 132 133 range.location = 0; 134 range.length = size; 135 if( data == NULL ) return PyErr_NoMemory(); 136 CFStringGetCharacters(src, range, data); 137 rv = (PyObject *)PyUnicode_FromUnicode(data, size-1); 138 free(data); 139 return rv; 140 140 } 141 141 … … 147 147 PyCF_Python2CF(PyObject *src, CFTypeRef *dst) { 148 148 149 150 151 152 153 154 155 149 if (PyString_Check(src) || PyUnicode_Check(src)) 150 return PyCF_Python2CF_simple(src, dst); 151 if (PySequence_Check(src)) 152 return PyCF_Python2CF_sequence(src, (CFArrayRef *)dst); 153 if (PyMapping_Check(src)) 154 return PyCF_Python2CF_mapping(src, (CFDictionaryRef *)dst); 155 return PyCF_Python2CF_simple(src, dst); 156 156 } 157 157 158 158 int 159 159 PyCF_Python2CF_sequence(PyObject *src, CFArrayRef *dst) { 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 PyMac_Error(resNotFound); 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 err: 190 191 192 193 return 0; 160 CFMutableArrayRef rv = NULL; 161 CFTypeRef item_cf = NULL; 162 PyObject *item_py = NULL; 163 int size, i; 164 165 if( !PySequence_Check(src) ) { 166 PyErr_Format(PyExc_TypeError, 167 "Cannot convert %.500s objects to CFArray", 168 src->ob_type->tp_name); 169 return 0; 170 } 171 size = PySequence_Size(src); 172 rv = CFArrayCreateMutable((CFAllocatorRef)NULL, size, &kCFTypeArrayCallBacks); 173 if (rv == NULL) { 174 PyMac_Error(resNotFound); 175 goto err; 176 } 177 178 for( i=0; i<size; i++) { 179 item_py = PySequence_GetItem(src, i); 180 if (item_py == NULL) goto err; 181 if ( !PyCF_Python2CF(item_py, &item_cf)) goto err; 182 Py_DECREF(item_py); 183 CFArraySetValueAtIndex(rv, i, item_cf); 184 CFRelease(item_cf); 185 item_cf = NULL; 186 } 187 *dst = rv; 188 return 1; 189 err: 190 Py_XDECREF(item_py); 191 if (rv) CFRelease(rv); 192 if (item_cf) CFRelease(item_cf); 193 return 0; 194 194 } 195 195 196 196 int 197 197 PyCF_Python2CF_mapping(PyObject *src, CFDictionaryRef *dst) { 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 PyMac_Error(resNotFound); 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 err: 235 236 237 238 239 240 return 0; 198 CFMutableDictionaryRef rv = NULL; 199 PyObject *aslist = NULL; 200 CFTypeRef key_cf = NULL, value_cf = NULL; 201 PyObject *item_py = NULL, *key_py = NULL, *value_py = NULL; 202 int size, i; 203 204 if( !PyMapping_Check(src) ) { 205 PyErr_Format(PyExc_TypeError, 206 "Cannot convert %.500s objects to CFDictionary", 207 src->ob_type->tp_name); 208 return 0; 209 } 210 size = PyMapping_Size(src); 211 rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL, size, 212 &kCFTypeDictionaryKeyCallBacks, 213 &kCFTypeDictionaryValueCallBacks); 214 if (rv == NULL) { 215 PyMac_Error(resNotFound); 216 goto err; 217 } 218 if ( (aslist = PyMapping_Items(src)) == NULL ) goto err; 219 220 for( i=0; i<size; i++) { 221 item_py = PySequence_GetItem(aslist, i); 222 if (item_py == NULL) goto err; 223 if (!PyArg_ParseTuple(item_py, "OO", &key_py, &value_py)) goto err; 224 if ( !PyCF_Python2CF(key_py, &key_cf) ) goto err; 225 if ( !PyCF_Python2CF(value_py, &value_cf) ) goto err; 226 CFDictionaryAddValue(rv, key_cf, value_cf); 227 CFRelease(key_cf); 228 key_cf = NULL; 229 CFRelease(value_cf); 230 value_cf = NULL; 231 } 232 *dst = rv; 233 return 1; 234 err: 235 Py_XDECREF(item_py); 236 Py_XDECREF(aslist); 237 if (rv) CFRelease(rv); 238 if (key_cf) CFRelease(key_cf); 239 if (value_cf) CFRelease(value_cf); 240 return 0; 241 241 } 242 242 243 243 int 244 244 PyCF_Python2CF_simple(PyObject *src, CFTypeRef *dst) { 245 245 246 246 #if 0 247 248 249 250 247 if (PyObject_HasAttrString(src, "CFType")) { 248 *dst = PyObject_CallMethod(src, "CFType", ""); 249 return (*dst != NULL); 250 } 251 251 #endif 252 if (PyString_Check(src) || PyUnicode_Check(src)) 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 252 if (PyString_Check(src) || PyUnicode_Check(src)) 253 return PyCF_Python2CF_string(src, (CFStringRef *)dst); 254 if (PyBool_Check(src)) { 255 if (src == Py_True) 256 *dst = kCFBooleanTrue; 257 else 258 *dst = kCFBooleanFalse; 259 return 1; 260 } 261 if (PyInt_Check(src)) { 262 long v = PyInt_AsLong(src); 263 *dst = CFNumberCreate(NULL, kCFNumberLongType, &v); 264 return 1; 265 } 266 if (PyFloat_Check(src)) { 267 double d = PyFloat_AsDouble(src); 268 *dst = CFNumberCreate(NULL, kCFNumberDoubleType, &d); 269 return 1; 270 } 271 272 PyErr_Format(PyExc_TypeError, 273 "Cannot convert %.500s objects to CFType", 274 src->ob_type->tp_name); 275 return 0; 276 276 } 277 277 278 278 int 279 279 PyCF_Python2CF_string(PyObject *src, CFStringRef *dst) { 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 err: 299 300 301 302 303 } 280 char *chars; 281 CFIndex size; 282 UniChar *unichars; 283 284 if (PyString_Check(src)) { 285 if (!PyArg_Parse(src, "es", "ascii", &chars)) 286 return 0; /* This error is more descriptive than the general one below */ 287 *dst = CFStringCreateWithCString((CFAllocatorRef)NULL, chars, kCFStringEncodingASCII); 288 PyMem_Free(chars); 289 return 1; 290 } 291 if (PyUnicode_Check(src)) { 292 /* We use the CF types here, if Python was configured differently that will give an error */ 293 size = PyUnicode_GetSize(src); 294 if ((unichars = PyUnicode_AsUnicode(src)) == NULL ) goto err; 295 *dst = CFStringCreateWithCharacters((CFAllocatorRef)NULL, unichars, size); 296 return 1; 297 } 298 err: 299 PyErr_Format(PyExc_TypeError, 300 "Cannot convert %.500s objects to CFString", 301 src->ob_type->tp_name); 302 return 0; 303 }
Note:
See TracChangeset
for help on using the changeset viewer.