OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2011 The Chromium Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include <stdarg.h> | |
8 #include <stdlib.h> | |
9 #include <string.h> | |
10 | |
11 #include "components/nacl/renderer/plugin/utility.h" | 7 #include "components/nacl/renderer/plugin/utility.h" |
12 #include "ppapi/cpp/module.h" | 8 #include "ppapi/cpp/module.h" |
13 | 9 |
14 namespace plugin { | 10 namespace plugin { |
15 | 11 |
16 int gNaClPluginDebugPrintEnabled = -1; | |
17 | |
18 /* | |
19 * Prints formatted message to the log. | |
20 */ | |
21 int NaClPluginPrintLog(const char *format, ...) { | |
22 va_list arg; | |
23 int out_size; | |
24 | |
25 static const int kStackBufferSize = 512; | |
26 char stack_buffer[kStackBufferSize]; | |
27 | |
28 // Just log locally to stderr if we can't use the nacl interface. | |
29 if (!GetNaClInterface()) { | |
30 va_start(arg, format); | |
31 int rc = vfprintf(stderr, format, arg); | |
32 va_end(arg); | |
33 return rc; | |
34 } | |
35 | |
36 va_start(arg, format); | |
37 out_size = vsnprintf(stack_buffer, kStackBufferSize, format, arg); | |
38 va_end(arg); | |
39 if (out_size < kStackBufferSize) { | |
40 GetNaClInterface()->Vlog(stack_buffer); | |
41 } else { | |
42 // Message too large for our stack buffer; we have to allocate memory | |
43 // instead. | |
44 char *buffer = static_cast<char*>(malloc(out_size + 1)); | |
45 va_start(arg, format); | |
46 vsnprintf(buffer, out_size + 1, format, arg); | |
47 va_end(arg); | |
48 GetNaClInterface()->Vlog(buffer); | |
49 free(buffer); | |
50 } | |
51 return out_size; | |
52 } | |
53 | |
54 /* | |
55 * Currently looks for presence of NACL_PLUGIN_DEBUG and returns | |
56 * 0 if absent and 1 if present. In the future we may include notions | |
57 * of verbosity level. | |
58 */ | |
59 int NaClPluginDebugPrintCheckEnv() { | |
60 char* env = getenv("NACL_PLUGIN_DEBUG"); | |
61 return (NULL != env); | |
62 } | |
63 | |
64 // We cache the NaCl interface pointer and ensure that its set early on, on the | 12 // We cache the NaCl interface pointer and ensure that its set early on, on the |
65 // main thread. This allows GetNaClInterface() to be used from non-main threads. | 13 // main thread. This allows GetNaClInterface() to be used from non-main threads. |
66 static const PPB_NaCl_Private* g_nacl_interface = NULL; | 14 static const PPB_NaCl_Private* g_nacl_interface = NULL; |
67 | 15 |
68 const PPB_NaCl_Private* GetNaClInterface() { | 16 const PPB_NaCl_Private* GetNaClInterface() { |
69 return g_nacl_interface; | 17 return g_nacl_interface; |
70 } | 18 } |
71 | 19 |
72 void SetNaClInterface(const PPB_NaCl_Private* nacl_interface) { | 20 void SetNaClInterface(const PPB_NaCl_Private* nacl_interface) { |
73 g_nacl_interface = nacl_interface; | 21 g_nacl_interface = nacl_interface; |
74 } | 22 } |
75 | 23 |
76 } // namespace plugin | 24 } // namespace plugin |
OLD | NEW |