According to SUSv4 and POSIX, -g, -n, and -o options are required for ls.
This has not been implemented for the compatibility for 4.3 BSD, but I think there is no need to insist it anymore.
f_flags is deleted from case 'o' because file flags are not displayed in the -o option of POSIX.