Restore type checking in calc_thread_status()
[fio.git] / client.c
index 8d7c03316513bdd2fa9a9dbea0576e968b9c7c7a..e0047af06a3e97f6bdd57caeb4b3ebbd823956cd 100644 (file)
--- a/client.c
+++ b/client.c
@@ -59,6 +59,7 @@ struct group_run_stats client_gs;
 int sum_stat_clients;
 
 static int sum_stat_nr;
+static struct buf_output allclients;
 static struct json_object *root = NULL;
 static struct json_object *job_opt_object = NULL;
 static struct json_array *clients_array = NULL;
@@ -519,7 +520,7 @@ static void probe_client(struct fio_client *client)
 
        sname = server_name(client, buf, sizeof(buf));
        memset(pdu.server, 0, sizeof(pdu.server));
-       strncpy((char *) pdu.server, sname, sizeof(pdu.server) - 1);
+       snprintf((char *) pdu.server, sizeof(pdu.server), "%s", sname);
 
        fio_net_send_cmd(client->fd, FIO_NET_CMD_PROBE, &pdu, sizeof(pdu), &tag, &client->cmd_list);
 }
@@ -573,7 +574,8 @@ static int fio_client_connect_sock(struct fio_client *client)
 
        memset(addr, 0, sizeof(*addr));
        addr->sun_family = AF_UNIX;
-       strncpy(addr->sun_path, client->hostname, sizeof(addr->sun_path) - 1);
+       snprintf(addr->sun_path, sizeof(addr->sun_path), "%s",
+                client->hostname);
 
        fd = socket(AF_UNIX, SOCK_STREAM, 0);
        if (fd < 0) {
@@ -1103,7 +1105,7 @@ static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd)
 
        if (++sum_stat_nr == sum_stat_clients) {
                strcpy(client_ts.name, "All clients");
-               tsobj = show_thread_status(&client_ts, &client_gs, NULL, &client->buf);
+               tsobj = show_thread_status(&client_ts, &client_gs, NULL, &allclients);
                if (tsobj) {
                        json_object_add_client_info(tsobj, client);
                        json_array_add_value_object(clients_array, tsobj);
@@ -1218,12 +1220,15 @@ static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd)
                json_array_add_disk_util(&du->dus, &du->agg, du_array);
                duobj = json_array_last_value_object(du_array);
                json_object_add_client_info(duobj, client);
-       } else if (output_format & FIO_OUTPUT_TERSE)
-               print_disk_util(&du->dus, &du->agg, 1, &client->buf);
-       else if (output_format & FIO_OUTPUT_NORMAL) {
+       }
+       if (output_format & FIO_OUTPUT_NORMAL) {
                __log_buf(&client->buf, "\nDisk stats (read/write):\n");
                print_disk_util(&du->dus, &du->agg, 0, &client->buf);
        }
+       if (output_format & FIO_OUTPUT_TERSE && terse_version >= 3) {
+               print_disk_util(&du->dus, &du->agg, 1, &client->buf);
+               __log_buf(&client->buf, "\n");
+       }
 }
 
 static void convert_jobs_eta(struct jobs_eta *je)
@@ -2129,6 +2134,9 @@ int fio_handle_clients(struct client_ops *ops)
                }
        }
 
+       log_info_buf(allclients.buf, allclients.buflen);
+       buf_output_free(&allclients);
+
        fio_client_json_fini();
 
        free(pfds);