Your test is backwards. I would write it like this:
if (size > a->limit - a->cursor) return NULL;
You're right. Fixed.