use restrict everywhere it's required by c99 and/or posix 2008