diff --git a/src/lsh_types.h b/src/lsh_types.h index 1c3f0e94cda1743d62d83694c4b54876a03510dc..f74befbfd73a9accda494f244bc6d8429c0cce52 100644 --- a/src/lsh_types.h +++ b/src/lsh_types.h @@ -79,9 +79,27 @@ do { \ #define MIN(a, b) (((a)>(b)) ? (b) : (a)) #define MAX(a, b) (((a)>(b)) ? (b) : (a)) -/* Generic packet */ +/* Generic object */ + +#ifdef DEBUG_ALLOC + +struct lsh_object +{ + int type; /* Zero for objects that are not allocated on the heap. */ +}; + +#define STATIC_HEADER { 0 }, + +#else /* !DEBUG_ALLOC */ +struct lsh_object {}; +#define STATIC_HEADER + +#endif /* !DEBUG_ALLOC */ + struct lsh_string { + struct lsh_object header; + UINT32 sequence_number; UINT32 length; UINT8 data[1]; @@ -92,7 +110,9 @@ struct callback; typedef int (*callback_f)(struct callback *closure); struct callback { - callback_f f; + struct lsh_object header; + + int (*f)(struct callback *closure); }; #define CALLBACK(c) ((c)->f(c)) diff --git a/src/randomness.h b/src/randomness.h index 09b0e9964530f175d59efce8090693082fc3e91f..53d79add47bc7a6107723d8942cf6b948263f658 100644 --- a/src/randomness.h +++ b/src/randomness.h @@ -30,6 +30,8 @@ struct randomness { + struct lsh_object header; + void (*random)(struct randomness **closure, UINT32 length, UINT8 *dst); }; diff --git a/src/read_line.h b/src/read_line.h index 27b13a0b264e55bcdd1437098c4fda907eab6d99..c191dfd09a1eea06bc2636cec9735a533aee2530 100644 --- a/src/read_line.h +++ b/src/read_line.h @@ -34,6 +34,8 @@ /* May store a new handler into *h. */ struct line_handler { + struct lsh_object header; + struct read_handler * (*handler)(struct line_handler **h, UINT32 length, UINT8 *line); diff --git a/src/write_buffer.h b/src/write_buffer.h index 9d77fdaca23799807d44799c8468f9d4c03ec11c..519725342c695fb215d1037702de26b7e5357e32 100644 --- a/src/write_buffer.h +++ b/src/write_buffer.h @@ -31,6 +31,8 @@ /* For the packet queue */ struct node { + struct lsh_object header; + struct node *next; struct node *prev; struct lsh_string *packet;