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 <b...@ovn.org>
Co-authored-by: Ben Pfaff <b...@ovn.org>
Signed-off-by: Ben Pfaff <b...@ovn.org>
Signed-off-by: Alin Gabriel Serdean <aserd...@ovn.org>
---
 v3: Incorporate comments suggested by Ben.
 v2: Fix copy paste error.
---
 ovsdb/ovsdb-client.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c
index 222bd6ca8..2aaec0648 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>
@@ -1475,6 +1476,19 @@ print_and_free_log_record(struct json *record)
     json_destroy(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 +1497,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 +1614,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));
-- 
2.16.1.windows.1

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to