@ -35,8 +35,6 @@
# include <stdlib.h>
# include <assert.h>
# include <xmem.h>
# ifdef HAVE_ALSA
# include <alsa/asoundlib.h>
# endif
@ -176,7 +174,9 @@ alsa_midi_open(const char *name)
{
midi_io_t * midi ;
midi = xmalloc ( sizeof ( * midi ) ) ;
if ( ! ( midi = malloc ( sizeof ( * midi ) ) ) )
return NULL ;
midi - > alsa . in = midi - > alsa . out = NULL ;
midi - > error = midi - > pos = midi - > len = midi - > status = 0 ;
@ -216,13 +216,20 @@ alsa_midi_get_ports(char ***ports, size_t *n, size_t *max)
while ( snd_ctl_rawmidi_next_device ( ctl , & device ) > = 0 & & device > = 0 ) {
snprintf ( name , sizeof ( name ) , " hw:%d,%d " , card , device ) ;
if ( * n > = * max ) {
if ( * n + 1 > = * max ) {
char * * tmp ;
if ( ! ( tmp = realloc ( * ports , * max + 10 ) ) )
goto err ;
* ports = tmp ;
* max + = 10 ;
* ports = xrealloc ( * ports , * max ) ;
}
( * ports ) [ ( * n ) + + ] = xstrdup ( name ) ;
if ( ( ( * ports ) [ * n ] = strdup ( name ) ) )
* n + = 1 ;
}
err :
snd_ctl_close ( ctl ) ;
}
}
@ -286,7 +293,9 @@ oss_midi_open(const char *name)
assert ( name ! = NULL ) ;
midi = xmalloc ( sizeof ( * midi ) ) ;
if ( ! ( midi = malloc ( sizeof ( * midi ) ) ) )
return NULL ;
midi - > oss . fd = - 1 ;
midi - > error = midi - > pos = midi - > len = midi - > status = 0 ;
@ -321,11 +330,19 @@ oss_midi_get_ports(char ***ports, size_t *n, size_t *max)
snprintf ( name , sizeof ( name ) , " /dev/%s " , namelist [ k ] - > d_name ) ;
free ( namelist [ k ] ) ;
if ( * n > = * max ) {
if ( * n + 1 > = * max ) {
char * * tmp ;
if ( ! ( tmp = realloc ( * ports , * max + 10 ) ) )
goto err ;
* max + = 10 ;
* ports = xrealloc ( * ports , * max ) ;
* ports = tmp ;
}
( * ports ) [ ( * n ) + + ] = xstrdup ( name ) ;
if ( ( ( * ports ) [ * n ] = strdup ( name ) ) )
* n + = 1 ;
err :
;
}
}
}
@ -484,11 +501,10 @@ midi_get_ports(void)
oss_midi_get_ports ( & ports , & n , & max ) ;
# endif
if ( n > = max ) {
max + = 1 ;
ports = xrealloc ( ports , max ) ;
if ( ports ) {
assert ( n < max ) ;
ports [ n ] = NULL ;
}
ports [ n + + ] = NULL ;
return ports ;
}