/* Copyright 2007 Rene Rivera Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) */ #include "jam.h" #include "output.h" #include "newstr.h" #include #define bjam_out (stdout) #define bjam_err (stderr) static void out_ ( char const * data, FILE * io ) { while ( *data ) { size_t len = strcspn(data,"\r"); data += fwrite(data,1,len,io); if ( *data == '\r' ) ++data; } } void out_action ( char const * action, char const * target, char const * command, char const * out_data, char const * err_data, int exit_reason ) { /* Print out the action+target line, if the action is quite the action * should be null. */ if ( action ) { fprintf( bjam_out, "%s %s\n", action, target ); } /* Print out the command executed if given -d+2. */ if ( DEBUG_EXEC ) { fputs( command, bjam_out ); fputc( '\n', bjam_out ); } /* Print out the command executed to the command stream. */ if ( globs.cmdout ) { fputs( command, globs.cmdout ); } switch ( exit_reason ) { case EXIT_OK: break; case EXIT_FAIL: break; case EXIT_TIMEOUT: { /* Process expired, make user aware with explicit message. */ if ( action ) { /* But only output for non-quietly actions. */ fprintf( bjam_out, "%ld second time limit exceeded\n", globs.timeout ); } break; } default: break; } /* Print out the command output, if requested, or if the program failed. */ if ( action || exit_reason != EXIT_OK) { /* But only output for non-quietly actions. */ if ( ( 0 != out_data ) && ( ( globs.pipe_action & 1 /* STDOUT_FILENO */ ) || ( globs.pipe_action == 0 ) ) ) { out_( out_data, bjam_out ); } if ( ( 0 != err_data ) && ( globs.pipe_action & 2 /* STDERR_FILENO */ ) ) { out_( err_data, bjam_err ); } } fflush( bjam_out ); fflush( bjam_err ); fflush( globs.cmdout ); } char * outf_int( int value ) { char buffer[50]; sprintf( buffer, "%i", value ); return newstr( buffer ); } char * outf_double( double value ) { char buffer[50]; sprintf( buffer, "%f", value ); return newstr( buffer ); } char * outf_time( time_t value ) { char buffer[50]; strftime( buffer, 49, "%Y-%m-%d %H:%M:%SZ", gmtime( &value ) ); return newstr( buffer ); }