[Spice-devel] [PATCH v2] Fix swprintf_s call under MingW
Victor Toso
lists at victortoso.com
Wed Aug 10 09:43:33 UTC 2016
Hi,
On Wed, Aug 10, 2016 at 10:19:03AM +0100, Frediano Ziglio wrote:
> For some reason this call does not behave correctly.
> This was causing vdservice to fail to run the agent if compiled
> with MingW.
> Provide a proper swprintf_s replacement.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Tested on windows xp and windows 7, looks good.
Acked-by: Victor Toso <victortoso at redhat.com>
> ---
> common/vdcommon.cpp | 16 ++++++++++++++++
> common/vdcommon.h | 8 ++++++--
> 2 files changed, 22 insertions(+), 2 deletions(-)
>
> Changes from v1:
> - do not use swprintf_s using old msvcrt as not available
> under Windows XP but provide a replacement function.
>
> diff --git a/common/vdcommon.cpp b/common/vdcommon.cpp
> index 4f80a2c..f5311e3 100644
> --- a/common/vdcommon.cpp
> +++ b/common/vdcommon.cpp
> @@ -15,6 +15,8 @@
> along with this program. If not, see <http://www.gnu.org/licenses/>.
> */
>
> +#include <stdarg.h>
> +
> #include "vdcommon.h"
>
> int supported_system_version()
> @@ -76,3 +78,17 @@ errno_t vdagent_strcpy_s(char *strDestination,
> return 0;
> }
> #endif
> +
> +#ifndef HAVE_SWPRINTF_S
> +int vdagent_swprintf_s(wchar_t *buf, size_t len, const wchar_t *format, ...)
> +{
> + va_list ap;
> + va_start(ap, format);
> + int res = _vsnwprintf(buf, len, format, ap);
> + va_end(ap);
> + if ((res < 0 || (unsigned) res >= len) && len > 0) {
> + buf[0] = 0;
> + }
> + return res;
> +}
> +#endif
> diff --git a/common/vdcommon.h b/common/vdcommon.h
> index 93bb673..c5f6e93 100644
> --- a/common/vdcommon.h
> +++ b/common/vdcommon.h
> @@ -62,8 +62,6 @@ typedef CRITICAL_SECTION mutex_t;
> * those functions are not required to be in that dll on the guest.
> */
> #ifdef OLDMSVCRT
> -#define swprintf_s(buf, sz, format...) swprintf(buf, format)
> -
> #ifndef _ftime_s
> #define _ftime_s(timeb) _ftime(timeb)
> #endif
> @@ -72,6 +70,7 @@ typedef CRITICAL_SECTION mutex_t;
> #ifdef _MSC_VER // compiling with Visual Studio
> #define HAVE_STRCAT_S 1
> #define HAVE_STRCPY_S 1
> +#define HAVE_SWPRINTF_S 1
> #endif
>
> #ifdef HAVE_STRCAT_S
> @@ -90,6 +89,11 @@ errno_t vdagent_strcpy_s(char *strDestination,
> const char *strSource);
> #endif
>
> +#ifndef HAVE_SWPRINTF_S
> +int vdagent_swprintf_s(wchar_t *buf, size_t len, const wchar_t *format, ...);
> +#define swprintf_s vdagent_swprintf_s
> +#endif
> +
> #ifdef _MSC_VER // compiling with Visual Studio
> #define snprintf sprintf_s
> #define sscanf sscanf_s
> --
> 2.7.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list