diff options
author | Alin Gabriel Serdean <aserdean@ovn.org> | 2018-03-12 15:17:42 +0200 |
---|---|---|
committer | Alin Gabriel Serdean <aserdean@ovn.org> | 2018-03-15 02:07:49 +0200 |
commit | cb8cbbbe97b56401c399fa261b9670eb1698bf14 (patch) | |
tree | 26acbeb3ee85d59ad3b7dc6a964c1fca4418bb44 /ovsdb/ovsdb-client.c | |
parent | efde188622aea5c2137e931f4a446c511676ba32 (diff) | |
download | openvswitch-cb8cbbbe97b56401c399fa261b9670eb1698bf14.tar.gz |
ovsdb-client: Set binary mode when doing backup/restore
Add some needed consistency on Windows for STD_IN/OUT file descriptors
when doing backup and restore.
Reported-at:https://mail.openvswitch.org/pipermail/ovs-dev/2018-January/343518.html
Suggested-by: Ben Pfaff <blp@ovn.org>
Co-authored-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'ovsdb/ovsdb-client.c')
-rw-r--r-- | ovsdb/ovsdb-client.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 222bd6ca8..3dfe543a3 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -18,6 +18,7 @@ #include <ctype.h> #include <errno.h> +#include <fcntl.h> #include <getopt.h> #include <limits.h> #include <signal.h> @@ -1476,6 +1477,20 @@ print_and_free_log_record(struct json *record) } static void +set_binary_mode(FILE *stream OVS_UNUSED) +{ +#ifdef _WIN32 + fflush(stream); + /* On Windows set binary mode on the file descriptor to avoid + * translation (i.e. CRLF line endings). */ + if (_setmode(_fileno(stream), O_BINARY) == -1) { + ovs_fatal(errno, "could not set binary mode on fd %d", + _fileno(stream)); + } +#endif +} + +static void do_backup(struct jsonrpc *rpc, const char *database, int argc OVS_UNUSED, char *argv[] OVS_UNUSED) { @@ -1483,6 +1498,7 @@ do_backup(struct jsonrpc *rpc, const char *database, ovs_fatal(0, "not writing backup to a terminal; " "please redirect stdout to a file"); } + set_binary_mode(stdout); /* Get schema. */ struct ovsdb_schema *schema = fetch_schema(rpc, database); @@ -1599,6 +1615,7 @@ do_restore(struct jsonrpc *rpc, const char *database, ovs_fatal(0, "not reading backup from a terminal; " "please redirect stdin from a file"); } + set_binary_mode(stdin); struct ovsdb *backup; check_ovsdb_error(ovsdb_file_open("/dev/stdin", true, &backup, NULL)); |