talloc.h 35 KB

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