Home | History | Annotate | Download | only in utils
      1 /* Copyright (C) 2007-2008 The Android Open Source Project
      2 **
      3 ** This software is licensed under the terms of the GNU General Public
      4 ** License version 2, as published by the Free Software Foundation, and
      5 ** may be copied, distributed, and modified under those terms.
      6 **
      7 ** This program is distributed in the hope that it will be useful,
      8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 ** GNU General Public License for more details.
     11 */
     12 #include "android/utils/debug.h"
     13 #include <stdio.h>
     14 #include <unistd.h>
     15 #include <fcntl.h>
     16 
     17 void
     18 dprint( const char*  format,  ... )
     19 {
     20     va_list  args;
     21     va_start( args, format );
     22     fprintf( stdout, "emulator: ");
     23     vfprintf( stdout, format, args );
     24     fprintf( stdout, "\n" );
     25     va_end( args );
     26 }
     27 
     28 void
     29 dprintn( const char*  format, ... )
     30 {
     31     va_list  args;
     32     va_start( args, format );
     33     vfprintf( stdout, format, args );
     34     va_end( args );
     35 }
     36 
     37 void
     38 dprintnv( const char*  format, va_list args )
     39 {
     40     vfprintf( stdout, format, args );
     41 }
     42 
     43 
     44 void
     45 dwarning( const char*  format, ... )
     46 {
     47     va_list  args;
     48     va_start( args, format );
     49     dprintn( "emulator: WARNING: " );
     50     dprintnv( format, args );
     51     dprintn( "\n" );
     52     va_end( args );
     53 }
     54 
     55 
     56 void
     57 derror( const char*  format, ... )
     58 {
     59     va_list  args;
     60     va_start( args, format );
     61     dprintn( "emulator: ERROR: " );
     62     dprintnv( format, args );
     63     dprintn( "\n" );
     64     va_end( args );
     65 }
     66 
     67 /** STDOUT/STDERR REDIRECTION
     68  **
     69  ** allows you to shut temporarily shutdown stdout/stderr
     70  ** this is useful to get rid of debug messages from ALSA and esd
     71  ** on Linux.
     72  **/
     73 static int    stdio_disable_count;
     74 static int    stdio_save_out_fd;
     75 static int    stdio_save_err_fd;
     76 
     77 #ifdef _WIN32
     78 extern void
     79 stdio_disable( void )
     80 {
     81     if (++stdio_disable_count == 1) {
     82         int  null_fd, out_fd, err_fd;
     83         fflush(stdout);
     84         out_fd = _fileno(stdout);
     85         err_fd = _fileno(stderr);
     86         stdio_save_out_fd = _dup(out_fd);
     87         stdio_save_err_fd = _dup(err_fd);
     88         null_fd = _open( "NUL", _O_WRONLY );
     89         _dup2(null_fd, out_fd);
     90         _dup2(null_fd, err_fd);
     91         close(null_fd);
     92     }
     93 }
     94 
     95 extern void
     96 stdio_enable( void )
     97 {
     98     if (--stdio_disable_count == 0) {
     99         int  out_fd, err_fd;
    100         fflush(stdout);
    101         out_fd = _fileno(stdout);
    102         err_fd = _fileno(stderr);
    103         _dup2(stdio_save_out_fd, out_fd);
    104         _dup2(stdio_save_err_fd, err_fd);
    105         _close(stdio_save_out_fd);
    106         _close(stdio_save_err_fd);
    107     }
    108 }
    109 #else
    110 extern void
    111 stdio_disable( void )
    112 {
    113     if (++stdio_disable_count == 1) {
    114         int  null_fd, out_fd, err_fd;
    115         fflush(stdout);
    116         out_fd = fileno(stdout);
    117         err_fd = fileno(stderr);
    118         stdio_save_out_fd = dup(out_fd);
    119         stdio_save_err_fd = dup(err_fd);
    120         null_fd = open( "/dev/null", O_WRONLY );
    121         dup2(null_fd, out_fd);
    122         dup2(null_fd, err_fd);
    123         close(null_fd);
    124     }
    125 }
    126 
    127 extern void
    128 stdio_enable( void )
    129 {
    130     if (--stdio_disable_count == 0) {
    131         int  out_fd, err_fd;
    132         fflush(stdout);
    133         out_fd = fileno(stdout);
    134         err_fd = fileno(stderr);
    135         dup2(stdio_save_out_fd, out_fd);
    136         dup2(stdio_save_err_fd, err_fd);
    137         close(stdio_save_out_fd);
    138         close(stdio_save_err_fd);
    139     }
    140 }
    141 #endif
    142