Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/lib/talloc/talloc.h

    r414 r740  
    3030#include <stdarg.h>
    3131
     32#ifdef __cplusplus
     33extern "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
    3245#define TALLOC_VERSION_MAJOR 2
    3346#define TALLOC_VERSION_MINOR 0
     
    3649int talloc_version_minor(void);
    3750
    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 */
    3974typedef void TALLOC_CTX;
    4075
     
    65100#endif
    66101
     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 */
     136void *talloc(const void *ctx, #type);
     137#else
     138#define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
     139void *_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 */
     159void *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 */
     224int talloc_free(void *ptr);
     225#else
     226#define talloc_free(ctx) _talloc_free(ctx, __location__)
     227int _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 */
     238void 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 */
     294void 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 */
     334void *talloc_steal(const void *new_ctx, const void *ptr);
     335#else /* DOXYGEN */
    67336/* try to make talloc_set_destructor() and talloc_steal() type safe,
    68337   if we have a recent gcc */
     
    77346   stupidity in gcc 4.1.x */
    78347#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 */
    80349#define talloc_set_destructor(ptr, function) \
    81350        _talloc_set_destructor((ptr), (int (*)(void *))(function))
    82351#define _TALLOC_TYPEOF(ptr) void *
    83352#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 */
     354void _talloc_set_destructor(const void *ptr, int (*_destructor)(void *));
     355void *_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 */
     388const 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 */
     410void *talloc_move(const void *new_ctx, const void *ptr);
     411#else
    87412#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)
     413void *_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 */
     432void 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 */
     457void *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 */
     478void *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 */
     501void *talloc_size(const void *ctx, size_t size);
     502#else
    91503#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 */
     528void *talloc_ptrtype(const void *ctx, #type);
     529#else
    92530#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 */
     546void *talloc_new(const void *ctx);
     547#else
    94548#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 */
     580void *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 */
     591void *talloc_zero_size(const void *ctx, size_t size);
     592#else
    96593#define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
    97594#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 
     595void *_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 */
     607const 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 */
     621void *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 */
     630void *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 */
     639const 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 */
     655size_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 */
     672size_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 */
     695void *talloc_memdup(const void *t, const void *p, size_t size);
     696#else
    108697#define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__)
    109 
     698void *_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 */
     719void 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 */
     738type *talloc_get_type(const void *ptr, #type);
     739#else
    110740#define talloc_set_type(ptr, type) talloc_set_name_const(ptr, #type)
    111741#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 */
     759void *talloc_get_type_abort(const void *ptr, #type);
     760#else
    112761#define talloc_get_type_abort(ptr, type) (type *)_talloc_get_type_abort(ptr, #type, __location__)
    113 
     762void *_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 */
     780void *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 */
     800void *talloc_find_parent_bytype(const void *ptr, #type);
     801#else
    114802#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 */
     841void *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 */
     881int 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 */
     890size_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 */
     932void *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__)
     935void *_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 */
     970int 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 */
     990void *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 */
     1003size_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 */
     1012void 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 */
     1025int 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 */
     1045void *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 */
     1090void *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)
     1093void *_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 */
     1108void *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 */
     1132void *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 */
     1148size_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 */
     1172void *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)
     1175void *_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 */
     1212void *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)
     1215void *_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 */
     1233void *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__)
     1236void *_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 */
     1256void *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 */
     1291char *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 */
     1304char *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 */
     1317char *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 */
     1339char *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 */
     1356char *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 */
     1373char *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 */
     1396char *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 */
     1412char *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 */
     1428char *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 */
     1450char *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 */
     1474char *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 */
     1487char *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 */
     1527void 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 */
     1548void 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 */
     1578void 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 */
     1606void 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 */
     1615void 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 */
     1624void 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 */
     1631void 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 */
     1659void 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 */
     1687void talloc_enable_leak_report_full(void);
     1688
     1689/* @} ******************************************************************/
     1690
     1691void talloc_set_abort_fn(void (*abort_fn)(const char *reason));
     1692void talloc_set_log_fn(void (*log_fn)(const char *message));
     1693void talloc_set_log_stderr(void);
    1171694
    1181695#if TALLOC_DEPRECATED
     
    1251702#endif
    1261703
    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.