Added more open modes (O_APPEND)..

This commit is contained in:
Jaroslav Kysela 1999-12-05 21:12:24 +00:00
parent 2f68297615
commit 863412f63e
2 changed files with 21 additions and 48 deletions

View file

@ -6,8 +6,11 @@
****************************************************************************/ ****************************************************************************/
#define SND_RAWMIDI_OPEN_OUTPUT (O_WRONLY) #define SND_RAWMIDI_OPEN_OUTPUT (O_WRONLY)
#define SND_RAWMIDI_OPEN_OUTPUT_APPEND (O_WRONLY|O_APPEND|O_NONBLOCK)
#define SND_RAWMIDI_OPEN_INPUT (O_RDONLY) #define SND_RAWMIDI_OPEN_INPUT (O_RDONLY)
#define SND_RAWMIDI_OPEN_DUPLEX (O_RDWR) #define SND_RAWMIDI_OPEN_DUPLEX (O_RDWR)
#define SND_RAWMIDI_OPEN_DUPLEX_APPEND (O_RDWR|O_APPEND|O_NONBLOCK)
#define SND_RAWMIDI_OPEN_NONBLOCK (O_NONBLOCK)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

View file

@ -35,6 +35,7 @@ struct snd_rawmidi {
int card; int card;
int device; int device;
int fd; int fd;
int mode;
}; };
int snd_rawmidi_open(snd_rawmidi_t **handle, int card, int device, int mode) int snd_rawmidi_open(snd_rawmidi_t **handle, int card, int device, int mode)
@ -69,16 +70,15 @@ int snd_rawmidi_open(snd_rawmidi_t **handle, int card, int device, int mode)
rmidi->card = card; rmidi->card = card;
rmidi->device = device; rmidi->device = device;
rmidi->fd = fd; rmidi->fd = fd;
rmidi->mode = mode;
*handle = rmidi; *handle = rmidi;
return 0; return 0;
} }
int snd_rawmidi_close(snd_rawmidi_t *handle) int snd_rawmidi_close(snd_rawmidi_t *rmidi)
{ {
snd_rawmidi_t *rmidi;
int res; int res;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
res = close(rmidi->fd) < 0 ? -errno : 0; res = close(rmidi->fd) < 0 ? -errno : 0;
@ -86,24 +86,22 @@ int snd_rawmidi_close(snd_rawmidi_t *handle)
return res; return res;
} }
int snd_rawmidi_file_descriptor(snd_rawmidi_t *handle) int snd_rawmidi_file_descriptor(snd_rawmidi_t *rmidi)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
return rmidi->fd; return rmidi->fd;
} }
int snd_rawmidi_block_mode(snd_rawmidi_t *handle, int enable) int snd_rawmidi_block_mode(snd_rawmidi_t *rmidi, int enable)
{ {
snd_rawmidi_t *rmidi;
long flags; long flags;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
if (rmidi->mode == SND_RAWMIDI_OPEN_OUTPUT_APPEND ||
rmidi->mode == SND_RAWMIDI_OPEN_DUPLEX_APPEND)
return -EINVAL;
if ((flags = fcntl(rmidi->fd, F_GETFL)) < 0) if ((flags = fcntl(rmidi->fd, F_GETFL)) < 0)
return -errno; return -errno;
if (enable) if (enable)
@ -115,11 +113,8 @@ int snd_rawmidi_block_mode(snd_rawmidi_t *handle, int enable)
return 0; return 0;
} }
int snd_rawmidi_info(snd_rawmidi_t *handle, snd_rawmidi_info_t * info) int snd_rawmidi_info(snd_rawmidi_t *rmidi, snd_rawmidi_info_t * info)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi || !info) if (!rmidi || !info)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INFO, info) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INFO, info) < 0)
@ -127,11 +122,8 @@ int snd_rawmidi_info(snd_rawmidi_t *handle, snd_rawmidi_info_t * info)
return 0; return 0;
} }
int snd_rawmidi_output_params(snd_rawmidi_t *handle, snd_rawmidi_output_params_t * params) int snd_rawmidi_output_params(snd_rawmidi_t *rmidi, snd_rawmidi_output_params_t * params)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi || !params) if (!rmidi || !params)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_PARAMS, params) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_PARAMS, params) < 0)
@ -139,11 +131,8 @@ int snd_rawmidi_output_params(snd_rawmidi_t *handle, snd_rawmidi_output_params_t
return 0; return 0;
} }
int snd_rawmidi_input_params(snd_rawmidi_t *handle, snd_rawmidi_input_params_t * params) int snd_rawmidi_input_params(snd_rawmidi_t *rmidi, snd_rawmidi_input_params_t * params)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi || !params) if (!rmidi || !params)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_PARAMS, params) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_PARAMS, params) < 0)
@ -151,11 +140,8 @@ int snd_rawmidi_input_params(snd_rawmidi_t *handle, snd_rawmidi_input_params_t *
return 0; return 0;
} }
int snd_rawmidi_output_status(snd_rawmidi_t *handle, snd_rawmidi_output_status_t * status) int snd_rawmidi_output_status(snd_rawmidi_t *rmidi, snd_rawmidi_output_status_t * status)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi || !status) if (!rmidi || !status)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_STATUS, status) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_STATUS, status) < 0)
@ -163,11 +149,8 @@ int snd_rawmidi_output_status(snd_rawmidi_t *handle, snd_rawmidi_output_status_t
return 0; return 0;
} }
int snd_rawmidi_input_status(snd_rawmidi_t *handle, snd_rawmidi_input_status_t * status) int snd_rawmidi_input_status(snd_rawmidi_t *rmidi, snd_rawmidi_input_status_t * status)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi || !status) if (!rmidi || !status)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_STATUS, status) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_STATUS, status) < 0)
@ -175,11 +158,8 @@ int snd_rawmidi_input_status(snd_rawmidi_t *handle, snd_rawmidi_input_status_t *
return 0; return 0;
} }
int snd_rawmidi_drain_output(snd_rawmidi_t *handle) int snd_rawmidi_drain_output(snd_rawmidi_t *rmidi)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_DRAIN_OUTPUT) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_DRAIN_OUTPUT) < 0)
@ -187,11 +167,8 @@ int snd_rawmidi_drain_output(snd_rawmidi_t *handle)
return 0; return 0;
} }
int snd_rawmidi_flush_output(snd_rawmidi_t *handle) int snd_rawmidi_flush_output(snd_rawmidi_t *rmidi)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_OUTPUT) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_OUTPUT) < 0)
@ -199,11 +176,8 @@ int snd_rawmidi_flush_output(snd_rawmidi_t *handle)
return 0; return 0;
} }
int snd_rawmidi_flush_input(snd_rawmidi_t *handle) int snd_rawmidi_flush_input(snd_rawmidi_t *rmidi)
{ {
snd_rawmidi_t *rmidi;
rmidi = handle;
if (!rmidi) if (!rmidi)
return -EINVAL; return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_INPUT) < 0) if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_INPUT) < 0)
@ -211,12 +185,10 @@ int snd_rawmidi_flush_input(snd_rawmidi_t *handle)
return 0; return 0;
} }
ssize_t snd_rawmidi_write(snd_rawmidi_t *handle, const void *buffer, size_t size) ssize_t snd_rawmidi_write(snd_rawmidi_t *rmidi, const void *buffer, size_t size)
{ {
snd_rawmidi_t *rmidi;
ssize_t result; ssize_t result;
rmidi = handle;
if (!rmidi || (!buffer && size > 0) || size < 0) if (!rmidi || (!buffer && size > 0) || size < 0)
return -EINVAL; return -EINVAL;
result = write(rmidi->fd, buffer, size); result = write(rmidi->fd, buffer, size);
@ -225,12 +197,10 @@ ssize_t snd_rawmidi_write(snd_rawmidi_t *handle, const void *buffer, size_t size
return result; return result;
} }
ssize_t snd_rawmidi_read(snd_rawmidi_t *handle, void *buffer, size_t size) ssize_t snd_rawmidi_read(snd_rawmidi_t *rmidi, void *buffer, size_t size)
{ {
snd_rawmidi_t *rmidi;
ssize_t result; ssize_t result;
rmidi = handle;
if (!rmidi || (!buffer && size > 0) || size < 0) if (!rmidi || (!buffer && size > 0) || size < 0)
return -EINVAL; return -EINVAL;
result = read(rmidi->fd, buffer, size); result = read(rmidi->fd, buffer, size);