The R Project SVN R

Rev

Rev 36792 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 36792 Rev 41539
Line 1... Line 1...
1
/* Decomposed printf argument list.
1
/* Decomposed printf argument list.
2
   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
2
   Copyright (C) 1999, 2002-2003, 2005-2006 Free Software Foundation, Inc.
3
 
3
 
4
   This program is free software; you can redistribute it and/or modify it
4
   This program is free software; you can redistribute it and/or modify it
5
   under the terms of the GNU Library General Public License as published
5
   under the terms of the GNU Library General Public License as published
6
   by the Free Software Foundation; either version 2, or (at your option)
6
   by the Free Software Foundation; either version 2, or (at your option)
7
   any later version.
7
   any later version.
Line 57... Line 57...
57
	ap->a.a_longint = va_arg (args, long int);
57
	ap->a.a_longint = va_arg (args, long int);
58
	break;
58
	break;
59
      case TYPE_ULONGINT:
59
      case TYPE_ULONGINT:
60
	ap->a.a_ulongint = va_arg (args, unsigned long int);
60
	ap->a.a_ulongint = va_arg (args, unsigned long int);
61
	break;
61
	break;
62
#ifdef HAVE_LONG_LONG
62
#ifdef HAVE_LONG_LONG_INT
63
      case TYPE_LONGLONGINT:
63
      case TYPE_LONGLONGINT:
64
	ap->a.a_longlongint = va_arg (args, long long int);
64
	ap->a.a_longlongint = va_arg (args, long long int);
65
	break;
65
	break;
66
      case TYPE_ULONGLONGINT:
66
      case TYPE_ULONGLONGINT:
67
	ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
67
	ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
Line 78... Line 78...
78
      case TYPE_CHAR:
78
      case TYPE_CHAR:
79
	ap->a.a_char = va_arg (args, int);
79
	ap->a.a_char = va_arg (args, int);
80
	break;
80
	break;
81
#ifdef HAVE_WINT_T
81
#ifdef HAVE_WINT_T
82
      case TYPE_WIDE_CHAR:
82
      case TYPE_WIDE_CHAR:
-
 
83
	/* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
-
 
84
	   default argument promotions", this is not the case in mingw32,
-
 
85
	   where wint_t is 'unsigned short'.  */
-
 
86
	ap->a.a_wide_char =
-
 
87
	  (sizeof (wint_t) < sizeof (int)
-
 
88
	   ? va_arg (args, int)
83
        ap->a.a_wide_char = va_arg (args, /* wint_t */ int);
89
	   : va_arg (args, wint_t));
84
	break;
90
	break;
85
#endif
91
#endif
86
      case TYPE_STRING:
92
      case TYPE_STRING:
87
	ap->a.a_string = va_arg (args, const char *);
93
	ap->a.a_string = va_arg (args, const char *);
-
 
94
	/* A null pointer is an invalid argument for "%s", but in practice
-
 
95
	   it occurs quite frequently in printf statements that produce
-
 
96
	   debug output.  Use a fallback in this case.  */
-
 
97
	if (ap->a.a_string == NULL)
-
 
98
	  ap->a.a_string = "(NULL)";
88
	break;
99
	break;
89
#ifdef HAVE_WCHAR_T
100
#ifdef HAVE_WCHAR_T
90
      case TYPE_WIDE_STRING:
101
      case TYPE_WIDE_STRING:
91
	ap->a.a_wide_string = va_arg (args, const wchar_t *);
102
	ap->a.a_wide_string = va_arg (args, const wchar_t *);
-
 
103
	/* A null pointer is an invalid argument for "%ls", but in practice
-
 
104
	   it occurs quite frequently in printf statements that produce
-
 
105
	   debug output.  Use a fallback in this case.  */
-
 
106
	if (ap->a.a_wide_string == NULL)
-
 
107
	  {
-
 
108
	    static const wchar_t wide_null_string[] =
-
 
109
	      {
-
 
110
		(wchar_t)'(',
-
 
111
		(wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
-
 
112
		(wchar_t)')',
-
 
113
		(wchar_t)0
-
 
114
	      };
-
 
115
	    ap->a.a_wide_string = wide_null_string;
-
 
116
	  }
92
	break;
117
	break;
93
#endif
118
#endif
94
      case TYPE_POINTER:
119
      case TYPE_POINTER:
95
	ap->a.a_pointer = va_arg (args, void *);
120
	ap->a.a_pointer = va_arg (args, void *);
96
	break;
121
	break;
Line 104... Line 129...
104
	ap->a.a_count_int_pointer = va_arg (args, int *);
129
	ap->a.a_count_int_pointer = va_arg (args, int *);
105
	break;
130
	break;
106
      case TYPE_COUNT_LONGINT_POINTER:
131
      case TYPE_COUNT_LONGINT_POINTER:
107
	ap->a.a_count_longint_pointer = va_arg (args, long int *);
132
	ap->a.a_count_longint_pointer = va_arg (args, long int *);
108
	break;
133
	break;
109
#ifdef HAVE_LONG_LONG
134
#ifdef HAVE_LONG_LONG_INT
110
      case TYPE_COUNT_LONGLONGINT_POINTER:
135
      case TYPE_COUNT_LONGLONGINT_POINTER:
111
	ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
136
	ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
112
	break;
137
	break;
113
#endif
138
#endif
114
      default:
139
      default: