Changeset 740 for vendor/current/lib/talloc/talloc.h
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/lib/talloc/talloc.h
r414 r740 30 30 #include <stdarg.h> 31 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /** 37 * @defgroup talloc The talloc API 38 * 39 * talloc is a hierarchical, reference counted memory pool system with 40 * destructors. It is the core memory allocator used in Samba. 41 * 42 * @{ 43 */ 44 32 45 #define TALLOC_VERSION_MAJOR 2 33 46 #define TALLOC_VERSION_MINOR 0 … … 36 49 int talloc_version_minor(void); 37 50 38 /* this is only needed for compatibility with the old talloc */ 51 /** 52 * @brief Define a talloc parent type 53 * 54 * As talloc is a hierarchial memory allocator, every talloc chunk is a 55 * potential parent to other talloc chunks. So defining a separate type for a 56 * talloc chunk is not strictly necessary. TALLOC_CTX is defined nevertheless, 57 * as it provides an indicator for function arguments. You will frequently 58 * write code like 59 * 60 * @code 61 * struct foo *foo_create(TALLOC_CTX *mem_ctx) 62 * { 63 * struct foo *result; 64 * result = talloc(mem_ctx, struct foo); 65 * if (result == NULL) return NULL; 66 * ... initialize foo ... 67 * return result; 68 * } 69 * @endcode 70 * 71 * In this type of allocating functions it is handy to have a general 72 * TALLOC_CTX type to indicate which parent to put allocated structures on. 73 */ 39 74 typedef void TALLOC_CTX; 40 75 … … 65 100 #endif 66 101 102 #ifdef DOXYGEN 103 /** 104 * @brief Create a new talloc context. 105 * 106 * The talloc() macro is the core of the talloc library. It takes a memory 107 * context and a type, and returns a pointer to a new area of memory of the 108 * given type. 109 * 110 * The returned pointer is itself a talloc context, so you can use it as the 111 * context argument to more calls to talloc if you wish. 112 * 113 * The returned pointer is a "child" of the supplied context. This means that if 114 * you talloc_free() the context then the new child disappears as well. 115 * Alternatively you can free just the child. 116 * 117 * @param[in] ctx A talloc context to create a new reference on or NULL to 118 * create a new top level context. 119 * 120 * @param[in] type The type of memory to allocate. 121 * 122 * @return A type casted talloc context or NULL on error. 123 * 124 * @code 125 * unsigned int *a, *b; 126 * 127 * a = talloc(NULL, unsigned int); 128 * b = talloc(a, unsigned int); 129 * @endcode 130 * 131 * @see talloc_zero 132 * @see talloc_array 133 * @see talloc_steal 134 * @see talloc_free 135 */ 136 void *talloc(const void *ctx, #type); 137 #else 138 #define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type) 139 void *_talloc(const void *context, size_t size); 140 #endif 141 142 /** 143 * @brief Create a new top level talloc context. 144 * 145 * This function creates a zero length named talloc context as a top level 146 * context. It is equivalent to: 147 * 148 * @code 149 * talloc_named(NULL, 0, fmt, ...); 150 * @endcode 151 * @param[in] fmt Format string for the name. 152 * 153 * @param[in] ... Additional printf-style arguments. 154 * 155 * @return The allocated memory chunk, NULL on error. 156 * 157 * @see talloc_named() 158 */ 159 void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2); 160 161 #ifdef DOXYGEN 162 /** 163 * @brief Free a chunk of talloc memory. 164 * 165 * The talloc_free() function frees a piece of talloc memory, and all its 166 * children. You can call talloc_free() on any pointer returned by 167 * talloc(). 168 * 169 * The return value of talloc_free() indicates success or failure, with 0 170 * returned for success and -1 for failure. A possible failure condition 171 * is if the pointer had a destructor attached to it and the destructor 172 * returned -1. See talloc_set_destructor() for details on 173 * destructors. Likewise, if "ptr" is NULL, then the function will make 174 * no modifications and return -1. 175 * 176 * If this pointer has an additional parent when talloc_free() is called 177 * then the memory is not actually released, but instead the most 178 * recently established parent is destroyed. See talloc_reference() for 179 * details on establishing additional parents. 180 * 181 * For more control on which parent is removed, see talloc_unlink() 182 * 183 * talloc_free() operates recursively on its children. 184 * 185 * From the 2.0 version of talloc, as a special case, talloc_free() is 186 * refused on pointers that have more than one parent, as talloc would 187 * have no way of knowing which parent should be removed. To free a 188 * pointer that has more than one parent please use talloc_unlink(). 189 * 190 * To help you find problems in your code caused by this behaviour, if 191 * you do try and free a pointer with more than one parent then the 192 * talloc logging function will be called to give output like this: 193 * 194 * @code 195 * ERROR: talloc_free with references at some_dir/source/foo.c:123 196 * reference at some_dir/source/other.c:325 197 * reference at some_dir/source/third.c:121 198 * @endcode 199 * 200 * Please see the documentation for talloc_set_log_fn() and 201 * talloc_set_log_stderr() for more information on talloc logging 202 * functions. 203 * 204 * @param[in] ptr The chunk to be freed. 205 * 206 * @return Returns 0 on success and -1 on error. A possible 207 * failure condition is if the pointer had a destructor 208 * attached to it and the destructor returned -1. Likewise, 209 * if "ptr" is NULL, then the function will make no 210 * modifications and returns -1. 211 * 212 * Example: 213 * @code 214 * unsigned int *a, *b; 215 * a = talloc(NULL, unsigned int); 216 * b = talloc(a, unsigned int); 217 * 218 * talloc_free(a); // Frees a and b 219 * @endcode 220 * 221 * @see talloc_set_destructor() 222 * @see talloc_unlink() 223 */ 224 int talloc_free(void *ptr); 225 #else 226 #define talloc_free(ctx) _talloc_free(ctx, __location__) 227 int _talloc_free(void *ptr, const char *location); 228 #endif 229 230 /** 231 * @brief Free a talloc chunk's children. 232 * 233 * The function walks along the list of all children of a talloc context and 234 * talloc_free()s only the children, not the context itself. 235 * 236 * @param[in] ptr The chunk that you want to free the children of. 237 */ 238 void talloc_free_children(void *ptr); 239 240 #ifdef DOXYGEN 241 /** 242 * @brief Assign a destructor function to be called when a chunk is freed. 243 * 244 * The function talloc_set_destructor() sets the "destructor" for the pointer 245 * "ptr". A destructor is a function that is called when the memory used by a 246 * pointer is about to be released. The destructor receives the pointer as an 247 * argument, and should return 0 for success and -1 for failure. 248 * 249 * The destructor can do anything it wants to, including freeing other pieces 250 * of memory. A common use for destructors is to clean up operating system 251 * resources (such as open file descriptors) contained in the structure the 252 * destructor is placed on. 253 * 254 * You can only place one destructor on a pointer. If you need more than one 255 * destructor then you can create a zero-length child of the pointer and place 256 * an additional destructor on that. 257 * 258 * To remove a destructor call talloc_set_destructor() with NULL for the 259 * destructor. 260 * 261 * If your destructor attempts to talloc_free() the pointer that it is the 262 * destructor for then talloc_free() will return -1 and the free will be 263 * ignored. This would be a pointless operation anyway, as the destructor is 264 * only called when the memory is just about to go away. 265 * 266 * @param[in] ptr The talloc chunk to add a destructor to. 267 * 268 * @param[in] destructor The destructor function to be called. NULL to remove 269 * it. 270 * 271 * Example: 272 * @code 273 * static int destroy_fd(int *fd) { 274 * close(*fd); 275 * return 0; 276 * } 277 * 278 * int *open_file(const char *filename) { 279 * int *fd = talloc(NULL, int); 280 * *fd = open(filename, O_RDONLY); 281 * if (*fd < 0) { 282 * talloc_free(fd); 283 * return NULL; 284 * } 285 * // Whenever they free this, we close the file. 286 * talloc_set_destructor(fd, destroy_fd); 287 * return fd; 288 * } 289 * @endcode 290 * 291 * @see talloc() 292 * @see talloc_free() 293 */ 294 void talloc_set_destructor(const void *ptr, int (*destructor)(void *)); 295 296 /** 297 * @brief Change a talloc chunk's parent. 298 * 299 * The talloc_steal() function changes the parent context of a talloc 300 * pointer. It is typically used when the context that the pointer is 301 * currently a child of is going to be freed and you wish to keep the 302 * memory for a longer time. 303 * 304 * To make the changed hierarchy less error-prone, you might consider to use 305 * talloc_move(). 306 * 307 * If you try and call talloc_steal() on a pointer that has more than one 308 * parent then the result is ambiguous. Talloc will choose to remove the 309 * parent that is currently indicated by talloc_parent() and replace it with 310 * the chosen parent. You will also get a message like this via the talloc 311 * logging functions: 312 * 313 * @code 314 * WARNING: talloc_steal with references at some_dir/source/foo.c:123 315 * reference at some_dir/source/other.c:325 316 * reference at some_dir/source/third.c:121 317 * @endcode 318 * 319 * To unambiguously change the parent of a pointer please see the function 320 * talloc_reparent(). See the talloc_set_log_fn() documentation for more 321 * information on talloc logging. 322 * 323 * @param[in] new_ctx The new parent context. 324 * 325 * @param[in] ptr The talloc chunk to move. 326 * 327 * @return Returns the pointer that you pass it. It does not have 328 * any failure modes. 329 * 330 * @note It is possible to produce loops in the parent/child relationship 331 * if you are not careful with talloc_steal(). No guarantees are provided 332 * as to your sanity or the safety of your data if you do this. 333 */ 334 void *talloc_steal(const void *new_ctx, const void *ptr); 335 #else /* DOXYGEN */ 67 336 /* try to make talloc_set_destructor() and talloc_steal() type safe, 68 337 if we have a recent gcc */ … … 77 346 stupidity in gcc 4.1.x */ 78 347 #define talloc_steal(ctx, ptr) ({ _TALLOC_TYPEOF(ptr) __talloc_steal_ret = (_TALLOC_TYPEOF(ptr))_talloc_steal_loc((ctx),(ptr), __location__); __talloc_steal_ret; }) 79 #else 348 #else /* __GNUC__ >= 3 */ 80 349 #define talloc_set_destructor(ptr, function) \ 81 350 _talloc_set_destructor((ptr), (int (*)(void *))(function)) 82 351 #define _TALLOC_TYPEOF(ptr) void * 83 352 #define talloc_steal(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_steal_loc((ctx),(ptr), __location__) 84 #endif 85 86 #define talloc_reference(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_reference_loc((ctx),(ptr), __location__) 353 #endif /* __GNUC__ >= 3 */ 354 void _talloc_set_destructor(const void *ptr, int (*_destructor)(void *)); 355 void *_talloc_steal_loc(const void *new_ctx, const void *ptr, const char *location); 356 #endif /* DOXYGEN */ 357 358 /** 359 * @brief Assign a name to a talloc chunk. 360 * 361 * Each talloc pointer has a "name". The name is used principally for 362 * debugging purposes, although it is also possible to set and get the name on 363 * a pointer in as a way of "marking" pointers in your code. 364 * 365 * The main use for names on pointer is for "talloc reports". See 366 * talloc_report() and talloc_report_full() for details. Also see 367 * talloc_enable_leak_report() and talloc_enable_leak_report_full(). 368 * 369 * The talloc_set_name() function allocates memory as a child of the 370 * pointer. It is logically equivalent to: 371 * 372 * @code 373 * talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...)); 374 * @endcode 375 * 376 * @param[in] ptr The talloc chunk to assign a name to. 377 * 378 * @param[in] fmt Format string for the name. 379 * 380 * @param[in] ... Add printf-style additional arguments. 381 * 382 * @return The assigned name, NULL on error. 383 * 384 * @note Multiple calls to talloc_set_name() will allocate more memory without 385 * releasing the name. All of the memory is released when the ptr is freed 386 * using talloc_free(). 387 */ 388 const char *talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 389 390 #ifdef DOXYGEN 391 /** 392 * @brief Change a talloc chunk's parent. 393 * 394 * This function has the same effect as talloc_steal(), and additionally sets 395 * the source pointer to NULL. You would use it like this: 396 * 397 * @code 398 * struct foo *X = talloc(tmp_ctx, struct foo); 399 * struct foo *Y; 400 * Y = talloc_move(new_ctx, &X); 401 * @endcode 402 * 403 * @param[in] new_ctx The new parent context. 404 * 405 * @param[in] ptr Pointer to the talloc chunk to move. 406 * 407 * @return The pointer of the talloc chunk it has been moved to, 408 * NULL on error. 409 */ 410 void *talloc_move(const void *new_ctx, const void *ptr); 411 #else 87 412 #define talloc_move(ctx, ptr) (_TALLOC_TYPEOF(*(ptr)))_talloc_move((ctx),(void *)(ptr)) 88 89 /* useful macros for creating type checked pointers */ 90 #define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type) 413 void *_talloc_move(const void *new_ctx, const void *pptr); 414 #endif 415 416 /** 417 * @brief Assign a name to a talloc chunk. 418 * 419 * The function is just like talloc_set_name(), but it takes a string constant, 420 * and is much faster. It is extensively used by the "auto naming" macros, such 421 * as talloc_p(). 422 * 423 * This function does not allocate any memory. It just copies the supplied 424 * pointer into the internal representation of the talloc ptr. This means you 425 * must not pass a name pointer to memory that will disappear before the ptr 426 * is freed with talloc_free(). 427 * 428 * @param[in] ptr The talloc chunk to assign a name to. 429 * 430 * @param[in] name Format string for the name. 431 */ 432 void talloc_set_name_const(const void *ptr, const char *name); 433 434 /** 435 * @brief Create a named talloc chunk. 436 * 437 * The talloc_named() function creates a named talloc pointer. It is 438 * equivalent to: 439 * 440 * @code 441 * ptr = talloc_size(context, size); 442 * talloc_set_name(ptr, fmt, ....); 443 * @endcode 444 * 445 * @param[in] context The talloc context to hang the result off. 446 * 447 * @param[in] size Number of char's that you want to allocate. 448 * 449 * @param[in] fmt Format string for the name. 450 * 451 * @param[in] ... Additional printf-style arguments. 452 * 453 * @return The allocated memory chunk, NULL on error. 454 * 455 * @see talloc_set_name() 456 */ 457 void *talloc_named(const void *context, size_t size, 458 const char *fmt, ...) PRINTF_ATTRIBUTE(3,4); 459 460 /** 461 * @brief Basic routine to allocate a chunk of memory. 462 * 463 * This is equivalent to: 464 * 465 * @code 466 * ptr = talloc_size(context, size); 467 * talloc_set_name_const(ptr, name); 468 * @endcode 469 * 470 * @param[in] context The parent context. 471 * 472 * @param[in] size The number of char's that we want to allocate. 473 * 474 * @param[in] name The name the talloc block has. 475 * 476 * @return The allocated memory chunk, NULL on error. 477 */ 478 void *talloc_named_const(const void *context, size_t size, const char *name); 479 480 #ifdef DOXYGEN 481 /** 482 * @brief Untyped allocation. 483 * 484 * The function should be used when you don't have a convenient type to pass to 485 * talloc(). Unlike talloc(), it is not type safe (as it returns a void *), so 486 * you are on your own for type checking. 487 * 488 * Best to use talloc() or talloc_array() instead. 489 * 490 * @param[in] ctx The talloc context to hang the result off. 491 * 492 * @param[in] size Number of char's that you want to allocate. 493 * 494 * @return The allocated memory chunk, NULL on error. 495 * 496 * Example: 497 * @code 498 * void *mem = talloc_size(NULL, 100); 499 * @endcode 500 */ 501 void *talloc_size(const void *ctx, size_t size); 502 #else 91 503 #define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__) 504 #endif 505 506 #ifdef DOXYGEN 507 /** 508 * @brief Allocate into a typed pointer. 509 * 510 * The talloc_ptrtype() macro should be used when you have a pointer and want 511 * to allocate memory to point at with this pointer. When compiling with 512 * gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size() and 513 * talloc_get_name() will return the current location in the source file and 514 * not the type. 515 * 516 * @param[in] ctx The talloc context to hang the result off. 517 * 518 * @param[in] type The pointer you want to assign the result to. 519 * 520 * @return The properly casted allocated memory chunk, NULL on 521 * error. 522 * 523 * Example: 524 * @code 525 * unsigned int *a = talloc_ptrtype(NULL, a); 526 * @endcode 527 */ 528 void *talloc_ptrtype(const void *ctx, #type); 529 #else 92 530 #define talloc_ptrtype(ctx, ptr) (_TALLOC_TYPEOF(ptr))talloc_size(ctx, sizeof(*(ptr))) 93 531 #endif 532 533 #ifdef DOXYGEN 534 /** 535 * @brief Allocate a new 0-sized talloc chunk. 536 * 537 * This is a utility macro that creates a new memory context hanging off an 538 * existing context, automatically naming it "talloc_new: __location__" where 539 * __location__ is the source line it is called from. It is particularly 540 * useful for creating a new temporary working context. 541 * 542 * @param[in] ctx The talloc parent context. 543 * 544 * @return A new talloc chunk, NULL on error. 545 */ 546 void *talloc_new(const void *ctx); 547 #else 94 548 #define talloc_new(ctx) talloc_named_const(ctx, 0, "talloc_new: " __location__) 95 549 #endif 550 551 #ifdef DOXYGEN 552 /** 553 * @brief Allocate a 0-initizialized structure. 554 * 555 * The macro is equivalent to: 556 * 557 * @code 558 * ptr = talloc(ctx, type); 559 * if (ptr) memset(ptr, 0, sizeof(type)); 560 * @endcode 561 * 562 * @param[in] ctx The talloc context to hang the result off. 563 * 564 * @param[in] type The type that we want to allocate. 565 * 566 * @return Pointer to a piece of memory, properly cast to 'type *', 567 * NULL on error. 568 * 569 * Example: 570 * @code 571 * unsigned int *a, *b; 572 * a = talloc_zero(NULL, unsigned int); 573 * b = talloc_zero(a, unsigned int); 574 * @endcode 575 * 576 * @see talloc() 577 * @see talloc_zero_size() 578 * @see talloc_zero_array() 579 */ 580 void *talloc_zero(const void *ctx, #type); 581 582 /** 583 * @brief Allocate untyped, 0-initialized memory. 584 * 585 * @param[in] ctx The talloc context to hang the result off. 586 * 587 * @param[in] size Number of char's that you want to allocate. 588 * 589 * @return The allocated memory chunk. 590 */ 591 void *talloc_zero_size(const void *ctx, size_t size); 592 #else 96 593 #define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type) 97 594 #define talloc_zero_size(ctx, size) _talloc_zero(ctx, size, __location__) 98 99 #define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type) 100 #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type) 101 #define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__) 102 #define talloc_array_ptrtype(ctx, ptr, count) (_TALLOC_TYPEOF(ptr))talloc_array_size(ctx, sizeof(*(ptr)), count) 103 #define talloc_array_length(ctx) (talloc_get_size(ctx)/sizeof(*ctx)) 104 105 #define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, #type) 106 #define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__) 107 595 void *_talloc_zero(const void *ctx, size_t size, const char *name); 596 #endif 597 598 /** 599 * @brief Return the name of a talloc chunk. 600 * 601 * @param[in] ptr The talloc chunk. 602 * 603 * @return The current name for the given talloc pointer. 604 * 605 * @see talloc_set_name() 606 */ 607 const char *talloc_get_name(const void *ptr); 608 609 /** 610 * @brief Verify that a talloc chunk carries a specified name. 611 * 612 * This function checks if a pointer has the specified name. If it does 613 * then the pointer is returned. 614 * 615 * @param[in] ptr The talloc chunk to check. 616 * 617 * @param[in] name The name to check against. 618 * 619 * @return The pointer if the name matches, NULL if it doesn't. 620 */ 621 void *talloc_check_name(const void *ptr, const char *name); 622 623 /** 624 * @brief Get the parent chunk of a pointer. 625 * 626 * @param[in] ptr The talloc pointer to inspect. 627 * 628 * @return The talloc parent of ptr, NULL on error. 629 */ 630 void *talloc_parent(const void *ptr); 631 632 /** 633 * @brief Get a talloc chunk's parent name. 634 * 635 * @param[in] ptr The talloc pointer to inspect. 636 * 637 * @return The name of ptr's parent chunk. 638 */ 639 const char *talloc_parent_name(const void *ptr); 640 641 /** 642 * @brief Get the total size of a talloc chunk including its children. 643 * 644 * The function returns the total size in bytes used by this pointer and all 645 * child pointers. Mostly useful for debugging. 646 * 647 * Passing NULL is allowed, but it will only give a meaningful result if 648 * talloc_enable_leak_report() or talloc_enable_leak_report_full() has 649 * been called. 650 * 651 * @param[in] ptr The talloc chunk. 652 * 653 * @return The total size. 654 */ 655 size_t talloc_total_size(const void *ptr); 656 657 /** 658 * @brief Get the number of talloc chunks hanging off a chunk. 659 * 660 * The talloc_total_blocks() function returns the total memory block 661 * count used by this pointer and all child pointers. Mostly useful for 662 * debugging. 663 * 664 * Passing NULL is allowed, but it will only give a meaningful result if 665 * talloc_enable_leak_report() or talloc_enable_leak_report_full() has 666 * been called. 667 * 668 * @param[in] ptr The talloc chunk. 669 * 670 * @return The total size. 671 */ 672 size_t talloc_total_blocks(const void *ptr); 673 674 #ifdef DOXYGEN 675 /** 676 * @brief Duplicate a memory area into a talloc chunk. 677 * 678 * The function is equivalent to: 679 * 680 * @code 681 * ptr = talloc_size(ctx, size); 682 * if (ptr) memcpy(ptr, p, size); 683 * @endcode 684 * 685 * @param[in] t The talloc context to hang the result off. 686 * 687 * @param[in] p The memory chunk you want to duplicate. 688 * 689 * @param[in] size Number of char's that you want copy. 690 * 691 * @return The allocated memory chunk. 692 * 693 * @see talloc_size() 694 */ 695 void *talloc_memdup(const void *t, const void *p, size_t size); 696 #else 108 697 #define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__) 109 698 void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name); 699 #endif 700 701 #ifdef DOXYGEN 702 /** 703 * @brief Assign a type to a talloc chunk. 704 * 705 * This macro allows you to force the name of a pointer to be a particular type. 706 * This can be used in conjunction with talloc_get_type() to do type checking on 707 * void* pointers. 708 * 709 * It is equivalent to this: 710 * 711 * @code 712 * talloc_set_name_const(ptr, #type) 713 * @endcode 714 * 715 * @param[in] ptr The talloc chunk to assign the type to. 716 * 717 * @param[in] type The type to assign. 718 */ 719 void talloc_set_type(const char *ptr, #type); 720 721 /** 722 * @brief Get a typed pointer out of a talloc pointer. 723 * 724 * This macro allows you to do type checking on talloc pointers. It is 725 * particularly useful for void* private pointers. It is equivalent to 726 * this: 727 * 728 * @code 729 * (type *)talloc_check_name(ptr, #type) 730 * @endcode 731 * 732 * @param[in] ptr The talloc pointer to check. 733 * 734 * @param[in] type The type to check against. 735 * 736 * @return The properly casted pointer given by ptr, NULL on error. 737 */ 738 type *talloc_get_type(const void *ptr, #type); 739 #else 110 740 #define talloc_set_type(ptr, type) talloc_set_name_const(ptr, #type) 111 741 #define talloc_get_type(ptr, type) (type *)talloc_check_name(ptr, #type) 742 #endif 743 744 #ifdef DOXYGEN 745 /** 746 * @brief Safely turn a void pointer into a typed pointer. 747 * 748 * This macro is used together with talloc(mem_ctx, struct foo). If you had to 749 * assing the talloc chunk pointer to some void pointer variable, 750 * talloc_get_type_abort() is the recommended way to get the convert the void 751 * pointer back to a typed pointer. 752 * 753 * @param[in] ptr The void pointer to convert. 754 * 755 * @param[in] type The type that this chunk contains 756 * 757 * @return The same value as ptr, type-checked and properly cast. 758 */ 759 void *talloc_get_type_abort(const void *ptr, #type); 760 #else 112 761 #define talloc_get_type_abort(ptr, type) (type *)_talloc_get_type_abort(ptr, #type, __location__) 113 762 void *_talloc_get_type_abort(const void *ptr, const char *name, const char *location); 763 #endif 764 765 /** 766 * @brief Find a parent context by name. 767 * 768 * Find a parent memory context of the current context that has the given 769 * name. This can be very useful in complex programs where it may be 770 * difficult to pass all information down to the level you need, but you 771 * know the structure you want is a parent of another context. 772 * 773 * @param[in] ctx The talloc chunk to start from. 774 * 775 * @param[in] name The name of the parent we look for. 776 * 777 * @return The memory context we are looking for, NULL if not 778 * found. 779 */ 780 void *talloc_find_parent_byname(const void *ctx, const char *name); 781 782 #ifdef DOXYGEN 783 /** 784 * @brief Find a parent context by type. 785 * 786 * Find a parent memory context of the current context that has the given 787 * name. This can be very useful in complex programs where it may be 788 * difficult to pass all information down to the level you need, but you 789 * know the structure you want is a parent of another context. 790 * 791 * Like talloc_find_parent_byname() but takes a type, making it typesafe. 792 * 793 * @param[in] ptr The talloc chunk to start from. 794 * 795 * @param[in] type The type of the parent to look for. 796 * 797 * @return The memory context we are looking for, NULL if not 798 * found. 799 */ 800 void *talloc_find_parent_bytype(const void *ptr, #type); 801 #else 114 802 #define talloc_find_parent_bytype(ptr, type) (type *)talloc_find_parent_byname(ptr, #type) 115 #define talloc_free(ctx) _talloc_free(ctx, __location__) 116 803 #endif 804 805 /** 806 * @brief Allocate a talloc pool. 807 * 808 * A talloc pool is a pure optimization for specific situations. In the 809 * release process for Samba 3.2 we found out that we had become considerably 810 * slower than Samba 3.0 was. Profiling showed that malloc(3) was a large CPU 811 * consumer in benchmarks. For Samba 3.2 we have internally converted many 812 * static buffers to dynamically allocated ones, so malloc(3) being beaten 813 * more was no surprise. But it made us slower. 814 * 815 * talloc_pool() is an optimization to call malloc(3) a lot less for the use 816 * pattern Samba has: The SMB protocol is mainly a request/response protocol 817 * where we have to allocate a certain amount of memory per request and free 818 * that after the SMB reply is sent to the client. 819 * 820 * talloc_pool() creates a talloc chunk that you can use as a talloc parent 821 * exactly as you would use any other ::TALLOC_CTX. The difference is that 822 * when you talloc a child of this pool, no malloc(3) is done. Instead, talloc 823 * just increments a pointer inside the talloc_pool. This also works 824 * recursively. If you use the child of the talloc pool as a parent for 825 * grand-children, their memory is also taken from the talloc pool. 826 * 827 * If you talloc_free() children of a talloc pool, the memory is not given 828 * back to the system. Instead, free(3) is only called if the talloc_pool() 829 * itself is released with talloc_free(). 830 * 831 * The downside of a talloc pool is that if you talloc_move() a child of a 832 * talloc pool to a talloc parent outside the pool, the whole pool memory is 833 * not free(3)'ed until that moved chunk is also talloc_free()ed. 834 * 835 * @param[in] context The talloc context to hang the result off. 836 * 837 * @param[in] size Size of the talloc pool. 838 * 839 * @return The allocated talloc pool, NULL on error. 840 */ 841 void *talloc_pool(const void *context, size_t size); 842 843 /** 844 * @brief Free a talloc chunk and NULL out the pointer. 845 * 846 * TALLOC_FREE() frees a pointer and sets it to NULL. Use this if you want 847 * immediate feedback (i.e. crash) if you use a pointer after having free'ed 848 * it. 849 * 850 * @param[in] ctx The chunk to be freed. 851 */ 852 #define TALLOC_FREE(ctx) do { talloc_free(ctx); ctx=NULL; } while(0) 853 854 /* @} ******************************************************************/ 855 856 /** 857 * \defgroup talloc_ref The talloc reference function. 858 * @ingroup talloc 859 * 860 * This module contains the definitions around talloc references 861 * 862 * @{ 863 */ 864 865 /** 866 * @brief Increase the reference count of a talloc chunk. 867 * 868 * The talloc_increase_ref_count(ptr) function is exactly equivalent to: 869 * 870 * @code 871 * talloc_reference(NULL, ptr); 872 * @endcode 873 * 874 * You can use either syntax, depending on which you think is clearer in 875 * your code. 876 * 877 * @param[in] ptr The pointer to increase the reference count. 878 * 879 * @return 0 on success, -1 on error. 880 */ 881 int talloc_increase_ref_count(const void *ptr); 882 883 /** 884 * @brief Get the number of references to a talloc chunk. 885 * 886 * @param[in] ptr The pointer to retrieve the reference count from. 887 * 888 * @return The number of references. 889 */ 890 size_t talloc_reference_count(const void *ptr); 891 892 #ifdef DOXYGEN 893 /** 894 * @brief Create an additional talloc parent to a pointer. 895 * 896 * The talloc_reference() function makes "context" an additional parent of 897 * ptr. Each additional reference consumes around 48 bytes of memory on intel 898 * x86 platforms. 899 * 900 * If ptr is NULL, then the function is a no-op, and simply returns NULL. 901 * 902 * After creating a reference you can free it in one of the following ways: 903 * 904 * - you can talloc_free() any parent of the original pointer. That 905 * will reduce the number of parents of this pointer by 1, and will 906 * cause this pointer to be freed if it runs out of parents. 907 * 908 * - you can talloc_free() the pointer itself. That will destroy the 909 * most recently established parent to the pointer and leave the 910 * pointer as a child of its current parent. 911 * 912 * For more control on which parent to remove, see talloc_unlink() 913 * @param[in] ctx The additional parent. 914 * 915 * @param[in] ptr The pointer you want to create an additional parent for. 916 * 917 * @return The original pointer 'ptr', NULL if talloc ran out of 918 * memory in creating the reference. 919 * 920 * Example: 921 * @code 922 * unsigned int *a, *b, *c; 923 * a = talloc(NULL, unsigned int); 924 * b = talloc(NULL, unsigned int); 925 * c = talloc(a, unsigned int); 926 * // b also serves as a parent of c. 927 * talloc_reference(b, c); 928 * @endcode 929 * 930 * @see talloc_unlink() 931 */ 932 void *talloc_reference(const void *ctx, const void *ptr); 933 #else 934 #define talloc_reference(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_reference_loc((ctx),(ptr), __location__) 935 void *_talloc_reference_loc(const void *context, const void *ptr, const char *location); 936 #endif 937 938 /** 939 * @brief Remove a specific parent from a talloc chunk. 940 * 941 * The function removes a specific parent from ptr. The context passed must 942 * either be a context used in talloc_reference() with this pointer, or must be 943 * a direct parent of ptr. 944 * 945 * Usually you can just use talloc_free() instead of talloc_unlink(), but 946 * sometimes it is useful to have the additional control on which parent is 947 * removed. 948 * 949 * @param[in] context The talloc parent to remove. 950 * 951 * @param[in] ptr The talloc ptr you want to remove the parent from. 952 * 953 * @return 0 on success, -1 on error. 954 * 955 * @note If the parent has already been removed using talloc_free() then 956 * this function will fail and will return -1. Likewise, if ptr is NULL, 957 * then the function will make no modifications and return -1. 958 * 959 * Example: 960 * @code 961 * unsigned int *a, *b, *c; 962 * a = talloc(NULL, unsigned int); 963 * b = talloc(NULL, unsigned int); 964 * c = talloc(a, unsigned int); 965 * // b also serves as a parent of c. 966 * talloc_reference(b, c); 967 * talloc_unlink(b, c); 968 * @endcode 969 */ 970 int talloc_unlink(const void *context, void *ptr); 971 972 /** 973 * @brief Provide a talloc context that is freed at program exit. 974 * 975 * This is a handy utility function that returns a talloc context 976 * which will be automatically freed on program exit. This can be used 977 * to reduce the noise in memory leak reports. 978 * 979 * Never use this in code that might be used in objects loaded with 980 * dlopen and unloaded with dlclose. talloc_autofree_context() 981 * internally uses atexit(3). Some platforms like modern Linux handles 982 * this fine, but for example FreeBSD does not deal well with dlopen() 983 * and atexit() used simultaneously: dlclose() does not clean up the 984 * list of atexit-handlers, so when the program exits the code that 985 * was registered from within talloc_autofree_context() is gone, the 986 * program crashes at exit. 987 * 988 * @return A talloc context, NULL on error. 989 */ 990 void *talloc_autofree_context(void); 991 992 /** 993 * @brief Get the size of a talloc chunk. 994 * 995 * This function lets you know the amount of memory alloced so far by 996 * this context. It does NOT account for subcontext memory. 997 * This can be used to calculate the size of an array. 998 * 999 * @param[in] ctx The talloc chunk. 1000 * 1001 * @return The size of the talloc chunk. 1002 */ 1003 size_t talloc_get_size(const void *ctx); 1004 1005 /** 1006 * @brief Show the parentage of a context. 1007 * 1008 * @param[in] context The talloc context to look at. 1009 * 1010 * @param[in] file The output to use, a file, stdout or stderr. 1011 */ 1012 void talloc_show_parents(const void *context, FILE *file); 1013 1014 /** 1015 * @brief Check if a context is parent of a talloc chunk. 1016 * 1017 * This checks if context is referenced in the talloc hierarchy above ptr. 1018 * 1019 * @param[in] context The assumed talloc context. 1020 * 1021 * @param[in] ptr The talloc chunk to check. 1022 * 1023 * @return Return 1 if this is the case, 0 if not. 1024 */ 1025 int talloc_is_parent(const void *context, const void *ptr); 1026 1027 /** 1028 * @brief Change the parent context of a talloc pointer. 1029 * 1030 * The function changes the parent context of a talloc pointer. It is typically 1031 * used when the context that the pointer is currently a child of is going to be 1032 * freed and you wish to keep the memory for a longer time. 1033 * 1034 * The difference between talloc_reparent() and talloc_steal() is that 1035 * talloc_reparent() can specify which parent you wish to change. This is 1036 * useful when a pointer has multiple parents via references. 1037 * 1038 * @param[in] old_parent 1039 * @param[in] new_parent 1040 * @param[in] ptr 1041 * 1042 * @return Return the pointer you passed. It does not have any 1043 * failure modes. 1044 */ 1045 void *talloc_reparent(const void *old_parent, const void *new_parent, const void *ptr); 1046 1047 /* @} ******************************************************************/ 1048 1049 /** 1050 * @defgroup talloc_array The talloc array functions 1051 * @ingroup talloc 1052 * 1053 * Talloc contains some handy helpers for handling Arrays conveniently 1054 * 1055 * @{ 1056 */ 1057 1058 #ifdef DOXYGEN 1059 /** 1060 * @brief Allocate an array. 1061 * 1062 * The macro is equivalent to: 1063 * 1064 * @code 1065 * (type *)talloc_size(ctx, sizeof(type) * count); 1066 * @endcode 1067 * 1068 * except that it provides integer overflow protection for the multiply, 1069 * returning NULL if the multiply overflows. 1070 * 1071 * @param[in] ctx The talloc context to hang the result off. 1072 * 1073 * @param[in] type The type that we want to allocate. 1074 * 1075 * @param[in] count The number of 'type' elements you want to allocate. 1076 * 1077 * @return The allocated result, properly cast to 'type *', NULL on 1078 * error. 1079 * 1080 * Example: 1081 * @code 1082 * unsigned int *a, *b; 1083 * a = talloc_zero(NULL, unsigned int); 1084 * b = talloc_array(a, unsigned int, 100); 1085 * @endcode 1086 * 1087 * @see talloc() 1088 * @see talloc_zero_array() 1089 */ 1090 void *talloc_array(const void *ctx, #type, unsigned count); 1091 #else 1092 #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type) 1093 void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name); 1094 #endif 1095 1096 #ifdef DOXYGEN 1097 /** 1098 * @brief Allocate an array. 1099 * 1100 * @param[in] ctx The talloc context to hang the result off. 1101 * 1102 * @param[in] size The size of an array element. 1103 * 1104 * @param[in] count The number of elements you want to allocate. 1105 * 1106 * @return The allocated result, NULL on error. 1107 */ 1108 void *talloc_array_size(const void *ctx, size_t size, unsigned count); 1109 #else 1110 #define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__) 1111 #endif 1112 1113 #ifdef DOXYGEN 1114 /** 1115 * @brief Allocate an array into a typed pointer. 1116 * 1117 * The macro should be used when you have a pointer to an array and want to 1118 * allocate memory of an array to point at with this pointer. When compiling 1119 * with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_array_size() 1120 * and talloc_get_name() will return the current location in the source file 1121 * and not the type. 1122 * 1123 * @param[in] ctx The talloc context to hang the result off. 1124 * 1125 * @param[in] ptr The pointer you want to assign the result to. 1126 * 1127 * @param[in] count The number of elements you want to allocate. 1128 * 1129 * @return The allocated memory chunk, properly casted. NULL on 1130 * error. 1131 */ 1132 void *talloc_array_ptrtype(const void *ctx, const void *ptr, unsigned count); 1133 #else 1134 #define talloc_array_ptrtype(ctx, ptr, count) (_TALLOC_TYPEOF(ptr))talloc_array_size(ctx, sizeof(*(ptr)), count) 1135 #endif 1136 1137 #ifdef DOXYGEN 1138 /** 1139 * @brief Get the number of elements in a talloc'ed array. 1140 * 1141 * A talloc chunk carries its own size, so for talloc'ed arrays it is not 1142 * necessary to store the number of elements explicitly. 1143 * 1144 * @param[in] ctx The allocated array. 1145 * 1146 * @return The number of elements in ctx. 1147 */ 1148 size_t talloc_array_length(const void *ctx); 1149 #else 1150 #define talloc_array_length(ctx) (talloc_get_size(ctx)/sizeof(*ctx)) 1151 #endif 1152 1153 #ifdef DOXYGEN 1154 /** 1155 * @brief Allocate a zero-initialized array 1156 * 1157 * @param[in] ctx The talloc context to hang the result off. 1158 * 1159 * @param[in] type The type that we want to allocate. 1160 * 1161 * @param[in] count The number of "type" elements you want to allocate. 1162 * 1163 * @return The allocated result casted to "type *", NULL on error. 1164 * 1165 * The talloc_zero_array() macro is equivalent to: 1166 * 1167 * @code 1168 * ptr = talloc_array(ctx, type, count); 1169 * if (ptr) memset(ptr, sizeof(type) * count); 1170 * @endcode 1171 */ 1172 void *talloc_zero_array(const void *ctx, #type, unsigned count); 1173 #else 1174 #define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type) 1175 void *_talloc_zero_array(const void *ctx, 1176 size_t el_size, 1177 unsigned count, 1178 const char *name); 1179 #endif 1180 1181 #ifdef DOXYGEN 1182 /** 1183 * @brief Change the size of a talloc array. 1184 * 1185 * The macro changes the size of a talloc pointer. The 'count' argument is the 1186 * number of elements of type 'type' that you want the resulting pointer to 1187 * hold. 1188 * 1189 * talloc_realloc() has the following equivalences: 1190 * 1191 * @code 1192 * talloc_realloc(ctx, NULL, type, 1) ==> talloc(ctx, type); 1193 * talloc_realloc(ctx, NULL, type, N) ==> talloc_array(ctx, type, N); 1194 * talloc_realloc(ctx, ptr, type, 0) ==> talloc_free(ptr); 1195 * @endcode 1196 * 1197 * The "context" argument is only used if "ptr" is NULL, otherwise it is 1198 * ignored. 1199 * 1200 * @param[in] ctx The parent context used if ptr is NULL. 1201 * 1202 * @param[in] ptr The chunk to be resized. 1203 * 1204 * @param[in] type The type of the array element inside ptr. 1205 * 1206 * @param[in] count The intended number of array elements. 1207 * 1208 * @return The new array, NULL on error. The call will fail either 1209 * due to a lack of memory, or because the pointer has more 1210 * than one parent (see talloc_reference()). 1211 */ 1212 void *talloc_realloc(const void *ctx, void *ptr, #type, size_t count); 1213 #else 1214 #define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, #type) 1215 void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name); 1216 #endif 1217 1218 #ifdef DOXYGEN 1219 /** 1220 * @brief Untyped realloc to change the size of a talloc array. 1221 * 1222 * The macro is useful when the type is not known so the typesafe 1223 * talloc_realloc() cannot be used. 1224 * 1225 * @param[in] ctx The parent context used if 'ptr' is NULL. 1226 * 1227 * @param[in] ptr The chunk to be resized. 1228 * 1229 * @param[in] size The new chunk size. 1230 * 1231 * @return The new array, NULL on error. 1232 */ 1233 void *talloc_realloc_size(const void *ctx, void *ptr, size_t size); 1234 #else 1235 #define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__) 1236 void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name); 1237 #endif 1238 1239 /** 1240 * @brief Provide a function version of talloc_realloc_size. 1241 * 1242 * This is a non-macro version of talloc_realloc(), which is useful as 1243 * libraries sometimes want a ralloc function pointer. A realloc() 1244 * implementation encapsulates the functionality of malloc(), free() and 1245 * realloc() in one call, which is why it is useful to be able to pass around 1246 * a single function pointer. 1247 * 1248 * @param[in] context The parent context used if ptr is NULL. 1249 * 1250 * @param[in] ptr The chunk to be resized. 1251 * 1252 * @param[in] size The new chunk size. 1253 * 1254 * @return The new chunk, NULL on error. 1255 */ 1256 void *talloc_realloc_fn(const void *context, void *ptr, size_t size); 1257 1258 /* @} ******************************************************************/ 1259 1260 /** 1261 * @defgroup talloc_string The talloc string functions. 1262 * @ingroup talloc 1263 * 1264 * talloc string allocation and manipulation functions. 1265 * @{ 1266 */ 1267 1268 /** 1269 * @brief Duplicate a string into a talloc chunk. 1270 * 1271 * This function is equivalent to: 1272 * 1273 * @code 1274 * ptr = talloc_size(ctx, strlen(p)+1); 1275 * if (ptr) memcpy(ptr, p, strlen(p)+1); 1276 * @endcode 1277 * 1278 * This functions sets the name of the new pointer to the passed 1279 * string. This is equivalent to: 1280 * 1281 * @code 1282 * talloc_set_name_const(ptr, ptr) 1283 * @endcode 1284 * 1285 * @param[in] t The talloc context to hang the result off. 1286 * 1287 * @param[in] p The string you want to duplicate. 1288 * 1289 * @return The duplicated string, NULL on error. 1290 */ 1291 char *talloc_strdup(const void *t, const char *p); 1292 1293 /** 1294 * @brief Append a string to given string and duplicate the result. 1295 * 1296 * @param[in] s The destination to append to. 1297 * 1298 * @param[in] a The string you want to append. 1299 * 1300 * @return The duplicated string, NULL on error. 1301 * 1302 * @see talloc_strdup() 1303 */ 1304 char *talloc_strdup_append(char *s, const char *a); 1305 1306 /** 1307 * @brief Append a string to a given buffer and duplicate the result. 1308 * 1309 * @param[in] s The destination buffer to append to. 1310 * 1311 * @param[in] a The string you want to append. 1312 * 1313 * @return The duplicated string, NULL on error. 1314 * 1315 * @see talloc_strdup() 1316 */ 1317 char *talloc_strdup_append_buffer(char *s, const char *a); 1318 1319 /** 1320 * @brief Duplicate a length-limited string into a talloc chunk. 1321 * 1322 * This function is the talloc equivalent of the C library function strndup(3). 1323 * 1324 * This functions sets the name of the new pointer to the passed string. This is 1325 * equivalent to: 1326 * 1327 * @code 1328 * talloc_set_name_const(ptr, ptr) 1329 * @endcode 1330 * 1331 * @param[in] t The talloc context to hang the result off. 1332 * 1333 * @param[in] p The string you want to duplicate. 1334 * 1335 * @param[in] n The maximum string length to duplicate. 1336 * 1337 * @return The duplicated string, NULL on error. 1338 */ 1339 char *talloc_strndup(const void *t, const char *p, size_t n); 1340 1341 /** 1342 * @brief Append at most n characters of a string to given string and duplicate 1343 * the result. 1344 * 1345 * @param[in] s The destination string to append to. 1346 * 1347 * @param[in] a The source string you want to append. 1348 * 1349 * @param[in] n The number of characters you want to append from the 1350 * string. 1351 * 1352 * @return The duplicated string, NULL on error. 1353 * 1354 * @see talloc_strndup() 1355 */ 1356 char *talloc_strndup_append(char *s, const char *a, size_t n); 1357 1358 /** 1359 * @brief Append at most n characters of a string to given buffer and duplicate 1360 * the result. 1361 * 1362 * @param[in] s The destination buffer to append to. 1363 * 1364 * @param[in] a The source string you want to append. 1365 * 1366 * @param[in] n The number of characters you want to append from the 1367 * string. 1368 * 1369 * @return The duplicated string, NULL on error. 1370 * 1371 * @see talloc_strndup() 1372 */ 1373 char *talloc_strndup_append_buffer(char *s, const char *a, size_t n); 1374 1375 /** 1376 * @brief Format a string given a va_list. 1377 * 1378 * This function is the talloc equivalent of the C library function 1379 * vasprintf(3). 1380 * 1381 * This functions sets the name of the new pointer to the new string. This is 1382 * equivalent to: 1383 * 1384 * @code 1385 * talloc_set_name_const(ptr, ptr) 1386 * @endcode 1387 * 1388 * @param[in] t The talloc context to hang the result off. 1389 * 1390 * @param[in] fmt The format string. 1391 * 1392 * @param[in] ap The parameters used to fill fmt. 1393 * 1394 * @return The formatted string, NULL on error. 1395 */ 1396 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 1397 1398 /** 1399 * @brief Format a string given a va_list and append it to the given destination 1400 * string. 1401 * 1402 * @param[in] s The destination string to append to. 1403 * 1404 * @param[in] fmt The format string. 1405 * 1406 * @param[in] ap The parameters used to fill fmt. 1407 * 1408 * @return The formatted string, NULL on error. 1409 * 1410 * @see talloc_vasprintf() 1411 */ 1412 char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 1413 1414 /** 1415 * @brief Format a string given a va_list and append it to the given destination 1416 * buffer. 1417 * 1418 * @param[in] s The destination buffer to append to. 1419 * 1420 * @param[in] fmt The format string. 1421 * 1422 * @param[in] ap The parameters used to fill fmt. 1423 * 1424 * @return The formatted string, NULL on error. 1425 * 1426 * @see talloc_vasprintf() 1427 */ 1428 char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 1429 1430 /** 1431 * @brief Format a string. 1432 * 1433 * This function is the talloc equivalent of the C library function asprintf(3). 1434 * 1435 * This functions sets the name of the new pointer to the new string. This is 1436 * equivalent to: 1437 * 1438 * @code 1439 * talloc_set_name_const(ptr, ptr) 1440 * @endcode 1441 * 1442 * @param[in] t The talloc context to hang the result off. 1443 * 1444 * @param[in] fmt The format string. 1445 * 1446 * @param[in] ... The parameters used to fill fmt. 1447 * 1448 * @return The formatted string, NULL on error. 1449 */ 1450 char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 1451 1452 /** 1453 * @brief Append a formatted string to another string. 1454 * 1455 * This function appends the given formatted string to the given string. Use 1456 * this varient when the string in the current talloc buffer may have been 1457 * truncated in length. 1458 * 1459 * This functions sets the name of the new pointer to the new 1460 * string. This is equivalent to: 1461 * 1462 * @code 1463 * talloc_set_name_const(ptr, ptr) 1464 * @endcode 1465 * 1466 * @param[in] s The string to append to. 1467 * 1468 * @param[in] fmt The format string. 1469 * 1470 * @param[in] ... The parameters used to fill fmt. 1471 * 1472 * @return The formatted string, NULL on error. 1473 */ 1474 char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 1475 1476 /** 1477 * @brief Append a formatted string to another string. 1478 * 1479 * @param[in] s The string to append to 1480 * 1481 * @param[in] fmt The format string. 1482 * 1483 * @param[in] ... The parameters used to fill fmt. 1484 * 1485 * @return The formatted string, NULL on error. 1486 */ 1487 char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 1488 1489 /* @} ******************************************************************/ 1490 1491 /** 1492 * @defgroup talloc_debug The talloc debugging support functions 1493 * @ingroup talloc 1494 * 1495 * To aid memory debugging, talloc contains routines to inspect the currently 1496 * allocated memory hierarchy. 1497 * 1498 * @{ 1499 */ 1500 1501 /** 1502 * @brief Walk a complete talloc hierarchy. 1503 * 1504 * This provides a more flexible reports than talloc_report(). It 1505 * will recursively call the callback for the entire tree of memory 1506 * referenced by the pointer. References in the tree are passed with 1507 * is_ref = 1 and the pointer that is referenced. 1508 * 1509 * You can pass NULL for the pointer, in which case a report is 1510 * printed for the top level memory context, but only if 1511 * talloc_enable_leak_report() or talloc_enable_leak_report_full() 1512 * has been called. 1513 * 1514 * The recursion is stopped when depth >= max_depth. 1515 * max_depth = -1 means only stop at leaf nodes. 1516 * 1517 * @param[in] ptr The talloc chunk. 1518 * 1519 * @param[in] depth Internal parameter to control recursion. Call with 0. 1520 * 1521 * @param[in] max_depth Maximum recursion level. 1522 * 1523 * @param[in] callback Function to be called on every chunk. 1524 * 1525 * @param[in] private_data Private pointer passed to callback. 1526 */ 1527 void talloc_report_depth_cb(const void *ptr, int depth, int max_depth, 1528 void (*callback)(const void *ptr, 1529 int depth, int max_depth, 1530 int is_ref, 1531 void *private_data), 1532 void *private_data); 1533 1534 /** 1535 * @brief Print a talloc hierarchy. 1536 * 1537 * This provides a more flexible reports than talloc_report(). It 1538 * will let you specify the depth and max_depth. 1539 * 1540 * @param[in] ptr The talloc chunk. 1541 * 1542 * @param[in] depth Internal parameter to control recursion. Call with 0. 1543 * 1544 * @param[in] max_depth Maximum recursion level. 1545 * 1546 * @param[in] f The file handle to print to. 1547 */ 1548 void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f); 1549 1550 /** 1551 * @brief Print a summary report of all memory used by ptr. 1552 * 1553 * This provides a more detailed report than talloc_report(). It will 1554 * recursively print the ensire tree of memory referenced by the 1555 * pointer. References in the tree are shown by giving the name of the 1556 * pointer that is referenced. 1557 * 1558 * You can pass NULL for the pointer, in which case a report is printed 1559 * for the top level memory context, but only if 1560 * talloc_enable_leak_report() or talloc_enable_leak_report_full() has 1561 * been called. 1562 * 1563 * @param[in] ptr The talloc chunk. 1564 * 1565 * @param[in] f The file handle to print to. 1566 * 1567 * Example: 1568 * @code 1569 * unsigned int *a, *b; 1570 * a = talloc(NULL, unsigned int); 1571 * b = talloc(a, unsigned int); 1572 * fprintf(stderr, "Dumping memory tree for a:\n"); 1573 * talloc_report_full(a, stderr); 1574 * @endcode 1575 * 1576 * @see talloc_report() 1577 */ 1578 void talloc_report_full(const void *ptr, FILE *f); 1579 1580 /** 1581 * @brief Print a summary report of all memory used by ptr. 1582 * 1583 * This function prints a summary report of all memory used by ptr. One line of 1584 * report is printed for each immediate child of ptr, showing the total memory 1585 * and number of blocks used by that child. 1586 * 1587 * You can pass NULL for the pointer, in which case a report is printed 1588 * for the top level memory context, but only if talloc_enable_leak_report() 1589 * or talloc_enable_leak_report_full() has been called. 1590 * 1591 * @param[in] ptr The talloc chunk. 1592 * 1593 * @param[in] f The file handle to print to. 1594 * 1595 * Example: 1596 * @code 1597 * unsigned int *a, *b; 1598 * a = talloc(NULL, unsigned int); 1599 * b = talloc(a, unsigned int); 1600 * fprintf(stderr, "Summary of memory tree for a:\n"); 1601 * talloc_report(a, stderr); 1602 * @endcode 1603 * 1604 * @see talloc_report_full() 1605 */ 1606 void talloc_report(const void *ptr, FILE *f); 1607 1608 /** 1609 * @brief Enable tracking the use of NULL memory contexts. 1610 * 1611 * This enables tracking of the NULL memory context without enabling leak 1612 * reporting on exit. Useful for when you want to do your own leak 1613 * reporting call via talloc_report_null_full(); 1614 */ 1615 void talloc_enable_null_tracking(void); 1616 1617 /** 1618 * @brief Enable tracking the use of NULL memory contexts. 1619 * 1620 * This enables tracking of the NULL memory context without enabling leak 1621 * reporting on exit. Useful for when you want to do your own leak 1622 * reporting call via talloc_report_null_full(); 1623 */ 1624 void talloc_enable_null_tracking_no_autofree(void); 1625 1626 /** 1627 * @brief Disable tracking of the NULL memory context. 1628 * 1629 * This disables tracking of the NULL memory context. 1630 */ 1631 void talloc_disable_null_tracking(void); 1632 1633 /** 1634 * @brief Enable leak report when a program exits. 1635 * 1636 * This enables calling of talloc_report(NULL, stderr) when the program 1637 * exits. In Samba4 this is enabled by using the --leak-report command 1638 * line option. 1639 * 1640 * For it to be useful, this function must be called before any other 1641 * talloc function as it establishes a "null context" that acts as the 1642 * top of the tree. If you don't call this function first then passing 1643 * NULL to talloc_report() or talloc_report_full() won't give you the 1644 * full tree printout. 1645 * 1646 * Here is a typical talloc report: 1647 * 1648 * @code 1649 * talloc report on 'null_context' (total 267 bytes in 15 blocks) 1650 * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks 1651 * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks 1652 * iconv(UTF8,CP850) contains 42 bytes in 2 blocks 1653 * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks 1654 * iconv(CP850,UTF8) contains 42 bytes in 2 blocks 1655 * iconv(UTF8,UTF-16LE) contains 45 bytes in 2 blocks 1656 * iconv(UTF-16LE,UTF8) contains 45 bytes in 2 blocks 1657 * @endcode 1658 */ 1659 void talloc_enable_leak_report(void); 1660 1661 /** 1662 * @brief Enable full leak report when a program exits. 1663 * 1664 * This enables calling of talloc_report_full(NULL, stderr) when the 1665 * program exits. In Samba4 this is enabled by using the 1666 * --leak-report-full command line option. 1667 * 1668 * For it to be useful, this function must be called before any other 1669 * talloc function as it establishes a "null context" that acts as the 1670 * top of the tree. If you don't call this function first then passing 1671 * NULL to talloc_report() or talloc_report_full() won't give you the 1672 * full tree printout. 1673 * 1674 * Here is a typical full report: 1675 * 1676 * @code 1677 * full talloc report on 'root' (total 18 bytes in 8 blocks) 1678 * p1 contains 18 bytes in 7 blocks (ref 0) 1679 * r1 contains 13 bytes in 2 blocks (ref 0) 1680 * reference to: p2 1681 * p2 contains 1 bytes in 1 blocks (ref 1) 1682 * x3 contains 1 bytes in 1 blocks (ref 0) 1683 * x2 contains 1 bytes in 1 blocks (ref 0) 1684 * x1 contains 1 bytes in 1 blocks (ref 0) 1685 * @endcode 1686 */ 1687 void talloc_enable_leak_report_full(void); 1688 1689 /* @} ******************************************************************/ 1690 1691 void talloc_set_abort_fn(void (*abort_fn)(const char *reason)); 1692 void talloc_set_log_fn(void (*log_fn)(const char *message)); 1693 void talloc_set_log_stderr(void); 117 1694 118 1695 #if TALLOC_DEPRECATED … … 125 1702 #endif 126 1703 127 #define TALLOC_FREE(ctx) do { talloc_free(ctx); ctx=NULL; } while(0) 128 129 /* The following definitions come from talloc.c */ 130 void *_talloc(const void *context, size_t size); 131 void *talloc_pool(const void *context, size_t size); 132 void _talloc_set_destructor(const void *ptr, int (*_destructor)(void *)); 133 int talloc_increase_ref_count(const void *ptr); 134 size_t talloc_reference_count(const void *ptr); 135 void *_talloc_reference_loc(const void *context, const void *ptr, const char *location); 136 int talloc_unlink(const void *context, void *ptr); 137 const char *talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 138 void talloc_set_name_const(const void *ptr, const char *name); 139 void *talloc_named(const void *context, size_t size, 140 const char *fmt, ...) PRINTF_ATTRIBUTE(3,4); 141 void *talloc_named_const(const void *context, size_t size, const char *name); 142 const char *talloc_get_name(const void *ptr); 143 void *talloc_check_name(const void *ptr, const char *name); 144 void *_talloc_get_type_abort(const void *ptr, const char *name, const char *location); 145 void *talloc_parent(const void *ptr); 146 const char *talloc_parent_name(const void *ptr); 147 void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2); 148 int _talloc_free(void *ptr, const char *location); 149 void talloc_free_children(void *ptr); 150 void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name); 151 void *_talloc_steal_loc(const void *new_ctx, const void *ptr, const char *location); 152 void *talloc_reparent(const void *old_parent, const void *new_parent, const void *ptr); 153 void *_talloc_move(const void *new_ctx, const void *pptr); 154 size_t talloc_total_size(const void *ptr); 155 size_t talloc_total_blocks(const void *ptr); 156 void talloc_report_depth_cb(const void *ptr, int depth, int max_depth, 157 void (*callback)(const void *ptr, 158 int depth, int max_depth, 159 int is_ref, 160 void *private_data), 161 void *private_data); 162 void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f); 163 void talloc_report_full(const void *ptr, FILE *f); 164 void talloc_report(const void *ptr, FILE *f); 165 void talloc_enable_null_tracking(void); 166 void talloc_enable_null_tracking_no_autofree(void); 167 void talloc_disable_null_tracking(void); 168 void talloc_enable_leak_report(void); 169 void talloc_enable_leak_report_full(void); 170 void *_talloc_zero(const void *ctx, size_t size, const char *name); 171 void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name); 172 void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name); 173 void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name); 174 void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name); 175 void *talloc_realloc_fn(const void *context, void *ptr, size_t size); 176 void *talloc_autofree_context(void); 177 size_t talloc_get_size(const void *ctx); 178 void *talloc_find_parent_byname(const void *ctx, const char *name); 179 void talloc_show_parents(const void *context, FILE *file); 180 int talloc_is_parent(const void *context, const void *ptr); 181 182 char *talloc_strdup(const void *t, const char *p); 183 char *talloc_strdup_append(char *s, const char *a); 184 char *talloc_strdup_append_buffer(char *s, const char *a); 185 186 char *talloc_strndup(const void *t, const char *p, size_t n); 187 char *talloc_strndup_append(char *s, const char *a, size_t n); 188 char *talloc_strndup_append_buffer(char *s, const char *a, size_t n); 189 190 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 191 char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 192 char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); 193 194 char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 195 char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 196 char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); 197 198 void talloc_set_abort_fn(void (*abort_fn)(const char *reason)); 199 void talloc_set_log_fn(void (*log_fn)(const char *message)); 200 void talloc_set_log_stderr(void); 201 202 #endif 1704 #ifndef TALLOC_MAX_DEPTH 1705 #define TALLOC_MAX_DEPTH 10000 1706 #endif 1707 1708 #ifdef __cplusplus 1709 } /* end of extern "C" */ 1710 #endif 1711 1712 #endif
Note:
See TracChangeset
for help on using the changeset viewer.