Mercurial > mplayer.hg
annotate mp_msg.c @ 32972:fbaae7fe1a13
Fix several issues with Translate().
1. The "Unsafe!" comment has been removed, because the strings passed
to the function are strcpy'd.
2. The needless memsets (one of which with wrong size) have been removed
in favor of a sufficiently simple initialization of trbuf.
3. The array indices are unsigned now, and the manual optimization of
having strlen() outside the for loop has been removed in favor of
optimization performed by the compiler.
4. There is a check now to prevent an out-of-bounds array access.
author | ib |
---|---|
date | Tue, 08 Mar 2011 20:56:51 +0000 |
parents | 150df72e808f |
children | 389d43c448b3 |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
17 */ |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29429
diff
changeset
|
18 |
1562 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <stdarg.h> | |
17972 | 22 #include <string.h> |
1562 | 23 |
1925 | 24 #include "config.h" |
30668
46e7233f1faa
Properly declare get_term_charset() instead of forward declaring it.
diego
parents:
30429
diff
changeset
|
25 #include "osdep/getch2.h" |
1925 | 26 |
27393 | 27 #ifdef CONFIG_ICONV |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
28 #include <iconv.h> |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
29 #include <errno.h> |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
30 #endif |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
31 |
1562 | 32 #include "mp_msg.h" |
33 | |
6306
786ab42c10be
Extend maximum mp_msg message size, some translations need it or help message will be cutted.
atmos4
parents:
6048
diff
changeset
|
34 /* maximum message length of mp_msg */ |
786ab42c10be
Extend maximum mp_msg message size, some translations need it or help message will be cutted.
atmos4
parents:
6048
diff
changeset
|
35 #define MSGSIZE_MAX 3072 |
786ab42c10be
Extend maximum mp_msg message size, some translations need it or help message will be cutted.
atmos4
parents:
6048
diff
changeset
|
36 |
25962 | 37 int mp_msg_levels[MSGT_MAX]; // verbose level of this module. initialized to -2 |
17120
637a2f4ff216
Some more cola for msglevel, codec-cfg can't even call mp_msg_init or it'll
ods15
parents:
17108
diff
changeset
|
38 int mp_msg_level_all = MSGL_STATUS; |
637a2f4ff216
Some more cola for msglevel, codec-cfg can't even call mp_msg_init or it'll
ods15
parents:
17108
diff
changeset
|
39 int verbose = 0; |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
40 int mp_msg_color = 0; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
41 int mp_msg_module = 0; |
27393 | 42 #ifdef CONFIG_ICONV |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
43 char *mp_msg_charset = NULL; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
44 static char *old_charset = NULL; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
45 static iconv_t msgiconv; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
46 #endif |
1562 | 47 |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
48 const char* filename_recode(const char* filename) |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
49 { |
27393 | 50 #if !defined(CONFIG_ICONV) || !defined(MSG_CHARSET) |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
51 return filename; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
52 #else |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
53 static iconv_t inv_msgiconv = (iconv_t)(-1); |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
54 static char recoded_filename[MSGSIZE_MAX]; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
55 size_t filename_len, max_path; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
56 char* precoded; |
22006
b79ca70e0cad
Handle mp_msg_charset == NULL correctly in filename_recode.
reimar
parents:
22005
diff
changeset
|
57 if (!mp_msg_charset || |
b79ca70e0cad
Handle mp_msg_charset == NULL correctly in filename_recode.
reimar
parents:
22005
diff
changeset
|
58 !strcasecmp(mp_msg_charset, MSG_CHARSET) || |
22005
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
59 !strcasecmp(mp_msg_charset, "noconv")) |
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
60 return filename; |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
61 if (inv_msgiconv == (iconv_t)(-1)) { |
22005
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
62 inv_msgiconv = iconv_open(MSG_CHARSET, mp_msg_charset); |
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
63 if (inv_msgiconv == (iconv_t)(-1)) |
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
64 return filename; |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
65 } |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
66 filename_len = strlen(filename); |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
67 max_path = MSGSIZE_MAX - 4; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
68 precoded = recoded_filename; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
69 if (iconv(inv_msgiconv, &filename, &filename_len, |
22005
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
70 &precoded, &max_path) == (size_t)(-1) && errno == E2BIG) { |
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
71 precoded[0] = precoded[1] = precoded[2] = '.'; |
77c4ad229db6
Cosmetics: remove tabs, almost all added during last patch, from
reimar
parents:
22002
diff
changeset
|
72 precoded += 3; |
22002
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
73 } |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
74 *precoded = '\0'; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
75 return recoded_filename; |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
76 #endif |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
77 } |
ebd2d5efb11b
filename double-conversion, especially usefull for CJK users :-)
gpoirier
parents:
21653
diff
changeset
|
78 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17440
diff
changeset
|
79 void mp_msg_init(void){ |
17106
05af35012e4f
new -msglevel option, constrols msg level for every msg module
ods15
parents:
16618
diff
changeset
|
80 int i; |
17440
de9a36b1082c
MPLAYER_VERBOSE, new enviorment variable to control verbosity before init
ods15
parents:
17120
diff
changeset
|
81 char *env = getenv("MPLAYER_VERBOSE"); |
de9a36b1082c
MPLAYER_VERBOSE, new enviorment variable to control verbosity before init
ods15
parents:
17120
diff
changeset
|
82 if (env) |
de9a36b1082c
MPLAYER_VERBOSE, new enviorment variable to control verbosity before init
ods15
parents:
17120
diff
changeset
|
83 verbose = atoi(env); |
17106
05af35012e4f
new -msglevel option, constrols msg level for every msg module
ods15
parents:
16618
diff
changeset
|
84 for(i=0;i<MSGT_MAX;i++) mp_msg_levels[i] = -2; |
18237
4231482179b6
Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents:
18000
diff
changeset
|
85 mp_msg_levels[MSGT_IDENTIFY] = -1; // no -identify output by default |
27393 | 86 #ifdef CONFIG_ICONV |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
87 mp_msg_charset = getenv("MPLAYER_CHARSET"); |
22442
56a0b0f8a66e
Add code to detect and convert to console codepage on Windows.
reimar
parents:
22006
diff
changeset
|
88 if (!mp_msg_charset) |
56a0b0f8a66e
Add code to detect and convert to console codepage on Windows.
reimar
parents:
22006
diff
changeset
|
89 mp_msg_charset = get_term_charset(); |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
90 #endif |
1562 | 91 } |
92 | |
7058
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6306
diff
changeset
|
93 int mp_msg_test(int mod, int lev) |
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6306
diff
changeset
|
94 { |
17106
05af35012e4f
new -msglevel option, constrols msg level for every msg module
ods15
parents:
16618
diff
changeset
|
95 return lev <= (mp_msg_levels[mod] == -2 ? mp_msg_level_all + verbose : mp_msg_levels[mod]); |
7058
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6306
diff
changeset
|
96 } |
2e5c07262861
new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents:
6306
diff
changeset
|
97 |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
98 static void set_msg_color(FILE* stream, int lev) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
99 { |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
100 static const unsigned char v_colors[10] = {9, 1, 3, 15, 7, 2, 2, 8, 8, 8}; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
101 int c = v_colors[lev]; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
102 #ifdef MP_ANNOY_ME |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
103 /* that's only a silly color test */ |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
104 { |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
105 int c; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
106 static int flag = 1; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
107 if (flag) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
108 for(c = 0; c < 24; c++) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
109 printf("\033[%d;3%dm*** COLOR TEST %d ***\n", c>7, c&7, c); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
110 flag = 0; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
111 } |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
112 #endif |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
113 if (mp_msg_color) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
114 fprintf(stream, "\033[%d;3%dm", c >> 3, c & 7); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
115 } |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
116 |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
117 static void print_msg_module(FILE* stream, int mod) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
118 { |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
119 static const char *module_text[MSGT_MAX] = { |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
120 "GLOBAL", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
121 "CPLAYER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
122 "GPLAYER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
123 "VIDEOOUT", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
124 "AUDIOOUT", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
125 "DEMUXER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
126 "DS", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
127 "DEMUX", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
128 "HEADER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
129 "AVSYNC", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
130 "AUTOQ", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
131 "CFGPARSER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
132 "DECAUDIO", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
133 "DECVIDEO", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
134 "SEEK", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
135 "WIN32", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
136 "OPEN", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
137 "DVD", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
138 "PARSEES", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
139 "LIRC", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
140 "STREAM", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
141 "CACHE", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
142 "MENCODER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
143 "XACODEC", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
144 "TV", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
145 "OSDEP", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
146 "SPUDEC", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
147 "PLAYTREE", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
148 "INPUT", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
149 "VFILTER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
150 "OSD", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
151 "NETWORK", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
152 "CPUDETECT", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
153 "CODECCFG", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
154 "SWS", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
155 "VOBSUB", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
156 "SUBREADER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
157 "AFILTER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
158 "NETST", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
159 "MUXER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
160 "OSDMENU", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
161 "IDENTIFY", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
162 "RADIO", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
163 "ASS", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
164 "LOADER", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
165 "STATUSLINE", |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
166 }; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
167 int c2 = (mod + 1) % 15 + 1; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
168 |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
169 if (!mp_msg_module) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
170 return; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
171 if (mp_msg_color) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
172 fprintf(stream, "\033[%d;3%dm", c2 >> 3, c2 & 7); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
173 fprintf(stream, "%9s", module_text[mod]); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
174 if (mp_msg_color) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
175 fprintf(stream, "\033[0;37m"); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
176 fprintf(stream, ": "); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
177 } |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
178 |
16618 | 179 void mp_msg(int mod, int lev, const char *format, ... ){ |
5102 | 180 va_list va; |
32378
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
181 va_start(va, format); |
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
182 mp_msg_va(mod, lev, format, va); |
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
183 va_end(va); |
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
184 } |
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
185 |
150df72e808f
Add a va_list version of mp_msg and use it to avoid yet another intermediate
reimar
parents:
31625
diff
changeset
|
186 void mp_msg_va(int mod, int lev, const char *format, va_list va){ |
6306
786ab42c10be
Extend maximum mp_msg message size, some translations need it or help message will be cutted.
atmos4
parents:
6048
diff
changeset
|
187 char tmp[MSGSIZE_MAX]; |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
188 FILE *stream = lev <= MSGL_WARN ? stderr : stdout; |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
189 static int header = 1; |
31625
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
190 // indicates if last line printed was a status line |
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
191 static int statusline; |
31560
6e550be9e418
Avoid out-of-bounds read if mp_msg prints an empty string.
reimar
parents:
31311
diff
changeset
|
192 size_t len; |
25403 | 193 |
17106
05af35012e4f
new -msglevel option, constrols msg level for every msg module
ods15
parents:
16618
diff
changeset
|
194 if (!mp_msg_test(mod, lev)) return; // do not display |
18000 | 195 vsnprintf(tmp, MSGSIZE_MAX, format, va); |
10853 | 196 tmp[MSGSIZE_MAX-2] = '\n'; |
6306
786ab42c10be
Extend maximum mp_msg message size, some translations need it or help message will be cutted.
atmos4
parents:
6048
diff
changeset
|
197 tmp[MSGSIZE_MAX-1] = 0; |
5102 | 198 |
27393 | 199 #if defined(CONFIG_ICONV) && defined(MSG_CHARSET) |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
200 if (mp_msg_charset && strcasecmp(mp_msg_charset, "noconv")) { |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
201 char tmp2[MSGSIZE_MAX]; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
202 size_t inlen = strlen(tmp), outlen = MSGSIZE_MAX; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
203 char *in = tmp, *out = tmp2; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
204 if (!old_charset || strcmp(old_charset, mp_msg_charset)) { |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
205 if (old_charset) { |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
206 free(old_charset); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
207 iconv_close(msgiconv); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
208 } |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
209 msgiconv = iconv_open(mp_msg_charset, MSG_CHARSET); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
210 old_charset = strdup(mp_msg_charset); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
211 } |
17931
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17772
diff
changeset
|
212 if (msgiconv == (iconv_t)(-1)) { |
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17772
diff
changeset
|
213 fprintf(stderr,"iconv: conversion from %s to %s unsupported\n" |
19549
5680696f964b
Mixed up from and to charsets in iconv open failure message.
reimar
parents:
18237
diff
changeset
|
214 ,MSG_CHARSET,mp_msg_charset); |
17931
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17772
diff
changeset
|
215 }else{ |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
216 memset(tmp2, 0, MSGSIZE_MAX); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
217 while (iconv(msgiconv, &in, &inlen, &out, &outlen) == -1) { |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
218 if (!inlen || !outlen) |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
219 break; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
220 *out++ = *in++; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
221 outlen--; inlen--; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
222 } |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
223 strncpy(tmp, tmp2, MSGSIZE_MAX); |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
224 tmp[MSGSIZE_MAX-1] = 0; |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
225 tmp[MSGSIZE_MAX-2] = '\n'; |
17931
ed9950b8200d
The fix in mp_msg.c avoids a core dump when iconv_open() fails, the other
albeu
parents:
17772
diff
changeset
|
226 } |
17772
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
227 } |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
228 #endif |
0d7cc103ed1e
Automaticall convert message to console charset, use utf8 for GTK2 Gui
reimar
parents:
17742
diff
changeset
|
229 |
31625
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
230 // as a status line normally is intended to be overwitten by next status line |
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
231 // output a '\n' to get a normal message on a separate line |
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
232 if (statusline && lev != MSGL_STATUS) fprintf(stream, "\n"); |
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
233 statusline = lev == MSGL_STATUS; |
7c76f46056c9
Avoid status line being mangled together with error messages and other
reimar
parents:
31560
diff
changeset
|
234 |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
235 if (header) |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
236 print_msg_module(stream, mod); |
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
237 set_msg_color(stream, lev); |
31560
6e550be9e418
Avoid out-of-bounds read if mp_msg prints an empty string.
reimar
parents:
31311
diff
changeset
|
238 len = strlen(tmp); |
6e550be9e418
Avoid out-of-bounds read if mp_msg prints an empty string.
reimar
parents:
31311
diff
changeset
|
239 header = len && (tmp[len-1] == '\n' || tmp[len-1] == '\r'); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
240 |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
241 fprintf(stream, "%s", tmp); |
30674 | 242 if (mp_msg_color) |
243 fprintf(stream, "\033[0m"); | |
26370
b450d3591845
Enable runtime control for colorful and/or module name output
zuxy
parents:
25962
diff
changeset
|
244 fflush(stream); |
1562 | 245 } |