sprintf format I32d not supported by Visual C++ 6.0
---------------------------------------------------
Key: AXIS2C-1367
URL: https://issues.apache.org/jira/browse/AXIS2C-1367
Project: Axis2-C
Issue Type: Bug
Components: code generation
Affects Versions: 1.4.0, 1.4.1, 1.5.0, 1.6.0
Environment: Microsoft Windows
Visual C++ 6.0
Reporter: Eric Hsiung
The following are defined in axutil_utils_defines.h:
#if defined(WIN32)
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%I64d"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%I64u"
#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d"
#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u"
#else
#if __WORDSIZE == 64
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%ld"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%lu"
#else
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%lld"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%llu"
#endif
#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u"
#endif
Microsoft Visual C++ 6.0 does not support I32 in the format string (though it does support
I64).
sprintf(szBuf, AXIS2_PRINTF_INT32_FORMAT_SPECIFIER, 123456) yields the string "I32d".
This of course leads to invalid SOAP messages and various errors.
The fix is to use _MSC_VER to conditionally compile different format strings for VC++6 versus
later versions of VC++ (which do support I32) like this:
#if defined(WIN32)
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%I64d"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%I64u"
#if _MSC_VER > 1200
#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d"
#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u"
#else
#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u"
#endif
#else
#if __WORDSIZE == 64
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%ld"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%lu"
#else
#define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%lld"
#define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%llu"
#endif
#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d"
#define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u"
#endif
AXIS2C-1295 seems to be referring to this problem as well.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
|