diff options
author | Chris Robinson <[email protected]> | 2016-01-21 02:08:45 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-01-21 02:09:32 -0800 |
commit | 9c05a16c9a394dea90fcefc29eb2ef2be06dc4b5 (patch) | |
tree | b3cc0c79d77e6b36dca7f8f658b34691808116e6 /Alc/backends/oss.c | |
parent | bbd2876afb5265517d25e78d7dcaf7ccb494af0f (diff) |
Fix for systems that don't have strnlen
Diffstat (limited to 'Alc/backends/oss.c')
-rw-r--r-- | Alc/backends/oss.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Alc/backends/oss.c b/Alc/backends/oss.c index 1e286791..33d7750a 100644 --- a/Alc/backends/oss.c +++ b/Alc/backends/oss.c @@ -27,6 +27,7 @@ #include <fcntl.h> #include <stdlib.h> #include <stdio.h> +#include <string.h> #include <memory.h> #include <unistd.h> #include <errno.h> @@ -93,15 +94,21 @@ static void ALCossListPopulate(struct oss_device *UNUSED(playback), struct oss_d #else +#ifndef HAVE_STRNLEN +static size_t strnlen(const char *str, size_t maxlen) +{ + const char *end = memchr(str, 0, maxlen); + if(!end) return maxlen; + return end - str; +} +#endif + static void ALCossListAppend(struct oss_device *list, const char *handle, size_t hlen, const char *path, size_t plen) { struct oss_device *next; struct oss_device *last; size_t i; - if(plen == 0 || path[0] == '\0') - return; - /* skip the first item "OSS Default" */ last = list; next = list->next; @@ -173,7 +180,10 @@ static void ALCossListPopulate(struct oss_device *playback, struct oss_device *c ERR("SNDCTL_AUDIOINFO (%d) failed: %s\n", i, strerror(errno)); continue; } - if(ai.handle[0]) + if(ai.devnode[0] == '\0') + continue; + + if(ai.handle[0] != '\0') { len = strnlen(ai.handle, sizeof(ai.handle)); handle = ai.handle; |