Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libossaudio ossaudio(3): Reduce code duplication for que...



details:   https://anonhg.NetBSD.org/src/rev/00f3e83ce90a
branches:  trunk
changeset: 956642:00f3e83ce90a
user:      nia <nia%NetBSD.org@localhost>
date:      Tue Nov 03 09:46:00 2020 +0000

description:
ossaudio(3): Reduce code duplication for querying capabilities

diffstat:

 lib/libossaudio/ossaudio.c |  57 ++++++++++++++++++++++++---------------------
 1 files changed, 30 insertions(+), 27 deletions(-)

diffs (124 lines):

diff -r 28b34927cf9d -r 00f3e83ce90a lib/libossaudio/ossaudio.c
--- a/lib/libossaudio/ossaudio.c        Tue Nov 03 09:36:12 2020 +0000
+++ b/lib/libossaudio/ossaudio.c        Tue Nov 03 09:46:00 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ossaudio.c,v 1.61 2020/11/03 09:36:12 nia Exp $        */
+/*     $NetBSD: ossaudio.c,v 1.62 2020/11/03 09:46:00 nia Exp $        */
 
 /*-
  * Copyright (c) 1997, 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: ossaudio.c,v 1.61 2020/11/03 09:36:12 nia Exp $");
+__RCSID("$NetBSD: ossaudio.c,v 1.62 2020/11/03 09:46:00 nia Exp $");
 
 /*
  * This is an Open Sound System compatibility layer, which provides
@@ -71,6 +71,8 @@
 static int getmixercount(void);
 static int getmixercontrolcount(int);
 
+static int getcaps(int, int *);
+
 static int getvol(u_int, u_char);
 static void setvol(int, int, bool);
 
@@ -126,7 +128,7 @@
        static int totalperrors = 0;
        static int totalrerrors = 0;
        oss_count_t osscount;
-       int idat, idata;
+       int idat;
        int retval;
 
        idat = 0;
@@ -520,19 +522,9 @@
                        return retval;
                break;
        case SNDCTL_DSP_GETCAPS:
-               retval = ioctl(fd, AUDIO_GETPROPS, &idata);
+               retval = getcaps(fd, (int *)argp);
                if (retval < 0)
                        return retval;
-               idat = DSP_CAP_TRIGGER;
-               if (idata & AUDIO_PROP_FULLDUPLEX)
-                       idat |= DSP_CAP_DUPLEX;
-               if (idata & AUDIO_PROP_MMAP)
-                       idat |= DSP_CAP_MMAP;
-               if (idata & AUDIO_PROP_CAPTURE)
-                       idat |= DSP_CAP_INPUT;
-               if (idata & AUDIO_PROP_PLAYBACK)
-                       idat |= DSP_CAP_OUTPUT;
-               INTARG = idat;
                break;
        case SNDCTL_DSP_SETTRIGGER:
                retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
@@ -1018,7 +1010,6 @@
        int newfd = -1, tmperrno;
        int i, noffs;
        int retval;
-       int props, caps;
 
        /*
         * Note: it is difficult to translate the NetBSD concept of a "set"
@@ -1075,27 +1066,16 @@
                        errno = tmperrno;
                        return retval;
                }
-               retval = ioctl(newfd, AUDIO_GETPROPS, &props);
-               if (retval < 0) {
+               if (getcaps(newfd, &tmpai->caps) < 0) {
                        tmperrno = errno;
                        close(newfd);
                        errno = tmperrno;
                        return retval;
                }
-               caps = DSP_CAP_TRIGGER;
-               if (props & AUDIO_PROP_FULLDUPLEX)
-                       caps |= DSP_CAP_DUPLEX;
-               if (props & AUDIO_PROP_MMAP)
-                       caps |= DSP_CAP_MMAP;
-               if (props & AUDIO_PROP_CAPTURE)
-                       caps |= PCM_CAP_INPUT;
-               if (props & AUDIO_PROP_PLAYBACK)
-                       caps |= PCM_CAP_OUTPUT;
                snprintf(tmpai->name, sizeof(tmpai->name),
                    "%s %s", dev.name, dev.version);
                tmpai->busy = 0;
                tmpai->pid = -1;
-               tmpai->caps = caps;
                ioctl(newfd, SNDCTL_DSP_GETFMTS, &tmpai->iformats);
                tmpai->oformats = tmpai->iformats;
                tmpai->magic = -1; /* reserved for "internal use" */
@@ -1576,6 +1556,29 @@
 }
 
 static int
+getcaps(int fd, int *out)
+{
+       int props, caps;
+
+       if (ioctl(fd, AUDIO_GETPROPS, &props) < 0)
+               return -1;
+
+       caps = DSP_CAP_TRIGGER;
+
+       if (props & AUDIO_PROP_FULLDUPLEX)
+               caps |= DSP_CAP_DUPLEX;
+       if (props & AUDIO_PROP_MMAP)
+               caps |= DSP_CAP_MMAP;
+       if (props & AUDIO_PROP_CAPTURE)
+               caps |= PCM_CAP_INPUT;
+       if (props & AUDIO_PROP_PLAYBACK)
+               caps |= PCM_CAP_OUTPUT;
+
+       *out = caps;
+       return 0;
+}
+
+static int
 getaudiocount(void)
 {
        char devname[32];



Home | Main Index | Thread Index | Old Index