diff --git a/fabrics.c b/fabrics.c index 6f60cee894..537c7bb16c 100644 --- a/fabrics.c +++ b/fabrics.c @@ -575,7 +575,7 @@ int fabrics_discovery(const char *desc, int argc, char **argv, bool connect) out_free: if (dump_config) - nvme_dump_config(ctx, NULL); + nvme_dump_config(ctx, STDOUT_FILENO); return ret; } @@ -678,7 +678,7 @@ int fabrics_connect(const char *desc, int argc, char **argv) } if (dump_config) - nvme_dump_config(ctx, NULL); + nvme_dump_config(ctx, STDERR_FILENO); return 0; } @@ -951,11 +951,16 @@ int fabrics_config(const char *desc, int argc, char **argv) } } - if (update_config) - nvme_dump_config(ctx, config_file); + if (update_config) { + _cleanup_fd_ int fd = -1; + + fd = open(config_file, O_RDONLY, 0); + if (fd != -1) + nvme_dump_config(ctx, fd); + } if (dump_config) - nvme_dump_config(ctx, NULL); + nvme_dump_config(ctx, STDOUT_FILENO); return 0; } diff --git a/libnvme/libnvme/nvme.i b/libnvme/libnvme/nvme.i index a8851edf86..e658ebafa0 100644 --- a/libnvme/libnvme/nvme.i +++ b/libnvme/libnvme/nvme.i @@ -529,7 +529,7 @@ struct nvme_ns { nvme_refresh_topology($self); } void dump_config() { - nvme_dump_config($self, NULL); + nvme_dump_config($self, STDERR_FILENO); } } diff --git a/libnvme/src/nvme/fabrics.c b/libnvme/src/nvme/fabrics.c index 6db178b396..05c81a847d 100644 --- a/libnvme/src/nvme/fabrics.c +++ b/libnvme/src/nvme/fabrics.c @@ -2765,25 +2765,26 @@ void nvmf_nbft_free(struct nvme_global_ctx *ctx, struct nbft_file_entry *head) } } -static bool validate_uri(struct nbft_info_discovery *dd, +static bool validate_uri(struct nvme_global_ctx *ctx, + struct nbft_info_discovery *dd, struct nvme_fabrics_uri *uri) { if (!uri) { - fprintf(stderr, - "Discovery Descriptor %d: failed to parse URI %s\n", - dd->index, dd->uri); + nvme_msg(ctx, LOG_ERR, + "Discovery Descriptor %d: failed to parse URI %s\n", + dd->index, dd->uri); return false; } if (strcmp(uri->scheme, "nvme") != 0) { - fprintf(stderr, - "Discovery Descriptor %d: unsupported scheme '%s'\n", - dd->index, uri->scheme); + nvme_msg(ctx, LOG_ERR, + "Discovery Descriptor %d: unsupported scheme '%s'\n", + dd->index, uri->scheme); return false; } if (!uri->protocol || strcmp(uri->protocol, "tcp") != 0) { - fprintf(stderr, - "Discovery Descriptor %d: unsupported transport '%s'\n", - dd->index, uri->protocol); + nvme_msg(ctx, LOG_ERR, + "Discovery Descriptor %d: unsupported transport '%s'\n", + dd->index, uri->protocol); return false; } @@ -3110,7 +3111,7 @@ int nvmf_discovery_nbft(struct nvme_global_ctx *ctx, ret = nvme_parse_uri((*dd)->uri, &uri); if (ret) continue; - if (!validate_uri(*dd, uri)) + if (!validate_uri(ctx, *dd, uri)) continue; host_traddr = NULL; diff --git a/libnvme/src/nvme/json.c b/libnvme/src/nvme/json.c index 41f7862b25..3121cece8c 100644 --- a/libnvme/src/nvme/json.c +++ b/libnvme/src/nvme/json.c @@ -386,7 +386,7 @@ static void json_update_subsys(struct json_object *subsys_array, } } -int json_update_config(struct nvme_global_ctx *ctx, const char *config_file) +int json_update_config(struct nvme_global_ctx *ctx, int fd) { nvme_host_t h; struct json_object *json_root, *host_obj; @@ -432,18 +432,12 @@ int json_update_config(struct nvme_global_ctx *ctx, const char *config_file) json_object_put(host_obj); } } - if (!config_file) { - ret = json_object_to_fd(1, json_root, - JSON_C_TO_STRING_PRETTY | - JSON_C_TO_STRING_NOSLASHESCAPE); - printf("\n"); - } else - ret = json_object_to_file_ext(config_file, json_root, - JSON_C_TO_STRING_PRETTY | - JSON_C_TO_STRING_NOSLASHESCAPE); + ret = json_object_to_fd(fd, json_root, + JSON_C_TO_STRING_PRETTY | + JSON_C_TO_STRING_NOSLASHESCAPE); + write(fd, "\n", 1); if (ret < 0) { - nvme_msg(ctx, LOG_ERR, "Failed to write to %s, %s\n", - config_file ? "stdout" : config_file, + nvme_msg(ctx, LOG_ERR, "Failed to write JSON config file: %s\n", json_util_get_last_err()); ret = -EIO; } diff --git a/libnvme/src/nvme/private.h b/libnvme/src/nvme/private.h index 1e4036bcfa..cff50fb896 100644 --- a/libnvme/src/nvme/private.h +++ b/libnvme/src/nvme/private.h @@ -391,7 +391,7 @@ int nvme_set_attr(const char *dir, const char *attr, const char *value); int json_read_config(struct nvme_global_ctx *ctx, const char *config_file); -int json_update_config(struct nvme_global_ctx *ctx, const char *config_file); +int json_update_config(struct nvme_global_ctx *ctx, int fd); int json_dump_tree(struct nvme_global_ctx *ctx); diff --git a/libnvme/src/nvme/tree.c b/libnvme/src/nvme/tree.c index 671ccd37be..bdcbb20b56 100644 --- a/libnvme/src/nvme/tree.c +++ b/libnvme/src/nvme/tree.c @@ -406,9 +406,9 @@ int nvme_scan(const char *config_file, struct nvme_global_ctx **ctxp) return ret; } -int nvme_dump_config(struct nvme_global_ctx *ctx, const char *config_file) +int nvme_dump_config(struct nvme_global_ctx *ctx, int fd) { - return json_update_config(ctx, config_file); + return json_update_config(ctx, fd); } int nvme_dump_tree(struct nvme_global_ctx *ctx) diff --git a/libnvme/src/nvme/tree.h b/libnvme/src/nvme/tree.h index 0d5bc27878..01ad5e3008 100644 --- a/libnvme/src/nvme/tree.h +++ b/libnvme/src/nvme/tree.h @@ -1398,15 +1398,14 @@ void nvme_refresh_topology(struct nvme_global_ctx *ctx); /** * nvme_dump_config() - Print the JSON configuration * @ctx: &struct nvme_global_ctx object - * @config_file: JSON configuration file. + * @fd: File descriptor to write the JSON configuration. * - * Prints the current contents of the JSON configuration - * file to the config_file. If connfig_file is not provided it prints - * to stdout. + * Writes the current contents of the JSON configuration + * to the file descriptor fd. * * Return: 0 on success, or negative error code otherwise. */ -int nvme_dump_config(struct nvme_global_ctx *ctx, const char *config_file); +int nvme_dump_config(struct nvme_global_ctx *ctx, int fd); /** * nvme_dump_tree() - Dump internal object tree diff --git a/libnvme/test/config/config-dump.c b/libnvme/test/config/config-dump.c index d9e8d27032..1adc3348a1 100644 --- a/libnvme/test/config/config-dump.c +++ b/libnvme/test/config/config-dump.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -29,7 +30,7 @@ static bool config_dump(const char *file) if (err) goto out; - err = nvme_dump_config(ctx, NULL); + err = nvme_dump_config(ctx, STDOUT_FILENO); if (err) goto out; diff --git a/libnvme/test/config/psk-json.c b/libnvme/test/config/psk-json.c index 65801397c6..35fc67ee4a 100644 --- a/libnvme/test/config/psk-json.c +++ b/libnvme/test/config/psk-json.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -69,7 +70,7 @@ static bool psk_json_test(char *file) if (!import_export_key(ctx, c)) goto out; - err = nvme_dump_config(ctx, NULL); + err = nvme_dump_config(ctx, STDOUT_FILENO); if (err) goto out;