mirror of https://github.com/ericonr/sndio.git
unbreak midi
This commit is contained in:
parent
787883791f
commit
369b2b9faf
|
@ -31,7 +31,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "sndio.h"
|
|
||||||
|
|
||||||
#include "aucat.h"
|
#include "aucat.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -288,7 +287,7 @@ bad_gen:
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
aucat_connect_tcp(struct aucat *hdl, char *host, char *unit, unsigned mode)
|
aucat_connect_tcp(struct aucat *hdl, char *host, char *unit, int isaudio)
|
||||||
{
|
{
|
||||||
int s, error;
|
int s, error;
|
||||||
struct addrinfo *ailist, *ai, aihints;
|
struct addrinfo *ailist, *ai, aihints;
|
||||||
|
@ -299,14 +298,10 @@ aucat_connect_tcp(struct aucat *hdl, char *host, char *unit, unsigned mode)
|
||||||
DPRINTF("%s: bad unit number\n", unit);
|
DPRINTF("%s: bad unit number\n", unit);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (mode & (MIO_IN | MIO_OUT)) {
|
if (isaudio)
|
||||||
port += MIDICAT_PORT;
|
|
||||||
} else if (mode & (SIO_PLAY | SIO_REC)) {
|
|
||||||
port += AUCAT_PORT;
|
port += AUCAT_PORT;
|
||||||
} else {
|
else
|
||||||
DPRINTF("aucat_connect_tcp: unknown mode\n");
|
port += MIDICAT_PORT;
|
||||||
abort();
|
|
||||||
}
|
|
||||||
snprintf(serv, sizeof(serv), "%u", port);
|
snprintf(serv, sizeof(serv), "%u", port);
|
||||||
memset(&aihints, 0, sizeof(struct addrinfo));
|
memset(&aihints, 0, sizeof(struct addrinfo));
|
||||||
aihints.ai_socktype = SOCK_STREAM;
|
aihints.ai_socktype = SOCK_STREAM;
|
||||||
|
@ -326,6 +321,7 @@ aucat_connect_tcp(struct aucat *hdl, char *host, char *unit, unsigned mode)
|
||||||
if (connect(s, ai->ai_addr, ai->ai_addrlen) < 0) {
|
if (connect(s, ai->ai_addr, ai->ai_addrlen) < 0) {
|
||||||
DPERROR("connect");
|
DPERROR("connect");
|
||||||
close(s);
|
close(s);
|
||||||
|
s = -1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -338,7 +334,7 @@ aucat_connect_tcp(struct aucat *hdl, char *host, char *unit, unsigned mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
aucat_connect_un(struct aucat *hdl, char *unit, unsigned mode)
|
aucat_connect_un(struct aucat *hdl, char *unit, int isaudio)
|
||||||
{
|
{
|
||||||
struct sockaddr_un ca;
|
struct sockaddr_un ca;
|
||||||
socklen_t len = sizeof(struct sockaddr_un);
|
socklen_t len = sizeof(struct sockaddr_un);
|
||||||
|
@ -346,15 +342,8 @@ aucat_connect_un(struct aucat *hdl, char *unit, unsigned mode)
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
if (mode & (MIO_IN | MIO_OUT)) {
|
|
||||||
sock = MIDICAT_PATH;
|
|
||||||
} else if (mode & (SIO_PLAY | SIO_REC)) {
|
|
||||||
sock = AUCAT_PATH;
|
|
||||||
} else {
|
|
||||||
DPRINTF("aucat_connect_un: unknown mode\n");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
uid = geteuid();
|
uid = geteuid();
|
||||||
|
sock = isaudio ? AUCAT_PATH : MIDICAT_PATH;
|
||||||
snprintf(ca.sun_path, sizeof(ca.sun_path),
|
snprintf(ca.sun_path, sizeof(ca.sun_path),
|
||||||
"/tmp/aucat-%u/%s%s", uid, sock, unit);
|
"/tmp/aucat-%u/%s%s", uid, sock, unit);
|
||||||
ca.sun_family = AF_UNIX;
|
ca.sun_family = AF_UNIX;
|
||||||
|
@ -364,14 +353,14 @@ aucat_connect_un(struct aucat *hdl, char *unit, unsigned mode)
|
||||||
while (connect(s, (struct sockaddr *)&ca, len) < 0) {
|
while (connect(s, (struct sockaddr *)&ca, len) < 0) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
DPERROR("aucat_init: connect");
|
DPERROR(ca.sun_path);
|
||||||
/* try shared server */
|
/* try shared server */
|
||||||
snprintf(ca.sun_path, sizeof(ca.sun_path),
|
snprintf(ca.sun_path, sizeof(ca.sun_path),
|
||||||
"/tmp/aucat/%s%s", sock, unit);
|
"/tmp/aucat/%s%s", sock, unit);
|
||||||
while (connect(s, (struct sockaddr *)&ca, len) < 0) {
|
while (connect(s, (struct sockaddr *)&ca, len) < 0) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
DPERROR("aucat_init: connect");
|
DPERROR(ca.sun_path);
|
||||||
close(s);
|
close(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -382,7 +371,7 @@ aucat_connect_un(struct aucat *hdl, char *unit, unsigned mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
aucat_open(struct aucat *hdl, const char *str, char *sock, unsigned mode, int nbio)
|
aucat_open(struct aucat *hdl, const char *str, unsigned mode, int isaudio)
|
||||||
{
|
{
|
||||||
extern char *__progname;
|
extern char *__progname;
|
||||||
int eof, hashost;
|
int eof, hashost;
|
||||||
|
@ -416,10 +405,10 @@ aucat_open(struct aucat *hdl, const char *str, char *sock, unsigned mode, int nb
|
||||||
}
|
}
|
||||||
DPRINTF("aucat_init: trying %s -> %s.%s\n", str, unit, opt);
|
DPRINTF("aucat_init: trying %s -> %s.%s\n", str, unit, opt);
|
||||||
if (hashost) {
|
if (hashost) {
|
||||||
if (!aucat_connect_tcp(hdl, host, unit, mode))
|
if (!aucat_connect_tcp(hdl, host, unit, isaudio))
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
if (!aucat_connect_un(hdl, unit, mode))
|
if (!aucat_connect_un(hdl, unit, isaudio))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (fcntl(hdl->fd, F_SETFD, FD_CLOEXEC) < 0) {
|
if (fcntl(hdl->fd, F_SETFD, FD_CLOEXEC) < 0) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ int aucat_rmsg(struct aucat *, int *);
|
||||||
int aucat_wmsg(struct aucat *, int *);
|
int aucat_wmsg(struct aucat *, int *);
|
||||||
size_t aucat_rdata(struct aucat *, void *, size_t, int *);
|
size_t aucat_rdata(struct aucat *, void *, size_t, int *);
|
||||||
size_t aucat_wdata(struct aucat *, const void *, size_t, unsigned, int *);
|
size_t aucat_wdata(struct aucat *, const void *, size_t, unsigned, int *);
|
||||||
int aucat_open(struct aucat *, const char *, char *, unsigned, int);
|
int aucat_open(struct aucat *, const char *, unsigned, int);
|
||||||
void aucat_close(struct aucat *, int);
|
void aucat_close(struct aucat *, int);
|
||||||
int aucat_pollfd(struct aucat *, struct pollfd *, int);
|
int aucat_pollfd(struct aucat *, struct pollfd *, int);
|
||||||
int aucat_revents(struct aucat *, struct pollfd *);
|
int aucat_revents(struct aucat *, struct pollfd *);
|
||||||
|
|
|
@ -55,14 +55,14 @@ static struct mio_ops mio_aucat_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mio_hdl *
|
static struct mio_hdl *
|
||||||
mio_xxx_open(const char *str, char *sock, unsigned mode, int nbio)
|
mio_xxx_open(const char *str, unsigned mode, int nbio, int isaudio)
|
||||||
{
|
{
|
||||||
struct mio_aucat_hdl *hdl;
|
struct mio_aucat_hdl *hdl;
|
||||||
|
|
||||||
hdl = malloc(sizeof(struct mio_aucat_hdl));
|
hdl = malloc(sizeof(struct mio_aucat_hdl));
|
||||||
if (hdl == NULL)
|
if (hdl == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!aucat_open(&hdl->aucat, str, sock, mode, nbio))
|
if (!aucat_open(&hdl->aucat, str, mode, isaudio))
|
||||||
goto bad;
|
goto bad;
|
||||||
mio_create(&hdl->mio, &mio_aucat_ops, mode, nbio);
|
mio_create(&hdl->mio, &mio_aucat_ops, mode, nbio);
|
||||||
if (!aucat_setfl(&hdl->aucat, nbio, &hdl->mio.eof))
|
if (!aucat_setfl(&hdl->aucat, nbio, &hdl->mio.eof))
|
||||||
|
@ -76,13 +76,13 @@ bad:
|
||||||
struct mio_hdl *
|
struct mio_hdl *
|
||||||
mio_midithru_open(const char *str, unsigned mode, int nbio)
|
mio_midithru_open(const char *str, unsigned mode, int nbio)
|
||||||
{
|
{
|
||||||
return mio_xxx_open(str, MIDICAT_PATH, mode, nbio);
|
return mio_xxx_open(str, mode, nbio, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct mio_hdl *
|
struct mio_hdl *
|
||||||
mio_aucat_open(const char *str, unsigned mode, int nbio)
|
mio_aucat_open(const char *str, unsigned mode, int nbio)
|
||||||
{
|
{
|
||||||
return mio_xxx_open(str, AUCAT_PATH, mode, nbio);
|
return mio_xxx_open(str, mode, nbio, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -149,7 +149,7 @@ sio_aucat_open(const char *str, unsigned mode, int nbio)
|
||||||
hdl = malloc(sizeof(struct sio_aucat_hdl));
|
hdl = malloc(sizeof(struct sio_aucat_hdl));
|
||||||
if (hdl == NULL)
|
if (hdl == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!aucat_open(&hdl->aucat, str, AUCAT_PATH, mode, nbio)) {
|
if (!aucat_open(&hdl->aucat, str, mode, 1)) {
|
||||||
free(hdl);
|
free(hdl);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue