@@ -43,27 +43,27 @@ TEST(snprintf, testInf) {
43
43
ASSERT_EQ (i , 3 );
44
44
ASSERT_STREQ (buf , "inf" );
45
45
46
- memset (buf , 0 , 4 );
46
+ memset (buf , '\0' , 4 );
47
47
i = snprintf (buf , sizeof (buf ), "%Lf" , 1.0L / 0.0L );
48
48
ASSERT_EQ (i , 3 );
49
49
ASSERT_STREQ (buf , "inf" );
50
50
51
- memset (buf , 0 , 4 );
51
+ memset (buf , '\0' , 4 );
52
52
i = snprintf (buf , sizeof (buf ), "%e" , 1.0 / 0.0 );
53
53
ASSERT_EQ (i , 3 );
54
54
ASSERT_STREQ (buf , "inf" );
55
55
56
- memset (buf , 0 , 4 );
56
+ memset (buf , '\0' , 4 );
57
57
i = snprintf (buf , sizeof (buf ), "%Le" , 1.0L / 0.0L );
58
58
ASSERT_EQ (i , 3 );
59
59
ASSERT_STREQ (buf , "inf" );
60
60
61
- memset (buf , 0 , 4 );
61
+ memset (buf , '\0' , 4 );
62
62
i = snprintf (buf , sizeof (buf ), "%g" , 1.0 / 0.0 );
63
63
ASSERT_EQ (i , 3 );
64
64
ASSERT_STREQ (buf , "inf" );
65
65
66
- memset (buf , 0 , 4 );
66
+ memset (buf , '\0' , 4 );
67
67
i = snprintf (buf , sizeof (buf ), "%Lg" , 1.0L / 0.0L );
68
68
ASSERT_EQ (i , 3 );
69
69
ASSERT_STREQ (buf , "inf" );
@@ -101,3 +101,87 @@ TEST(snprintf,
101
101
ASSERT_EQ (i , 10 );
102
102
ASSERT_STREQ (buf , "00000000x1" );
103
103
}
104
+
105
+ static void check_n_buffer_contents (char buf [350 ]) {
106
+ for (int i = 0 ; i < 284 ; ++ i )
107
+ ASSERT_EQ (buf [i ], ' ' );
108
+ ASSERT_STREQ (& buf [284 ], "428463" );
109
+ for (int i = 290 ; i < 350 ; ++ i )
110
+ ASSERT_EQ (buf [i ], '\0' );
111
+ }
112
+
113
+ TEST (snprintf , testNConversionSpecifier ) {
114
+ char buf [350 ] = {};
115
+
116
+ int n_res_int = -1 ;
117
+ int i = snprintf (buf , sizeof (buf ), "%286d%d%n%d" , 42 , 84 , & n_res_int , 63 );
118
+ ASSERT_EQ (i , 290 );
119
+ check_n_buffer_contents (buf );
120
+ ASSERT_EQ (n_res_int , 288 );
121
+
122
+ memset (& buf , '\0' , sizeof (buf ));
123
+ long n_res_long = -1 ;
124
+ i = snprintf (buf , sizeof (buf ), "%286ld%ld%ln%ld" , 42L , 84L , & n_res_long , 63L );
125
+ ASSERT_EQ (i , 290 );
126
+ check_n_buffer_contents (buf );
127
+ ASSERT_EQ (n_res_long , 288 );
128
+
129
+ memset (& buf , '\0' , sizeof (buf ));
130
+ long long n_res_long_long = -1 ;
131
+ i = snprintf (buf , sizeof (buf ), "%286lld%lld%lln%lld" , 42LL , 84LL ,
132
+ & n_res_long_long , 63LL );
133
+ ASSERT_EQ (i , 290 );
134
+ check_n_buffer_contents (buf );
135
+ ASSERT_EQ (n_res_long_long , 288 );
136
+
137
+ ASSERT_EQ (sizeof (short ), 2 );
138
+ ASSERT_EQ (sizeof (int ), 4 );
139
+ memset (& buf , '\0' , sizeof (buf ));
140
+ short n_res_short = -1 ;
141
+ i = snprintf (buf , sizeof (buf ), "%286hd%hd%hn%hd" , (42 | 0xFFFF0000 ),
142
+ (84 | 0xFFFF0000 ), & n_res_short , (63 | 0xFFFF0000 ));
143
+ ASSERT_EQ (i , 290 );
144
+ check_n_buffer_contents (buf );
145
+ ASSERT_EQ (n_res_short , 288 );
146
+
147
+ ASSERT_EQ (sizeof (unsigned char ), 1 );
148
+ memset (& buf , '\0' , sizeof (buf ));
149
+ signed char n_res_char = -1 ;
150
+ i = snprintf (buf , sizeof (buf ), "%286hhd%hhd%hhn%hhd" , (42 | 0xFFFFFF00 ),
151
+ (84 | 0xFFFFFF00 ), & n_res_char , (63 | 0xFFFFFF00 ));
152
+ ASSERT_EQ (i , 290 );
153
+ check_n_buffer_contents (buf );
154
+ ASSERT_EQ (n_res_char , (signed char )288 );
155
+
156
+ memset (& buf , '\0' , sizeof (buf ));
157
+ ssize_t n_res_size_t = -1 ;
158
+ i = snprintf (buf , sizeof (buf ), "%286zd%zd%zn%zd" , (ssize_t )42 , (ssize_t )84 ,
159
+ & n_res_size_t , (ssize_t )63 );
160
+ ASSERT_EQ (i , 290 );
161
+ check_n_buffer_contents (buf );
162
+ ASSERT_EQ (n_res_size_t , 288 );
163
+
164
+ memset (& buf , '\0' , sizeof (buf ));
165
+ intmax_t n_res_intmax_t = -1 ;
166
+ i = snprintf (buf , sizeof (buf ), "%286jd%jd%jn%jd" , (intmax_t )42 , (intmax_t )84 ,
167
+ & n_res_intmax_t , (intmax_t )63 );
168
+ ASSERT_EQ (i , 290 );
169
+ check_n_buffer_contents (buf );
170
+ ASSERT_EQ (n_res_intmax_t , 288 );
171
+
172
+ memset (& buf , '\0' , sizeof (buf ));
173
+ int128_t n_res_int128_t = -1 ;
174
+ i = snprintf (buf , sizeof (buf ), "%286jjd%jjd%jjn%jjd" , (int128_t )42 ,
175
+ (int128_t )84 , & n_res_int128_t , (int128_t )63 );
176
+ ASSERT_EQ (i , 290 );
177
+ check_n_buffer_contents (buf );
178
+ ASSERT_EQ (n_res_int128_t , 288 );
179
+
180
+ memset (& buf , '\0' , sizeof (buf ));
181
+ ptrdiff_t n_res_ptrdiff_t = -1 ;
182
+ i = snprintf (buf , sizeof (buf ), "%286td%td%tn%td" , (ptrdiff_t )42 ,
183
+ (ptrdiff_t )84 , & n_res_ptrdiff_t , (ptrdiff_t )63 );
184
+ ASSERT_EQ (i , 290 );
185
+ check_n_buffer_contents (buf );
186
+ ASSERT_EQ (n_res_ptrdiff_t , 288 );
187
+ }
0 commit comments