File tree Expand file tree Collapse file tree 1 file changed +16
-4
lines changed
Expand file tree Collapse file tree 1 file changed +16
-4
lines changed Original file line number Diff line number Diff line change 99void vreportf (const char * prefix , const char * err , va_list params )
1010{
1111 char msg [4096 ];
12- char * p ;
12+ char * p , * pend = msg + sizeof (msg );
13+ size_t prefix_len = strlen (prefix );
1314
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 ++ ) {
1625 if (iscntrl (* p ) && * p != '\t' && * p != '\n' )
1726 * p = '?' ;
1827 }
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 );
2032}
2133
2234static NORETURN void usage_builtin (const char * err , va_list params )
You can’t perform that action at this time.
0 commit comments