aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/backends/oss.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2016-01-21 02:08:45 -0800
committerChris Robinson <[email protected]>2016-01-21 02:09:32 -0800
commit9c05a16c9a394dea90fcefc29eb2ef2be06dc4b5 (patch)
treeb3cc0c79d77e6b36dca7f8f658b34691808116e6 /Alc/backends/oss.c
parentbbd2876afb5265517d25e78d7dcaf7ccb494af0f (diff)
Fix for systems that don't have strnlen
Diffstat (limited to 'Alc/backends/oss.c')
-rw-r--r--Alc/backends/oss.c18
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;