[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