Removed GNU requirement; uses C99 and POSIX-9.2008