MCPcopy Create free account
hub / github.com/boostorg/build / read_descriptor

Function read_descriptor

v2/engine/execunix.c:300–346  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

298 */
299
300static int read_descriptor( int i, int s )
301{
302 int ret;
303 char buffer[ BUFSIZ ];
304
305 while ( 0 < ( ret = fread( buffer, sizeof( char ), BUFSIZ - 1,
306 cmdtab[ i ].stream[ s ] ) ) )
307 {
308 buffer[ ret ] = 0;
309 if ( !cmdtab[ i ].buffer[ s ] )
310 {
311 /* Never been allocated. */
312 if ( globs.max_buf && ret > globs.max_buf )
313 {
314 ret = globs.max_buf;
315 buffer[ ret ] = 0;
316 }
317 cmdtab[ i ].buf_size[ s ] = ret + 1;
318 cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( ret + 1 );
319 memcpy( cmdtab[ i ].buffer[ s ], buffer, ret + 1 );
320 }
321 else
322 {
323 /* Previously allocated. */
324 if ( cmdtab[ i ].buf_size[ s ] < globs.max_buf || !globs.max_buf )
325 {
326 char * tmp = cmdtab[ i ].buffer[ s ];
327 int const old_len = cmdtab[ i ].buf_size[ s ] - 1;
328 int const new_len = old_len + ret + 1;
329 cmdtab[ i ].buf_size[ s ] = new_len;
330 cmdtab[ i ].buffer[ s ] = (char*)BJAM_MALLOC_ATOMIC( new_len );
331 memcpy( cmdtab[ i ].buffer[ s ], tmp, old_len );
332 memcpy( cmdtab[ i ].buffer[ s ] + old_len, buffer, ret + 1 );
333 BJAM_FREE( tmp );
334 }
335 }
336 }
337
338 /* If buffer full, ensure last buffer char is newline so that jam log
339 * contains the command status at beginning of it own line instead of
340 * appended to end of the previous output.
341 */
342 if ( globs.max_buf && globs.max_buf <= cmdtab[ i ].buf_size[ s ] )
343 cmdtab[ i ].buffer[ s ][ cmdtab[ i ].buf_size[ s ] - 2 ] = '\n';
344
345 return feof( cmdtab[ i ].stream[ s ] );
346}
347
348
349/*

Callers 1

exec_waitFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected