alsa-project / alsa-lib

The Advanced Linux Sound Architecture (ALSA) - library
GNU Lesser General Public License v2.1
357 stars 176 forks source link

ucm: fix st_mode check for symbolic links #249

Closed stephan-gh closed 2 years ago

stephan-gh commented 2 years ago

The file type in the st_mode field is not encoded as unique bits but as an enumerator. Checking if some bits of S_IFLNK are set does not work correctly because it happens to evaluate to true for regular files as well.

The POSIX man page suggests using the following approach to check the file type:

if ((sb.st_mode & S_IFMT) == S_IFLNK)

Alternatively, there is a S_ISLNK() macro to check this more easily.

Make use of the latter so that readlink() is only called on actual symbolic links and not regular files. This makes audio work again with slightly older alsa-ucm-conf versions or alternative top-level configurations that do not make use of symlinks.

Fixes: d6adde0e ("ucm: top-level path - set directory from symlink") Signed-off-by: Stephan Gerhold stephan@gerhold.net