diff --git a/example-clients/midi_latency_test.c b/example-clients/midi_latency_test.c index 1806946f..6937b677 100644 --- a/example-clients/midi_latency_test.c +++ b/example-clients/midi_latency_test.c @@ -47,6 +47,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * implementations for semaphores and command-line argument handling. */ +#include #include #include #include @@ -84,6 +85,8 @@ const char *SOURCE_SHUTDOWN = "handle_shutdown"; const char *SOURCE_SIGNAL_SEMAPHORE = "signal_semaphore"; const char *SOURCE_WAIT_SEMAPHORE = "wait_semaphore"; +char *alias1; +char *alias2; jack_client_t *client; semaphore_t connect_semaphore; volatile int connections_established; @@ -517,9 +520,31 @@ update_connection(jack_port_t *remote_port, int connected, return current_port; } if (target_name) { - if (strcmp(target_name, jack_port_name(remote_port))) { + char *aliases[2]; + if (! strcmp(target_name, jack_port_name(remote_port))) { + return remote_port; + } + aliases[0] = alias1; + aliases[1] = alias2; + switch (jack_port_get_aliases(remote_port, aliases)) { + case -1: + /* Sigh ... */ + die("jack_port_get_aliases", "Failed to get port aliases"); + case 2: + if (! strcmp(target_name, alias2)) { + return remote_port; + } + /* Fallthrough on purpose */ + case 1: + if (! strcmp(target_name, alias1)) { + return remote_port; + } + /* Fallthrough on purpose */ + case 0: return NULL; } + /* This shouldn't happen. */ + assert(0); } return remote_port; } @@ -537,7 +562,6 @@ update_connection(jack_port_t *remote_port, int connected, connected, then we take the first port name in the array and use it as our remote port. It's a dumb implementation. */ current_port = jack_port_by_name(client, port_names[0]); - jack_free(port_names); if (current_port == NULL) { /* Sigh */ @@ -597,6 +621,7 @@ main(int argc, char **argv) {"timeout", 1, NULL, 't'} }; size_t name_arg_count; + size_t name_size; char *option_string = "hm:s:t:"; int show_usage = 0; connections_established = 0; @@ -656,11 +681,24 @@ main(int argc, char **argv) output_usage(); return EXIT_FAILURE; } + name_size = jack_port_name_size(); + alias1 = malloc(name_size * sizeof(char)); + if (alias1 == NULL) { + error_message = strerror(errno); + error_source = "malloc"; + goto show_error; + } + alias2 = malloc(name_size * sizeof(char)); + if (alias2 == NULL) { + error_message = strerror(errno); + error_source = "malloc"; + goto free_alias1; + } latency_values = malloc(sizeof(jack_nframes_t) * samples); if (latency_values == NULL) { error_message = strerror(errno); error_source = "malloc"; - goto show_error; + goto free_alias2; } latency_time_values = malloc(sizeof(jack_time_t) * samples); if (latency_time_values == NULL) { @@ -917,6 +955,10 @@ main(int argc, char **argv) free(latency_time_values); free_latency_values: free(latency_values); + free_alias2: + free(alias2); + free_alias1: + free(alias1); if (error_message != NULL) { show_error: output_error(error_source, error_message);