strictly conform to c90 (because why not)