What keeps you from just doing (without checking the count): <code>
struct QueueNode* run = (*queue)->queue;
while (run) { struct QueueNode *next = run->next; demolish(run); run = next; }
</code>
?  A plain while loop is generally easier to follow than a do { ... } while() loop; and gets rid of the need to check count.