DEF_QUEUE Type (Structure)

system.h

typedef struct {
unsigned short Head; /* Offset to the head of the queue */
unsigned short Tail; /* Offset to the tail of the queue */
unsigned short Size; /* Max number of entries in the queue */
unsigned short Used; /* Actual number of entries in the queue */
unsigned short Buffer[];
} DEF_QUEUE;

A structure describing the header of a variable-sized queue.

Note that Buffer[] is a GNU C extension for variable-sized arrays (TIGCC is GNU C). The main usage of DEF_QUEUE structure is when you want to allocate a queue dynamically on the heap (using malloc). The operator sizeof treats variable-sized arrays as zero-length arrays (this is a sense of zero in square brackets). So, the following example ilustrates correct allocating of a queue with 100-byte long buffer on the heap (note that 100-byte long buffer can store 50 entries, because each int entry is 2 bytes long):

DEF_QUEUE *qptr = malloc (sizeof (DEF_QUEUE) + 100);
OSqclear (qptr);
qptr->Size = 50;
OSenqueue (some_data, qptr);
From this example you can see that you need to fill field Size of the queue structure manually.