talloc.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955
  1. #ifndef CCAN_TALLOC_H
  2. #define CCAN_TALLOC_H
  3. /*
  4. Unix SMB/CIFS implementation.
  5. Samba temporary memory allocation functions
  6. Copyright (C) Andrew Tridgell 2004-2005
  7. Copyright (C) Stefan Metzmacher 2006
  8. ** NOTE! The following LGPL license applies to the talloc
  9. ** library. This does NOT imply that all of Samba is released
  10. ** under the LGPL
  11. This library is free software; you can redistribute it and/or
  12. modify it under the terms of the GNU Lesser General Public
  13. License as published by the Free Software Foundation; either
  14. version 2 of the License, or (at your option) any later version.
  15. This library is distributed in the hope that it will be useful,
  16. but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. Lesser General Public License for more details.
  19. You should have received a copy of the GNU Lesser General Public
  20. License along with this library; if not, write to the Free Software
  21. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22. */
  23. #include <stdlib.h>
  24. #include <stdio.h>
  25. #include <stdarg.h>
  26. #include "config.h"
  27. /*
  28. this uses a little trick to allow __LINE__ to be stringified
  29. */
  30. #ifndef __location__
  31. #define __TALLOC_STRING_LINE1__(s) #s
  32. #define __TALLOC_STRING_LINE2__(s) __TALLOC_STRING_LINE1__(s)
  33. #define __TALLOC_STRING_LINE3__ __TALLOC_STRING_LINE2__(__LINE__)
  34. #define __location__ __FILE__ ":" __TALLOC_STRING_LINE3__
  35. #endif
  36. #if HAVE_ATTRIBUTE_PRINTF
  37. /** Use gcc attribute to check printf fns. a1 is the 1-based index of
  38. * the parameter containing the format, and a2 the index of the first
  39. * argument. Note that some gcc 2.x versions don't handle this
  40. * properly **/
  41. #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
  42. #else
  43. #define PRINTF_ATTRIBUTE(a1, a2)
  44. #endif
  45. /* try to make talloc_set_destructor() and talloc_steal() type safe,
  46. if we have a recent gcc */
  47. #if HAVE_TYPEOF
  48. #define _TALLOC_TYPEOF(ptr) __typeof__(ptr)
  49. #else
  50. #define _TALLOC_TYPEOF(ptr) void *
  51. #endif
  52. #define talloc_move(ctx, ptr) (_TALLOC_TYPEOF(*(ptr)))_talloc_move((ctx),(void *)(ptr))
  53. /**
  54. * talloc - allocate dynamic memory for a type
  55. * @ctx: context to be parent of this allocation, or NULL.
  56. * @type: the type to be allocated.
  57. *
  58. * The talloc() macro is the core of the talloc library. It takes a memory
  59. * context and a type, and returns a pointer to a new area of memory of the
  60. * given type.
  61. *
  62. * The returned pointer is itself a talloc context, so you can use it as the
  63. * context argument to more calls to talloc if you wish.
  64. *
  65. * The returned pointer is a "child" of @ctx. This means that if you
  66. * talloc_free() @ctx then the new child disappears as well. Alternatively you
  67. * can free just the child.
  68. *
  69. * @ctx can be NULL, in which case a new top level context is created.
  70. *
  71. * Example:
  72. * unsigned int *a, *b;
  73. * a = talloc(NULL, unsigned int);
  74. * b = talloc(a, unsigned int);
  75. *
  76. * See Also:
  77. * talloc_zero, talloc_array, talloc_steal, talloc_free.
  78. */
  79. #define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
  80. /**
  81. * talloc_free - free talloc'ed memory and its children
  82. * @ptr: the talloced pointer to free
  83. *
  84. * The talloc_free() function frees a piece of talloc memory, and all its
  85. * children. You can call talloc_free() on any pointer returned by talloc().
  86. *
  87. * The return value of talloc_free() indicates success or failure, with 0
  88. * returned for success and -1 for failure. The only possible failure condition
  89. * is if the pointer had a destructor attached to it and the destructor
  90. * returned -1. See talloc_set_destructor() for details on destructors.
  91. *
  92. * If this pointer has an additional parent when talloc_free() is called then
  93. * the memory is not actually released, but instead the most recently
  94. * established parent is destroyed. See talloc_reference() for details on
  95. * establishing additional parents.
  96. *
  97. * For more control on which parent is removed, see talloc_unlink().
  98. *
  99. * talloc_free() operates recursively on its children.
  100. *
  101. * Example:
  102. * unsigned int *a, *b;
  103. * a = talloc(NULL, unsigned int);
  104. * b = talloc(a, unsigned int);
  105. * // Frees a and b
  106. * talloc_free(a);
  107. *
  108. * See Also:
  109. * talloc_set_destructor, talloc_unlink
  110. */
  111. int talloc_free(void *ptr);
  112. /**
  113. * talloc_set_destructor: set a destructor for when this pointer is freed
  114. * @ptr: the talloc pointer to set the destructor on
  115. * @destructor: the function to be called
  116. *
  117. * The function talloc_set_destructor() sets the "destructor" for the pointer
  118. * @ptr. A destructor is a function that is called when the memory used by a
  119. * pointer is about to be released. The destructor receives the pointer as an
  120. * argument, and should return 0 for success and -1 for failure.
  121. *
  122. * The destructor can do anything it wants to, including freeing other pieces
  123. * of memory. A common use for destructors is to clean up operating system
  124. * resources (such as open file descriptors) contained in the structure the
  125. * destructor is placed on.
  126. *
  127. * You can only place one destructor on a pointer. If you need more than one
  128. * destructor then you can create a zero-length child of the pointer and place
  129. * an additional destructor on that.
  130. *
  131. * To remove a destructor call talloc_set_destructor() with NULL for the
  132. * destructor.
  133. *
  134. * If your destructor attempts to talloc_free() the pointer that it is the
  135. * destructor for then talloc_free() will return -1 and the free will be
  136. * ignored. This would be a pointless operation anyway, as the destructor is
  137. * only called when the memory is just about to go away.
  138. *
  139. * Example:
  140. * static int destroy_fd(int *fd)
  141. * {
  142. * close(*fd);
  143. * return 0;
  144. * }
  145. *
  146. * int *open_file(const char *filename)
  147. * {
  148. * int *fd = talloc(NULL, int);
  149. * *fd = open(filename, O_RDONLY);
  150. * if (*fd < 0) {
  151. * talloc_free(fd);
  152. * return NULL;
  153. * }
  154. * // Whenever they free this, we close the file.
  155. * talloc_set_destructor(fd, destroy_fd);
  156. * return fd;
  157. * }
  158. *
  159. * See Also:
  160. * talloc, talloc_free
  161. */
  162. #define talloc_set_destructor(ptr, function) \
  163. do { \
  164. int (*_talloc_destructor_fn)(_TALLOC_TYPEOF(ptr)) = (function); \
  165. _talloc_set_destructor((ptr), (int (*)(void *))_talloc_destructor_fn); \
  166. } while(0)
  167. /**
  168. * talloc_zero - allocate zeroed dynamic memory for a type
  169. * @ctx: context to be parent of this allocation, or NULL.
  170. * @type: the type to be allocated.
  171. *
  172. * The talloc_zero() macro is equivalent to:
  173. *
  174. * ptr = talloc(ctx, type);
  175. * if (ptr) memset(ptr, 0, sizeof(type));
  176. *
  177. * Example:
  178. * unsigned int *a, *b;
  179. * a = talloc_zero(NULL, unsigned int);
  180. * b = talloc_zero(a, unsigned int);
  181. *
  182. * See Also:
  183. * talloc, talloc_zero_size, talloc_zero_array
  184. */
  185. #define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
  186. /**
  187. * talloc_array - allocate dynamic memory for an array of a given type
  188. * @ctx: context to be parent of this allocation, or NULL.
  189. * @type: the type to be allocated.
  190. * @count: the number of elements to be allocated.
  191. *
  192. * The talloc_array() macro is a safe way of allocating an array. It is
  193. * equivalent to:
  194. *
  195. * (type *)talloc_size(ctx, sizeof(type) * count);
  196. *
  197. * except that it provides integer overflow protection for the multiply,
  198. * returning NULL if the multiply overflows.
  199. *
  200. * Example:
  201. * unsigned int *a, *b;
  202. * a = talloc_zero(NULL, unsigned int);
  203. * b = talloc_array(a, unsigned int, 100);
  204. *
  205. * See Also:
  206. * talloc, talloc_zero_array
  207. */
  208. #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type)
  209. /**
  210. * talloc_size - allocate a particular size of memory
  211. * @ctx: context to be parent of this allocation, or NULL.
  212. * @size: the number of bytes to allocate
  213. *
  214. * The function talloc_size() should be used when you don't have a convenient
  215. * type to pass to talloc(). Unlike talloc(), it is not type safe (as it
  216. * returns a void *), so you are on your own for type checking.
  217. *
  218. * Best to use talloc() or talloc_array() instead.
  219. *
  220. * Example:
  221. * void *mem = talloc_size(NULL, 100);
  222. *
  223. * See Also:
  224. * talloc, talloc_array, talloc_zero_size
  225. */
  226. #define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__)
  227. #ifdef HAVE_TYPEOF
  228. /**
  229. * talloc_steal - change/set the parent context of a talloc pointer
  230. * @ctx: the new parent
  231. * @ptr: the talloc pointer to reparent
  232. *
  233. * The talloc_steal() function changes the parent context of a talloc
  234. * pointer. It is typically used when the context that the pointer is currently
  235. * a child of is going to be freed and you wish to keep the memory for a longer
  236. * time.
  237. *
  238. * The talloc_steal() function returns the pointer that you pass it. It does
  239. * not have any failure modes.
  240. *
  241. * NOTE: It is possible to produce loops in the parent/child relationship if
  242. * you are not careful with talloc_steal(). No guarantees are provided as to
  243. * your sanity or the safety of your data if you do this.
  244. *
  245. * talloc_steal (new_ctx, NULL) will return NULL with no sideeffects.
  246. *
  247. * Example:
  248. * unsigned int *a, *b;
  249. * a = talloc(NULL, unsigned int);
  250. * b = talloc(NULL, unsigned int);
  251. * // Reparent b to a as if we'd done 'b = talloc(a, unsigned int)'.
  252. * talloc_steal(a, b);
  253. *
  254. * See Also:
  255. * talloc_reference
  256. */
  257. #define talloc_steal(ctx, ptr) ({ _TALLOC_TYPEOF(ptr) _talloc_steal_ret = (_TALLOC_TYPEOF(ptr))_talloc_steal((ctx),(ptr)); _talloc_steal_ret; }) /* this extremely strange macro is to avoid some braindamaged warning stupidity in gcc 4.1.x */
  258. #else
  259. #define talloc_steal(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_steal((ctx),(ptr))
  260. #endif /* HAVE_TYPEOF */
  261. /**
  262. * talloc_report_full - report all the memory used by a pointer and children.
  263. * @ptr: the context to report on
  264. * @f: the file to report to
  265. *
  266. * Recursively print the entire tree of memory referenced by the
  267. * pointer. References in the tree are shown by giving the name of the pointer
  268. * that is referenced.
  269. *
  270. * You can pass NULL for the pointer, in which case a report is printed for the
  271. * top level memory context, but only if talloc_enable_null_tracking() has been
  272. * called.
  273. *
  274. * Example:
  275. * unsigned int *a, *b;
  276. * a = talloc(NULL, unsigned int);
  277. * b = talloc(a, unsigned int);
  278. * fprintf(stderr, "Dumping memory tree for a:\n");
  279. * talloc_report_full(a, stderr);
  280. *
  281. * See Also:
  282. * talloc_report
  283. */
  284. void talloc_report_full(const void *ptr, FILE *f);
  285. /**
  286. * talloc_reference - add an additional parent to a context
  287. * @ctx: the additional parent
  288. * @ptr: the talloc pointer
  289. *
  290. * The talloc_reference() function makes @ctx an additional parent of @ptr.
  291. *
  292. * The return value of talloc_reference() is always the original pointer @ptr,
  293. * unless talloc ran out of memory in creating the reference in which case it
  294. * will return NULL (each additional reference consumes around 48 bytes of
  295. * memory on intel x86 platforms).
  296. *
  297. * If @ptr is NULL, then the function is a no-op, and simply returns NULL.
  298. *
  299. * After creating a reference you can free it in one of the following ways:
  300. *
  301. * - you can talloc_free() any parent of the original pointer. That will
  302. * reduce the number of parents of this pointer by 1, and will cause this
  303. * pointer to be freed if it runs out of parents.
  304. *
  305. * - you can talloc_free() the pointer itself. That will destroy the most
  306. * recently established parent to the pointer and leave the pointer as a
  307. * child of its current parent.
  308. *
  309. * For more control on which parent to remove, see talloc_unlink().
  310. * Example:
  311. * unsigned int *a, *b, *c;
  312. * a = talloc(NULL, unsigned int);
  313. * b = talloc(NULL, unsigned int);
  314. * c = talloc(a, unsigned int);
  315. * // b also serves as a parent of c.
  316. * talloc_reference(b, c);
  317. */
  318. #define talloc_reference(ctx, ptr) (_TALLOC_TYPEOF(ptr))_talloc_reference((ctx),(ptr))
  319. /**
  320. * talloc_unlink: remove a specific parent from a talloc pointer.
  321. * @context: the parent to remove
  322. * @ptr: the talloc pointer
  323. *
  324. * The talloc_unlink() function removes a specific parent from @ptr. The
  325. * context passed must either be a context used in talloc_reference() with this
  326. * pointer, or must be a direct parent of @ptr.
  327. *
  328. * Note that if the parent has already been removed using talloc_free() then
  329. * this function will fail and will return -1. Likewise, if @ptr is NULL,
  330. * then the function will make no modifications and return -1.
  331. *
  332. * Usually you can just use talloc_free() instead of talloc_unlink(), but
  333. * sometimes it is useful to have the additional control on which parent is
  334. * removed.
  335. * Example:
  336. * unsigned int *a, *b, *c;
  337. * a = talloc(NULL, unsigned int);
  338. * b = talloc(NULL, unsigned int);
  339. * c = talloc(a, unsigned int);
  340. * // b also serves as a parent of c.
  341. * talloc_reference(b, c);
  342. * talloc_unlink(b, c);
  343. */
  344. int talloc_unlink(const void *context, void *ptr);
  345. /**
  346. * talloc_report - print a summary of memory used by a pointer
  347. *
  348. * The talloc_report() function prints a summary report of all memory
  349. * used by @ptr. One line of report is printed for each immediate child of
  350. * @ptr, showing the total memory and number of blocks used by that child.
  351. *
  352. * You can pass NULL for the pointer, in which case a report is printed for the
  353. * top level memory context, but only if talloc_enable_null_tracking() has been
  354. * called.
  355. *
  356. * Example:
  357. * unsigned int *a, *b;
  358. * a = talloc(NULL, unsigned int);
  359. * b = talloc(a, unsigned int);
  360. * fprintf(stderr, "Summary of memory tree for a:\n");
  361. * talloc_report(a, stderr);
  362. *
  363. * See Also:
  364. * talloc_report_full
  365. */
  366. void talloc_report(const void *ptr, FILE *f);
  367. /**
  368. * talloc_ptrtype - allocate a size of memory suitable for this pointer
  369. * @ctx: context to be parent of this allocation, or NULL.
  370. * @ptr: the pointer whose type we are to allocate
  371. *
  372. * The talloc_ptrtype() macro should be used when you have a pointer and
  373. * want to allocate memory to point at with this pointer. When compiling
  374. * with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size()
  375. * and talloc_get_name() will return the current location in the source file.
  376. * and not the type.
  377. *
  378. * Example:
  379. * unsigned int *a = talloc_ptrtype(NULL, a);
  380. */
  381. #define talloc_ptrtype(ctx, ptr) (_TALLOC_TYPEOF(ptr))talloc_size(ctx, sizeof(*(ptr)))
  382. /**
  383. * talloc_free_children - free talloc'ed memory's children only
  384. * @ptr: the talloced pointer whose children we want to free
  385. *
  386. * talloc_free_children() walks along the list of all children of a talloc
  387. * context @ptr and talloc_free()s only the children, not the context itself.
  388. * Example:
  389. * unsigned int *a, *b;
  390. * a = talloc(NULL, unsigned int);
  391. * b = talloc(a, unsigned int);
  392. * // Frees b
  393. * talloc_free_children(a);
  394. */
  395. void talloc_free_children(void *ptr);
  396. /**
  397. * talloc_new - create a new context
  398. * @ctx: the context to use as a parent.
  399. *
  400. * This is a utility macro that creates a new memory context hanging off an
  401. * exiting context, automatically naming it "talloc_new: __location__" where
  402. * __location__ is the source line it is called from. It is particularly useful
  403. * for creating a new temporary working context.
  404. */
  405. #define talloc_new(ctx) talloc_named_const(ctx, 0, "talloc_new: " __location__)
  406. /**
  407. * talloc_zero_size - allocate a particular size of zeroed memory
  408. *
  409. * The talloc_zero_size() function is useful when you don't have a known type.
  410. */
  411. #define talloc_zero_size(ctx, size) _talloc_zero(ctx, size, __location__)
  412. /**
  413. * talloc_zero_array - allocate an array of zeroed types
  414. * @ctx: context to be parent of this allocation, or NULL.
  415. * @type: the type to be allocated.
  416. * @count: the number of elements to be allocated.
  417. *
  418. * Just like talloc_array, but zeroes the memory.
  419. */
  420. #define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type)
  421. /**
  422. * talloc_zero_array - allocate an array of zeroed types
  423. * @ctx: context to be parent of this allocation, or NULL.
  424. * @type: the type to be allocated.
  425. * @count: the number of elements to be allocated.
  426. *
  427. * Just like talloc_array, but zeroes the memory.
  428. */
  429. #define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__)
  430. /**
  431. * talloc_array_ptrtype - allocate an array of memory suitable for this pointer
  432. * @ctx: context to be parent of this allocation, or NULL.
  433. * @ptr: the pointer whose type we are to allocate
  434. * @count: the number of elements for the array
  435. *
  436. * Like talloc_ptrtype(), except it allocates an array.
  437. */
  438. #define talloc_array_ptrtype(ctx, ptr, count) (_TALLOC_TYPEOF(ptr))talloc_array_size(ctx, sizeof(*(ptr)), count)
  439. /**
  440. * talloc_realloc - resize a talloc array
  441. * @ctx: the parent to assign (if p is NULL)
  442. * @p: the memory to reallocate
  443. * @type: the type of the object to allocate
  444. * @count: the number of objects to reallocate
  445. *
  446. * The talloc_realloc() macro changes the size of a talloc pointer. The "count"
  447. * argument is the number of elements of type "type" that you want the
  448. * resulting pointer to hold.
  449. *
  450. * talloc_realloc() has the following equivalences:
  451. *
  452. * talloc_realloc(context, NULL, type, 1) ==> talloc(context, type);
  453. * talloc_realloc(context, NULL, type, N) ==> talloc_array(context, type, N);
  454. * talloc_realloc(context, ptr, type, 0) ==> talloc_free(ptr);
  455. *
  456. * The "context" argument is only used if "ptr" is NULL, otherwise it is
  457. * ignored.
  458. *
  459. * talloc_realloc() returns the new pointer, or NULL on failure. The call will
  460. * fail either due to a lack of memory, or because the pointer has more than
  461. * one parent (see talloc_reference()).
  462. */
  463. #define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, #type)
  464. /**
  465. * talloc_realloc_size - resize talloc memory
  466. * @ctx: the parent to assign (if p is NULL)
  467. * @ptr: the memory to reallocate
  468. * @size: the new size of memory.
  469. *
  470. * The talloc_realloc_size() function is useful when the type is not known so
  471. * the typesafe talloc_realloc() cannot be used.
  472. */
  473. #define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__)
  474. /**
  475. * talloc_strdup - duplicate a string
  476. * @ctx: the talloc context for the new string
  477. * @p: the string to copy
  478. *
  479. * The talloc_strdup() function is equivalent to:
  480. *
  481. * ptr = talloc_size(ctx, strlen(p)+1);
  482. * if (ptr) memcpy(ptr, p, strlen(p)+1);
  483. *
  484. * This functions sets the name of the new pointer to the passed string. This
  485. * is equivalent to:
  486. *
  487. * talloc_set_name_const(ptr, ptr)
  488. */
  489. char *talloc_strdup(const void *t, const char *p);
  490. /**
  491. * talloc_strndup - duplicate a limited length of a string
  492. * @ctx: the talloc context for the new string
  493. * @p: the string to copy
  494. * @n: the maximum length of the returned string.
  495. *
  496. * The talloc_strndup() function is the talloc equivalent of the C library
  497. * function strndup(): the result will be truncated to @n characters before
  498. * the nul terminator.
  499. *
  500. * This functions sets the name of the new pointer to the passed string. This
  501. * is equivalent to:
  502. *
  503. * talloc_set_name_const(ptr, ptr)
  504. */
  505. char *talloc_strndup(const void *t, const char *p, size_t n);
  506. /**
  507. * talloc_memdup - duplicate some talloc memory
  508. *
  509. * The talloc_memdup() function is equivalent to:
  510. *
  511. * ptr = talloc_size(ctx, size);
  512. * if (ptr) memcpy(ptr, p, size);
  513. */
  514. #define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__)
  515. /**
  516. * talloc_asprintf - sprintf into a talloc buffer.
  517. * @t: The context to allocate the buffer from
  518. * @fmt: printf-style format for the buffer.
  519. *
  520. * The talloc_asprintf() function is the talloc equivalent of the C library
  521. * function asprintf().
  522. *
  523. * This functions sets the name of the new pointer to the new string. This is
  524. * equivalent to:
  525. *
  526. * talloc_set_name_const(ptr, ptr)
  527. */
  528. char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
  529. /**
  530. * talloc_append_string - concatenate onto a tallocated string
  531. * @orig: the tallocated string to append to
  532. * @append: the string to add, or NULL to add nothing.
  533. *
  534. * The talloc_append_string() function appends the given formatted string to
  535. * the given string.
  536. *
  537. * This function sets the name of the new pointer to the new string. This is
  538. * equivalent to:
  539. *
  540. * talloc_set_name_const(ptr, ptr)
  541. */
  542. char *talloc_append_string(char *orig, const char *append);
  543. /**
  544. * talloc_asprintf_append - sprintf onto the end of a talloc buffer.
  545. * @s: The tallocated string buffer
  546. * @fmt: printf-style format to append to the buffer.
  547. *
  548. * The talloc_asprintf_append() function appends the given formatted string to
  549. * the given string.
  550. *
  551. * This functions sets the name of the new pointer to the new string. This is
  552. * equivalent to:
  553. * talloc_set_name_const(ptr, ptr)
  554. */
  555. char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
  556. /**
  557. * talloc_vasprintf - vsprintf into a talloc buffer.
  558. * @t: The context to allocate the buffer from
  559. * @fmt: printf-style format for the buffer
  560. * @ap: va_list arguments
  561. *
  562. * The talloc_vasprintf() function is the talloc equivalent of the C library
  563. * function vasprintf()
  564. *
  565. * This functions sets the name of the new pointer to the new string. This is
  566. * equivalent to:
  567. *
  568. * talloc_set_name_const(ptr, ptr)
  569. */
  570. char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
  571. /**
  572. * talloc_vasprintf_append - sprintf onto the end of a talloc buffer.
  573. * @t: The context to allocate the buffer from
  574. * @fmt: printf-style format for the buffer
  575. * @ap: va_list arguments
  576. *
  577. * The talloc_vasprintf_append() function is equivalent to
  578. * talloc_asprintf_append(), except it takes a va_list.
  579. */
  580. char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
  581. /**
  582. * talloc_set_type - force the name of a pointer to a particular type
  583. * @ptr: the talloc pointer
  584. * @type: the type whose name to set the ptr name to.
  585. *
  586. * This macro allows you to force the name of a pointer to be a particular
  587. * type. This can be used in conjunction with talloc_get_type() to do type
  588. * checking on void* pointers.
  589. *
  590. * It is equivalent to this:
  591. * talloc_set_name_const(ptr, #type)
  592. */
  593. #define talloc_set_type(ptr, type) talloc_set_name_const(ptr, #type)
  594. /**
  595. * talloc_get_type - convert a talloced pointer with typechecking
  596. * @ptr: the talloc pointer
  597. * @type: the type which we expect the talloced pointer to be.
  598. *
  599. * This macro allows you to do type checking on talloc pointers. It is
  600. * particularly useful for void* private pointers. It is equivalent to this:
  601. *
  602. * (type *)talloc_check_name(ptr, #type)
  603. */
  604. #define talloc_get_type(ptr, type) (type *)talloc_check_name(ptr, #type)
  605. /**
  606. * talloc_find_parent_byname - find a talloc parent by type
  607. * @ptr: the talloc pointer
  608. * @type: the type we're looking for
  609. *
  610. * Find a parent memory context of the current context that has the given
  611. * name. This can be very useful in complex programs where it may be difficult
  612. * to pass all information down to the level you need, but you know the
  613. * structure you want is a parent of another context.
  614. */
  615. #define talloc_find_parent_bytype(ptr, type) (type *)talloc_find_parent_byname(ptr, #type)
  616. /**
  617. * talloc_increase_ref_count - hold a reference to a talloc pointer
  618. * @ptr: the talloc pointer
  619. *
  620. * The talloc_increase_ref_count(ptr) function is exactly equivalent to:
  621. *
  622. * talloc_reference(NULL, ptr);
  623. *
  624. * You can use either syntax, depending on which you think is clearer in your
  625. * code.
  626. *
  627. * It returns 0 on success and -1 on failure.
  628. */
  629. int talloc_increase_ref_count(const void *ptr);
  630. /**
  631. * talloc_set_name - set the name for a talloc pointer
  632. * @ptr: the talloc pointer
  633. * @fmt: the printf-style format string for the name
  634. *
  635. * Each talloc pointer has a "name". The name is used principally for debugging
  636. * purposes, although it is also possible to set and get the name on a pointer
  637. * in as a way of "marking" pointers in your code.
  638. *
  639. * The main use for names on pointer is for "talloc reports". See
  640. * talloc_report() and talloc_report_full() for details. Also see
  641. * talloc_enable_leak_report() and talloc_enable_leak_report_full().
  642. *
  643. * The talloc_set_name() function allocates memory as a child of the
  644. * pointer. It is logically equivalent to:
  645. * talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...));
  646. *
  647. * Note that multiple calls to talloc_set_name() will allocate more memory
  648. * without releasing the name. All of the memory is released when the ptr is
  649. * freed using talloc_free().
  650. */
  651. const char *talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
  652. /**
  653. * talloc_set_name_const - set a talloc pointer name to a string constant
  654. * @ptr: the talloc pointer to name
  655. * @name: the strucng constant.
  656. *
  657. * The function talloc_set_name_const() is just like talloc_set_name(), but it
  658. * takes a string constant, and is much faster. It is extensively used by the
  659. * "auto naming" macros, such as talloc().
  660. *
  661. * This function does not allocate any memory. It just copies the supplied
  662. * pointer into the internal representation of the talloc ptr. This means you
  663. * must not pass a name pointer to memory that will disappear before the ptr is
  664. * freed with talloc_free().
  665. */
  666. void talloc_set_name_const(const void *ptr, const char *name);
  667. /**
  668. * talloc_named - create a specifically-named talloc pointer
  669. * @context: the parent context for the allocation
  670. * @size: the size to allocate
  671. * @fmt: the printf-style format for the name
  672. *
  673. * The talloc_named() function creates a named talloc pointer. It is equivalent
  674. * to:
  675. *
  676. * ptr = talloc_size(context, size);
  677. * talloc_set_name(ptr, fmt, ....);
  678. */
  679. void *talloc_named(const void *context, size_t size,
  680. const char *fmt, ...) PRINTF_ATTRIBUTE(3,4);
  681. /**
  682. * talloc_named_const - create a specifically-named talloc pointer
  683. * @context: the parent context for the allocation
  684. * @size: the size to allocate
  685. * @name: the string constant to use as the name
  686. *
  687. * This is equivalent to:
  688. *
  689. * ptr = talloc_size(context, size);
  690. * talloc_set_name_const(ptr, name);
  691. */
  692. void *talloc_named_const(const void *context, size_t size, const char *name);
  693. /**
  694. * talloc_get_name - get the name of a talloc pointer
  695. * @ptr: the talloc pointer
  696. *
  697. * This returns the current name for the given talloc pointer. See
  698. * talloc_set_name() for details.
  699. */
  700. const char *talloc_get_name(const void *ptr);
  701. /**
  702. * talloc_check_name - check if a pointer has the specified name
  703. * @ptr: the talloc pointer
  704. * @name: the name to compare with the pointer's name
  705. *
  706. * This function checks if a pointer has the specified name. If it does then
  707. * the pointer is returned. It it doesn't then NULL is returned.
  708. */
  709. void *talloc_check_name(const void *ptr, const char *name);
  710. /**
  711. * talloc_init - create a top-level context of particular name
  712. * @fmt: the printf-style format of the name
  713. *
  714. * This function creates a zero length named talloc context as a top level
  715. * context. It is equivalent to:
  716. *
  717. * talloc_named(NULL, 0, fmt, ...);
  718. */
  719. void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
  720. /**
  721. * talloc_total_size - get the bytes used by the pointer and its children
  722. * @ptr: the talloc pointer
  723. *
  724. * The talloc_total_size() function returns the total size in bytes used by
  725. * this pointer and all child pointers. Mostly useful for debugging.
  726. *
  727. * Passing NULL is allowed, but it will only give a meaningful result if
  728. * talloc_enable_leak_report() or talloc_enable_leak_report_full() has been
  729. * called.
  730. */
  731. size_t talloc_total_size(const void *ptr);
  732. /**
  733. * talloc_total_blocks - get the number of allocations for the pointer
  734. * @ptr: the talloc pointer
  735. *
  736. * The talloc_total_blocks() function returns the total allocations used by
  737. * this pointer and all child pointers. Mostly useful for debugging. For
  738. * example, a pointer with no children will return "1".
  739. *
  740. * Passing NULL is allowed, but it will only give a meaningful result if
  741. * talloc_enable_leak_report() or talloc_enable_leak_report_full() has been
  742. * called.
  743. */
  744. size_t talloc_total_blocks(const void *ptr);
  745. /**
  746. * talloc_report_depth_cb - walk the entire talloc tree under a talloc pointer
  747. * @ptr: the talloc pointer to recurse under
  748. * @depth: the current depth of traversal
  749. * @max_depth: maximum depth to traverse, or -1 for no maximum
  750. * @callback: the function to call on each pointer
  751. * @private_data: pointer to hand to @callback.
  752. *
  753. * This provides a more flexible reports than talloc_report(). It will
  754. * recursively call the callback for the entire tree of memory referenced by
  755. * the pointer. References in the tree are passed with is_ref = 1 and the
  756. * pointer that is referenced.
  757. *
  758. * You can pass NULL for the pointer, in which case a report is printed for the
  759. * top level memory context, but only if talloc_enable_leak_report() or
  760. * talloc_enable_leak_report_full() has been called.
  761. *
  762. * The recursion is stopped when depth >= max_depth. max_depth = -1 means only
  763. * stop at leaf nodes.
  764. */
  765. void talloc_report_depth_cb(const void *ptr, int depth, int max_depth,
  766. void (*callback)(const void *ptr,
  767. int depth, int max_depth,
  768. int is_ref,
  769. void *private_data),
  770. void *private_data);
  771. /**
  772. * talloc_report_depth_file - report talloc usage to a maximum depth
  773. * @ptr: the talloc pointer to recurse under
  774. * @depth: the current depth of traversal
  775. * @max_depth: maximum depth to traverse, or -1 for no maximum
  776. * @f: the file to report to
  777. *
  778. * This provides a more flexible reports than talloc_report(). It will let you
  779. * specify the depth and max_depth.
  780. */
  781. void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f);
  782. /**
  783. * talloc_enable_null_tracking - enable tracking of top-level tallocs
  784. *
  785. * This enables tracking of the NULL memory context without enabling leak
  786. * reporting on exit. Useful for when you want to do your own leak reporting
  787. * call via talloc_report_null_full();
  788. */
  789. void talloc_enable_null_tracking(void);
  790. /**
  791. * talloc_disable_null_tracking - enable tracking of top-level tallocs
  792. *
  793. * This disables tracking of the NULL memory context.
  794. */
  795. void talloc_disable_null_tracking(void);
  796. /**
  797. * talloc_enable_leak_report - call talloc_report on program exit
  798. *
  799. * This enables calling of talloc_report(NULL, stderr) when the program
  800. * exits. In Samba4 this is enabled by using the --leak-report command line
  801. * option.
  802. *
  803. * For it to be useful, this function must be called before any other talloc
  804. * function as it establishes a "null context" that acts as the top of the
  805. * tree. If you don't call this function first then passing NULL to
  806. * talloc_report() or talloc_report_full() won't give you the full tree
  807. * printout.
  808. *
  809. * Here is a typical talloc report:
  810. *
  811. * talloc report on 'null_context' (total 267 bytes in 15 blocks)
  812. * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
  813. * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
  814. * iconv(UTF8,CP850) contains 42 bytes in 2 blocks
  815. * libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
  816. * iconv(CP850,UTF8) contains 42 bytes in 2 blocks
  817. * iconv(UTF8,UTF-16LE) contains 45 bytes in 2 blocks
  818. * iconv(UTF-16LE,UTF8) contains 45 bytes in 2 blocks
  819. */
  820. void talloc_enable_leak_report(void);
  821. /**
  822. * talloc_enable_leak_report - call talloc_report_full on program exit
  823. *
  824. * This enables calling of talloc_report_full(NULL, stderr) when the program
  825. * exits. In Samba4 this is enabled by using the --leak-report-full command
  826. * line option.
  827. *
  828. * For it to be useful, this function must be called before any other talloc
  829. * function as it establishes a "null context" that acts as the top of the
  830. * tree. If you don't call this function first then passing NULL to
  831. * talloc_report() or talloc_report_full() won't give you the full tree
  832. * printout.
  833. *
  834. * Here is a typical full report:
  835. *
  836. * full talloc report on 'root' (total 18 bytes in 8 blocks)
  837. * p1 contains 18 bytes in 7 blocks (ref 0)
  838. * r1 contains 13 bytes in 2 blocks (ref 0)
  839. * reference to: p2
  840. * p2 contains 1 bytes in 1 blocks (ref 1)
  841. * x3 contains 1 bytes in 1 blocks (ref 0)
  842. * x2 contains 1 bytes in 1 blocks (ref 0)
  843. * x1 contains 1 bytes in 1 blocks (ref 0)
  844. */
  845. void talloc_enable_leak_report_full(void);
  846. /**
  847. * talloc_autofree_context - a context which will be freed at exit
  848. *
  849. * This is a handy utility function that returns a talloc context which will be
  850. * automatically freed on program exit. This can be used to reduce the noise in
  851. * memory leak reports.
  852. */
  853. void *talloc_autofree_context(void);
  854. /**
  855. * talloc_get_size - get the size of an allocation
  856. * @ctx: the talloc pointer whose allocation to measure.
  857. *
  858. * This function lets you know the amount of memory alloced so far by this
  859. * context. It does NOT account for subcontext memory. This can be used to
  860. * calculate the size of an array.
  861. */
  862. size_t talloc_get_size(const void *ctx);
  863. /**
  864. * talloc_find_parent_byname - find a parent of this context with this name
  865. * @ctx: the context whose ancestors to search
  866. * @name: the name to look for
  867. *
  868. * Find a parent memory context of @ctx that has the given name. This can be
  869. * very useful in complex programs where it may be difficult to pass all
  870. * information down to the level you need, but you know the structure you want
  871. * is a parent of another context.
  872. */
  873. void *talloc_find_parent_byname(const void *ctx, const char *name);
  874. /* The following definitions come from talloc.c */
  875. void *_talloc(const void *context, size_t size);
  876. void _talloc_set_destructor(const void *ptr, int (*destructor)(void *));
  877. size_t talloc_reference_count(const void *ptr);
  878. void *_talloc_reference(const void *context, const void *ptr);
  879. void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name);
  880. void *talloc_parent(const void *ptr);
  881. const char *talloc_parent_name(const void *ptr);
  882. void *_talloc_steal(const void *new_ctx, const void *ptr);
  883. void *_talloc_move(const void *new_ctx, const void *pptr);
  884. void *_talloc_zero(const void *ctx, size_t size, const char *name);
  885. void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name);
  886. void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
  887. void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
  888. void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
  889. void *talloc_realloc_fn(const void *context, void *ptr, size_t size);
  890. void talloc_show_parents(const void *context, FILE *file);
  891. int talloc_is_parent(const void *context, const void *ptr);
  892. #endif /* CCAN_TALLOC_H */