Simplest case to test is:
pg_ctl start -D /valid/db/dir -l /invalid/dir
pg_ctl: /invalid/dir: No such file or directory
postmaster successfully started
Postmaster hasn't started and the error could probably use some work.
Perhaps some more tests after line 340 of pg_ctl would be appropriate.
Something along the lines of (perlish pseudocode):
if ( -w $logfile || ( -w `dirname $logfile` )
Should it also test -O to ensure ownership if the file does exist? I'll
brush up on my sh and submit a patch if requested.