1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-17 02:57:33 -05:00

Add an extended version of ctrl_alloc which permits you to provide a

custom free function, in case you need to ctrl_alloc a structure which
then has additional dynamically allocated things dangling off it.

[originally from svn r9922]
This commit is contained in:
Simon Tatham
2013-07-14 10:46:29 +00:00
parent 2f6d6a839d
commit ff09d5379b
2 changed files with 28 additions and 3 deletions

View File

@ -427,6 +427,8 @@ struct controlset {
union control **ctrls; /* actual array */
};
typedef void (*ctrl_freefn_t)(void *); /* used by ctrl_alloc_with_free */
/*
* This is the container structure which holds a complete set of
* controls.
@ -438,6 +440,7 @@ struct controlbox {
int nfrees;
int freesize;
void **frees; /* array of aux data areas to free */
ctrl_freefn_t *freefuncs; /* parallel array of free functions */
};
struct controlbox *ctrl_new_box(void);
@ -464,8 +467,14 @@ void ctrl_free(union control *);
* and so data allocated through this function is better not used
* to hold modifiable per-instance things. It's mostly here for
* allocating structures to be passed as control handler params.
*
* ctrl_alloc_with_free also allows you to provide a function to free
* the structure, in case there are other dynamically allocated bits
* and pieces dangling off it.
*/
void *ctrl_alloc(struct controlbox *b, size_t size);
void *ctrl_alloc_with_free(struct controlbox *b, size_t size,
ctrl_freefn_t freefunc);
/*
* Individual routines to create `union control' structures in a controlset.