c generic library