mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de> Fix 64bit printing for MSVC builds (#119292, Hans Breuer): * configure.in (HAVE_INT64_AND_I64): Define for MSVC to include support for printing __int64 with format %I64 in the gnulib printf wrappers. * glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64 and TYPE_UINT64. * glib/gnulib/printf-args.h (struct argument): Add a_int64 and a_uint64 members. * glib/gnulib/printf-args.c (printf_fetchargs): Support TYPE_INT64 and TYPE_UINT64. * glib/gnulib/printf-parse.c (printf_parse): Parse I64 format modifier and map formats to TYPE_INT64. * glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with format modifier I64. * glib/gnulib/README: Document the __int64 support.
This commit is contained in:
parent
3f1a49ea41
commit
76433d5365
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Sun Nov 2 01:47:31 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
|
||||||
|
|
||||||
|
* configure.in (HAVE_INT64_AND_I64): Define for MSVC to
|
||||||
|
include support for printing __int64 with format %I64 in
|
||||||
|
the gnulib printf wrappers.
|
||||||
|
* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64
|
||||||
|
and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-args.h (struct argument): Add a_int64 and
|
||||||
|
a_uint64 members.
|
||||||
|
* glib/gnulib/printf-args.c (printf_fetchargs): Support
|
||||||
|
TYPE_INT64 and TYPE_UINT64.
|
||||||
|
* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
|
||||||
|
modifier and map formats to TYPE_INT64.
|
||||||
|
* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
|
||||||
|
format modifier I64.
|
||||||
|
* glib/gnulib/README: Document the __int64 support.
|
||||||
|
|
||||||
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
Sat Nov 1 08:45:38 2003 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c (g_main_context_iterate): Set the
|
* glib/gmain.c (g_main_context_iterate): Set the
|
||||||
|
@ -537,6 +537,7 @@ elif test x$ac_cv_sizeof___int64 = x8; then
|
|||||||
glib_cv_long_long_format=I64
|
glib_cv_long_long_format=I64
|
||||||
AC_MSG_RESULT(%${glib_cv_long_long_format}u)
|
AC_MSG_RESULT(%${glib_cv_long_long_format}u)
|
||||||
AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
|
AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
|
||||||
|
AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing __int64 with format I64])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl long doubles were not used, and a portability problem
|
dnl long doubles were not used, and a portability problem
|
||||||
|
@ -13,9 +13,15 @@ be found at:
|
|||||||
|
|
||||||
http://www.gnu.org/software/gnulib/
|
http://www.gnu.org/software/gnulib/
|
||||||
|
|
||||||
They have been modified to include g-gnulib.h. vasnprintf.c has also
|
All files have been modified to include g-gnulib.h.
|
||||||
been modified to include support for long long printing if the system
|
|
||||||
printf doesn't. This code is protected by #ifndef HAVE_LON_LONG_FORMAT.
|
vasnprintf.c has also been modified to include support for long long
|
||||||
|
printing if the system printf doesn't. This code is protected by
|
||||||
|
#ifndef HAVE_LONG_LONG_FORMAT.
|
||||||
|
|
||||||
|
Code has been added to printf-args.[ch], printf-parse.c and vasnprintf.c
|
||||||
|
to support printing of __int64 values with the I64 format modifier. This
|
||||||
|
is protected by #ifdef HAVE_INT64_AND_I64.
|
||||||
|
|
||||||
The files
|
The files
|
||||||
|
|
||||||
@ -31,7 +37,7 @@ g_malloc and make sure that snprintf is only used if it implements
|
|||||||
C99 return value semantics.
|
C99 return value semantics.
|
||||||
|
|
||||||
Matthias Clasen
|
Matthias Clasen
|
||||||
July 28, 2003
|
November 1, 2003
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +68,14 @@ printf_fetchargs (va_list args, arguments *a)
|
|||||||
case TYPE_ULONGLONGINT:
|
case TYPE_ULONGLONGINT:
|
||||||
ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
|
ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
case TYPE_INT64:
|
||||||
|
ap->a.a_int64 = va_arg (args, __int64);
|
||||||
|
break;
|
||||||
|
case TYPE_UINT64:
|
||||||
|
ap->a.a_uint64 = va_arg (args, unsigned __int64);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case TYPE_DOUBLE:
|
case TYPE_DOUBLE:
|
||||||
ap->a.a_double = va_arg (args, double);
|
ap->a.a_double = va_arg (args, double);
|
||||||
|
@ -48,6 +48,10 @@ typedef enum
|
|||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
TYPE_LONGLONGINT,
|
TYPE_LONGLONGINT,
|
||||||
TYPE_ULONGLONGINT,
|
TYPE_ULONGLONGINT,
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
TYPE_INT64,
|
||||||
|
TYPE_UINT64,
|
||||||
#endif
|
#endif
|
||||||
TYPE_DOUBLE,
|
TYPE_DOUBLE,
|
||||||
#ifdef HAVE_LONG_DOUBLE
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
@ -88,6 +92,10 @@ typedef struct
|
|||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
long long int a_longlongint;
|
long long int a_longlongint;
|
||||||
unsigned long long int a_ulonglongint;
|
unsigned long long int a_ulonglongint;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
__int64 a_int64;
|
||||||
|
unsigned __int64 a_uint64;
|
||||||
#endif
|
#endif
|
||||||
float a_float;
|
float a_float;
|
||||||
double a_double;
|
double a_double;
|
||||||
|
@ -286,6 +286,15 @@ printf_parse (const char *format, char_directives *d, arguments *a)
|
|||||||
flags += 8;
|
flags += 8;
|
||||||
cp++;
|
cp++;
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
else if (cp[0] == 'I' &&
|
||||||
|
cp[1] == '6' &&
|
||||||
|
cp[2] == '4')
|
||||||
|
{
|
||||||
|
flags = 64;
|
||||||
|
cp += 3;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef HAVE_INTMAX_T
|
#ifdef HAVE_INTMAX_T
|
||||||
else if (*cp == 'j')
|
else if (*cp == 'j')
|
||||||
{
|
{
|
||||||
@ -342,6 +351,11 @@ printf_parse (const char *format, char_directives *d, arguments *a)
|
|||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 'd': case 'i':
|
case 'd': case 'i':
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
if (flags == 64)
|
||||||
|
type = TYPE_INT64;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
if (flags >= 16 || (flags & 4))
|
if (flags >= 16 || (flags & 4))
|
||||||
type = TYPE_LONGLONGINT;
|
type = TYPE_LONGLONGINT;
|
||||||
@ -357,6 +371,11 @@ printf_parse (const char *format, char_directives *d, arguments *a)
|
|||||||
type = TYPE_INT;
|
type = TYPE_INT;
|
||||||
break;
|
break;
|
||||||
case 'o': case 'u': case 'x': case 'X':
|
case 'o': case 'u': case 'x': case 'X':
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
if (flags == 64)
|
||||||
|
type = TYPE_UINT64;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
if (flags >= 16 || (flags & 4))
|
if (flags >= 16 || (flags & 4))
|
||||||
type = TYPE_ULONGLONGINT;
|
type = TYPE_ULONGLONGINT;
|
||||||
|
@ -615,6 +615,14 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
|
|||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
case TYPE_INT64:
|
||||||
|
case TYPE_UINT64:
|
||||||
|
*p++ = 'I';
|
||||||
|
*p++ = '6';
|
||||||
|
*p++ = '4';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
case TYPE_LONGLONGINT:
|
case TYPE_LONGLONGINT:
|
||||||
case TYPE_ULONGLONGINT:
|
case TYPE_ULONGLONGINT:
|
||||||
@ -769,6 +777,20 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
|
|||||||
SNPRINTF_BUF (arg);
|
SNPRINTF_BUF (arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifdef HAVE_INT64_AND_I64
|
||||||
|
case TYPE_INT64:
|
||||||
|
{
|
||||||
|
__int64 arg = a.arg[dp->arg_index].a.a_int64;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_UINT64:
|
||||||
|
{
|
||||||
|
unsigned __int64 arg = a.arg[dp->arg_index].a.a_uint64;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
#ifndef HAVE_LONG_LONG_FORMAT
|
#ifndef HAVE_LONG_LONG_FORMAT
|
||||||
case TYPE_LONGLONGINT:
|
case TYPE_LONGLONGINT:
|
||||||
|
Loading…
Reference in New Issue
Block a user