| @@ -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 <assert.h> | |||
| #include <errno.h> | |||
| #include <math.h> | |||
| #include <signal.h> | |||
| @@ -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); | |||