>>763
S_IFDIR以外のビットが立ってたら判定できない。

if (st.st_mode & S_IFDIR) ...
とかで、判定するとか。