diff options
| author | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-21 03:06:17 +0200 | 
|---|---|---|
| committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-21 03:29:36 +0200 | 
| commit | aeb1012997acabdd280557487d006a73c29cd5eb (patch) | |
| tree | d9c7c9613062665e0f40675a0243fbf6aa62f496 | |
| parent | d18224cc657abb18fbaad2bddd3a3c9bbe937ae1 (diff) | |
| download | ponymap-aeb1012997acabdd280557487d006a73c29cd5eb.tar.gz ponymap-aeb1012997acabdd280557487d006a73c29cd5eb.tar.xz ponymap-aeb1012997acabdd280557487d006a73c29cd5eb.zip | |
Group the output properly
Somehow I must have forgotten about transports at some point.
| -rw-r--r-- | ponymap.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| @@ -1299,11 +1299,12 @@ target_dump_json (struct target *self, struct target_dump_data *data)  	json_object_set_new (o, "services", services);  	struct service *last_service = NULL; +	struct transport *last_transport = NULL;  	json_t *service, *ports;  	for (size_t i = 0; i < data->results_len; i++)  	{  		struct unit *u = data->results[i]; -		if (u->service != last_service) +		if (u->service != last_service || u->transport != last_transport)  		{  			service = json_object ();  			ports = json_array (); @@ -1316,6 +1317,7 @@ target_dump_json (struct target *self, struct target_dump_data *data)  			json_object_set_new (service, "ports", ports);  			last_service = u->service; +			last_transport = u->transport;  		}  		json_t *port = json_object (); @@ -1346,11 +1348,12 @@ target_dump_terminal (struct target *self, struct target_dump_data *data)  	root->bold = true;  	struct service *last_service = NULL; +	struct transport *last_transport = NULL;  	struct node *service, **s_tail = &root->children, *port, **p_tail;  	for (size_t i = 0; i < data->results_len; i++)  	{  		struct unit *u = data->results[i]; -		if (u->service != last_service) +		if (u->service != last_service || u->transport != last_transport)  		{  			*s_tail = service = node_new (xstrdup_printf ("%s (%s)",  				u->service->name, u->transport->name)); @@ -1358,6 +1361,7 @@ target_dump_terminal (struct target *self, struct target_dump_data *data)  			p_tail = &service->children;  			last_service = u->service; +			last_transport = u->transport;  		}  		port = *p_tail = node_new (xstrdup_printf ("port %" PRIu16, u->port)); @@ -1379,10 +1383,12 @@ target_dump_terminal (struct target *self, struct target_dump_data *data)  }  static int -unit_cmp_by_service (const void *ax, const void *bx) +unit_cmp_by_group (const void *ax, const void *bx)  { -	const struct unit **a = (void *) ax, **b = (void *) bx; -	return strcmp ((*a)->service->name, (*b)->service->name); +	const struct unit **ay = (void *) ax, **by = (void *) bx; +	const struct unit *a = *ay, *b = *by; +	int x = strcmp (a->service->name, b->service->name); +	return x ? x : strcmp (a->transport->name, b->transport->name);  }  static void @@ -1403,7 +1409,7 @@ target_dump_results (struct target *self)  		sorted[--len] = iter;  	// Sort them by service name so that they can be grouped -	qsort (sorted, N_ELEMENTS (sorted), sizeof *sorted, unit_cmp_by_service); +	qsort (sorted, N_ELEMENTS (sorted), sizeof *sorted, unit_cmp_by_group);  	if (ctx->json_results)  		target_dump_json (self, &data); | 
