blob: 32936d221d15b9588b32d72a3d9f599d867b16b5 [file] [log] [blame]
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -08001/* 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
17void
18dprint( 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
28void
29dprintn( const char* format, ... )
30{
31 va_list args;
32 va_start( args, format );
33 vfprintf( stdout, format, args );
34 va_end( args );
35}
36
37void
38dprintnv( const char* format, va_list args )
39{
40 vfprintf( stdout, format, args );
41}
42
43
44void
45dwarning( 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
56void
57derror( 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 **/
73static int stdio_disable_count;
74static int stdio_save_out_fd;
75static int stdio_save_err_fd;
76
77#ifdef _WIN32
78extern void
79stdio_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
95extern void
96stdio_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
110extern void
111stdio_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
127extern void
128stdio_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