From 8b23a6c7e1aee255004dd19098d4c2462b61b849 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 3 Mar 2009 19:30:32 -0800 Subject: auto import from //depot/cupcake/@135843 --- android/utils/debug.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 android/utils/debug.c (limited to 'android/utils/debug.c') diff --git a/android/utils/debug.c b/android/utils/debug.c new file mode 100644 index 0000000..32936d2 --- /dev/null +++ b/android/utils/debug.c @@ -0,0 +1,141 @@ +/* Copyright (C) 2007-2008 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +*/ +#include "android/utils/debug.h" +#include +#include +#include + +void +dprint( const char* format, ... ) +{ + va_list args; + va_start( args, format ); + fprintf( stdout, "emulator: "); + vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + va_end( args ); +} + +void +dprintn( const char* format, ... ) +{ + va_list args; + va_start( args, format ); + vfprintf( stdout, format, args ); + va_end( args ); +} + +void +dprintnv( const char* format, va_list args ) +{ + vfprintf( stdout, format, args ); +} + + +void +dwarning( const char* format, ... ) +{ + va_list args; + va_start( args, format ); + dprintn( "emulator: WARNING: " ); + dprintnv( format, args ); + dprintn( "\n" ); + va_end( args ); +} + + +void +derror( const char* format, ... ) +{ + va_list args; + va_start( args, format ); + dprintn( "emulator: ERROR: " ); + dprintnv( format, args ); + dprintn( "\n" ); + va_end( args ); +} + +/** STDOUT/STDERR REDIRECTION + ** + ** allows you to shut temporarily shutdown stdout/stderr + ** this is useful to get rid of debug messages from ALSA and esd + ** on Linux. + **/ +static int stdio_disable_count; +static int stdio_save_out_fd; +static int stdio_save_err_fd; + +#ifdef _WIN32 +extern void +stdio_disable( void ) +{ + if (++stdio_disable_count == 1) { + int null_fd, out_fd, err_fd; + fflush(stdout); + out_fd = _fileno(stdout); + err_fd = _fileno(stderr); + stdio_save_out_fd = _dup(out_fd); + stdio_save_err_fd = _dup(err_fd); + null_fd = _open( "NUL", _O_WRONLY ); + _dup2(null_fd, out_fd); + _dup2(null_fd, err_fd); + close(null_fd); + } +} + +extern void +stdio_enable( void ) +{ + if (--stdio_disable_count == 0) { + int out_fd, err_fd; + fflush(stdout); + out_fd = _fileno(stdout); + err_fd = _fileno(stderr); + _dup2(stdio_save_out_fd, out_fd); + _dup2(stdio_save_err_fd, err_fd); + _close(stdio_save_out_fd); + _close(stdio_save_err_fd); + } +} +#else +extern void +stdio_disable( void ) +{ + if (++stdio_disable_count == 1) { + int null_fd, out_fd, err_fd; + fflush(stdout); + out_fd = fileno(stdout); + err_fd = fileno(stderr); + stdio_save_out_fd = dup(out_fd); + stdio_save_err_fd = dup(err_fd); + null_fd = open( "/dev/null", O_WRONLY ); + dup2(null_fd, out_fd); + dup2(null_fd, err_fd); + close(null_fd); + } +} + +extern void +stdio_enable( void ) +{ + if (--stdio_disable_count == 0) { + int out_fd, err_fd; + fflush(stdout); + out_fd = fileno(stdout); + err_fd = fileno(stderr); + dup2(stdio_save_out_fd, out_fd); + dup2(stdio_save_err_fd, err_fd); + close(stdio_save_out_fd); + close(stdio_save_err_fd); + } +} +#endif -- cgit v1.1