diff --git a/Makefile.am b/Makefile.am index 5a1e7738d..f150b9375 100644 --- a/Makefile.am +++ b/Makefile.am @@ -257,6 +257,7 @@ UPNP_SOURCES = \ src/lib/upnp/Action.hxx ALSA_SOURCES = \ + src/lib/alsa/Version.cxx src/lib/alsa/Version.hxx \ src/lib/alsa/NonBlock.cxx src/lib/alsa/NonBlock.hxx # diff --git a/src/lib/alsa/Version.cxx b/src/lib/alsa/Version.cxx new file mode 100644 index 000000000..b24ded778 --- /dev/null +++ b/src/lib/alsa/Version.cxx @@ -0,0 +1,52 @@ +/* + * Copyright 2003-2017 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Version.hxx" + +#include + +gcc_pure +static uint_least32_t +ParseAlsaVersion(const char *p) +{ + char *endptr; + unsigned long major, minor = 0, subminor = 0; + + major = strtoul(p, &endptr, 10); + if (*endptr == '.') { + p = endptr + 1; + minor = strtoul(p, &endptr, 10); + if (*endptr == '.') { + p = endptr + 1; + subminor = strtoul(p, nullptr, 10); + } + } + + return MakeAlsaVersion(major, minor, subminor); +} + +uint_least32_t +GetRuntimeAlsaVersion() +{ + const char *version = snd_asoundlib_version(); + if (version == nullptr) + return 0; + + return ParseAlsaVersion(version); +} diff --git a/src/lib/alsa/Version.hxx b/src/lib/alsa/Version.hxx new file mode 100644 index 000000000..4a595ca28 --- /dev/null +++ b/src/lib/alsa/Version.hxx @@ -0,0 +1,42 @@ +/* + * Copyright 2003-2017 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_ALSA_VERSION_HXX +#define MPD_ALSA_VERSION_HXX + +#include "Compiler.h" + +#include + +static constexpr uint_least32_t +MakeAlsaVersion(uint_least32_t major, uint_least32_t minor, + uint_least32_t subminor) +{ + return (major << 16) | (minor << 8) | subminor; +} + +/** + * Wrapper for snd_asoundlib_version() which translates the resulting + * string to an integer constructed with MakeAlsaVersion(). + */ +gcc_const +uint_least32_t +GetRuntimeAlsaVersion(); + +#endif