[Spice-devel] [vdagent-win 1/2] vdagent: file-xfer: fix compilation warnings when building with Visual Studio

Uri Lublin uril at redhat.com
Sun Mar 9 10:05:05 PDT 2014


This patch reverts some of the changes made in commit
4b9e9b1d28ea7eaec44ff73e2f91c4064986b12a
---
 vdagent/file_xfer.cpp | 23 +++++++++++++++++------
 vdagent/file_xfer.h   |  2 +-
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
index e402eb2..cdb5654 100644
--- a/vdagent/file_xfer.cpp
+++ b/vdagent/file_xfer.cpp
@@ -18,7 +18,18 @@
 #include <shlobj.h>
 #define __STDC_FORMAT_MACROS
 #define __USE_MINGW_ANSI_STDIO 1
+
+// compiler specific definitions
+#ifdef _MSC_VER // compiling with Visual Studio
+#define PRIu64 "I64u"
+#else // compiling with mingw
 #include <inttypes.h>
+#define sscanf_s sscanf
+//#define sprintf_s snprintf /* apprently sprintf_s is implemented in mingw */
+#define strcpy_s(d, n, s) strncpy(d, s, n)
+#define strcat_s(d, n, s) strncat(d, s, n)
+#endif // compiler specific definitions
+
 #include <stdio.h>
 #include "file_xfer.h"
 #include "as_user.h"
@@ -75,12 +86,12 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage* start,
     }

     if (strlen(file_path) + strlen(file_name) + 1 >= MAX_PATH) {
-        vd_printf("error: file too long %s\%s", file_path, file_name);
+        vd_printf("error: file too long %s\\%s", file_path, file_name);
         return;
     }

-    strcat(file_path, "\\");
-    strcat(file_path, file_name);
+    strcat_s(file_path, MAX_PATH, "\\");
+    strcat_s(file_path, MAX_PATH, file_name);
     handle = CreateFileA(file_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
     if (handle == INVALID_HANDLE_VALUE) {
         vd_printf("failed creating %s %lu", file_path, GetLastError());
@@ -188,10 +199,10 @@ bool FileXfer::g_key_get_string(char* data, const char* group, const char* key,
     char *group_pos, *key_pos, *next_group_pos, *start, *end;
     unsigned len;

-    snprintf(group_pfx, sizeof(group_pfx), "[%s]", group);
+    sprintf_s(group_pfx, sizeof(group_pfx), "[%s]", group);
     if (!(group_pos = strstr((char*)data, group_pfx))) return false;

-    snprintf(key_pfx, sizeof(key_pfx), "\n%s=", key);
+    sprintf_s(key_pfx, sizeof(key_pfx), "\n%s=", key);
     if (!(key_pos = strstr(group_pos, key_pfx))) return false;

     next_group_pos = strstr(group_pos + strlen(group_pfx), "[");
@@ -216,5 +227,5 @@ bool FileXfer::g_key_get_uint64(char* data, const char* group, const char* key,

     if (!g_key_get_string(data, group, key, str, sizeof(str)))
         return false;
-    return !!sscanf(str, "%" PRIu64, value);
+    return !!sscanf_s(str, "%" PRIu64, value);
 }
diff --git a/vdagent/file_xfer.h b/vdagent/file_xfer.h
index b506f59..2ffc320 100644
--- a/vdagent/file_xfer.h
+++ b/vdagent/file_xfer.h
@@ -25,7 +25,7 @@ typedef struct ALIGN_VC FileXferTask {
     FileXferTask(HANDLE _handle, uint64_t _size, char* _name):
     handle(_handle), size(_size), pos(0) {
         // FIXME: should raise an error if name is too long..
-        strncpy(name, _name, sizeof(name) - 1);
+        strcpy_s(name, sizeof(name) -1, _name);
     }
     HANDLE handle;
     uint64_t size;
-- 
1.8.5.3



More information about the Spice-devel mailing list