summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/control/eld.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/control/eld.c b/src/control/eld.c
index 1e161eb1..9be9605f 100644
--- a/src/control/eld.c
+++ b/src/control/eld.c
@@ -74,8 +74,13 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
if (cinfo.count < 20 || cinfo.count > 256)
return -EIO;
l = eld[4] & 0x1f;
- if (l == 0 || l > 16 || 20 + l > cinfo.count)
- return -EIO;
+ if (l == 0)
+ /* no monitor name detected */
+ goto __present;
+ if (l > 16 || 20 + l > cinfo.count) {
+ SNDERR("ELD decode failed, using old HDMI output names\n");
+ return 0;
+ }
s = alloca(l + 1);
s[l] = '\0';
/* sanitize */
@@ -90,7 +95,12 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
s[l] = c;
}
}
- if (valid > 3)
+ if (valid > 3) {
snd_strlcpy((char *)info->name, s, sizeof(info->name));
+ } else {
+__present:
+ strncat((char *)info->name, " *", sizeof(info->name) - 1);
+ ((char *)info->name)[sizeof(info->name)-1] = '\0';
+ }
return 0;
}