From 3bc4224bfda5ebf9cd6969ea0f6647b1af3e9da6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 11 Feb 2009 18:00:48 +0100 Subject: audio_format: added validation functions In addition to audio_format_valid(), provide functions which validate only one attribute of an audio_format. These functions are reused by audio_format_parse(). --- src/audio_format.h | 37 ++++++++++++++++++++++++++++++++++--- src/audio_parser.c | 6 +++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/audio_format.h b/src/audio_format.h index 739fe6c1f..a7ff30830 100644 --- a/src/audio_format.h +++ b/src/audio_format.h @@ -40,15 +40,46 @@ static inline bool audio_format_defined(const struct audio_format *af) return af->sample_rate != 0; } +/** + * Checks whether the sample rate is valid. + * + * @param sample_rate the sample rate in Hz + */ +static inline bool +audio_valid_sample_rate(unsigned sample_rate) +{ + return sample_rate > 0 && sample_rate < (1 << 30); +} + +/** + * Checks whether the sample format is valid. + * + * @param bits the number of significant bits per sample + */ +static inline bool +audio_valid_sample_format(unsigned bits) +{ + return bits == 16 || bits == 24 || bits == 8; +} + +/** + * Checks whether the number of channels is valid. + */ +static inline bool +audio_valid_channel_count(unsigned channels) +{ + return channels == 1 || channels == 2; +} + /** * Returns false if the format is not valid for playback with MPD. * This function performs some basic validity checks. */ static inline bool audio_format_valid(const struct audio_format *af) { - return af->sample_rate > 0 && - (af->bits == 8 || af->bits == 16 || af->bits == 24) && - af->channels >= 1; + return audio_valid_sample_rate(af->sample_rate) && + audio_valid_sample_format(af->bits) && + audio_valid_channel_count(af->channels); } static inline bool audio_format_equals(const struct audio_format *a, diff --git a/src/audio_parser.c b/src/audio_parser.c index 807a279b3..ee43fd24e 100644 --- a/src/audio_parser.c +++ b/src/audio_parser.c @@ -54,7 +54,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error) g_set_error(error, audio_parser_quark(), 0, "Sample format missing"); return false; - } else if (value <= 0 || value > G_MAXINT32) { + } else if (!audio_valid_sample_rate(value)) { g_set_error(error, audio_parser_quark(), 0, "Invalid sample rate: %lu", value); return false; @@ -74,7 +74,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error) g_set_error(error, audio_parser_quark(), 0, "Channel count missing"); return false; - } else if (value != 16 && value != 24 && value != 8) { + } else if (!audio_valid_sample_format(value)) { g_set_error(error, audio_parser_quark(), 0, "Invalid sample format: %lu", value); return false; @@ -86,7 +86,7 @@ audio_format_parse(struct audio_format *dest, const char *src, GError **error) src = endptr + 1; value = strtoul(src, &endptr, 10); - if (*endptr != 0 || (value != 1 && value != 2)) { + if (*endptr != 0 || !audio_valid_channel_count(value)) { g_set_error(error, audio_parser_quark(), 0, "Invalid channel count: %s", src); return false; -- cgit v1.2.3