File tree 1 file changed +16
-4
lines changed 1 file changed +16
-4
lines changed Original file line number Diff line number Diff line change 9
9
void vreportf (const char * prefix , const char * err , va_list params )
10
10
{
11
11
char msg [4096 ];
12
- char * p ;
12
+ char * p , * pend = msg + sizeof (msg );
13
+ size_t prefix_len = strlen (prefix );
13
14
14
- vsnprintf (msg , sizeof (msg ), err , params );
15
- for (p = msg ; * p ; p ++ ) {
15
+ if (sizeof (msg ) <= prefix_len ) {
16
+ fprintf (stderr , "BUG!!! too long a prefix '%s'\n" , prefix );
17
+ abort ();
18
+ }
19
+ memcpy (msg , prefix , prefix_len );
20
+ p = msg + prefix_len ;
21
+ if (vsnprintf (p , pend - p , err , params ) < 0 )
22
+ * p = '\0' ; /* vsnprintf() failed, clip at prefix */
23
+
24
+ for (; p != pend - 1 && * p ; p ++ ) {
16
25
if (iscntrl (* p ) && * p != '\t' && * p != '\n' )
17
26
* p = '?' ;
18
27
}
19
- fprintf (stderr , "%s%s\n" , prefix , msg );
28
+
29
+ * (p ++ ) = '\n' ; /* we no longer need a NUL */
30
+ fflush (stderr );
31
+ write_in_full (2 , msg , p - msg );
20
32
}
21
33
22
34
static NORETURN void usage_builtin (const char * err , va_list params )
You can’t perform that action at this time.
0 commit comments