utility.h revision a02191e04bc25c4935f804f2c080ae28663d096d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A collection of debugging related interfaces. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_macros.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/portability.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/platform/nacl_threads.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/platform/nacl_time.h" 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ppapi/c/private/ppb_nacl_private.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SRPC_PLUGIN_DEBUG 1 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace plugin { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that a string is a valid JavaScript identifier. According to the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ECMAScript spec, this should be done in terms of unicode character 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// categories. For now, we are simply limiting identifiers to the ASCII 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subset of that spec. If successful, it returns the length of the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// identifier in the location pointed to by length (if it is not NULL). 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(sehr): add Unicode identifier support. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidIdentifierString(const char* strval, uint32_t* length); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst PPB_NaCl_Private* GetNaClInterface(); 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid SetNaClInterface(const PPB_NaCl_Private* nacl_interface); 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Debugging print utility 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int gNaClPluginDebugPrintEnabled; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int NaClPluginPrintLog(const char *format, ...); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern int NaClPluginDebugPrintCheckEnv(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if SRPC_PLUGIN_DEBUG 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INIT_PLUGIN_LOGGING() do { \ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (-1 == ::plugin::gNaClPluginDebugPrintEnabled) { \ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::plugin::gNaClPluginDebugPrintEnabled = \ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::plugin::NaClPluginDebugPrintCheckEnv(); \ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} while (0) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PLUGIN_PRINTF(args) do { \ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INIT_PLUGIN_LOGGING(); \ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (0 != ::plugin::gNaClPluginDebugPrintEnabled) { \ 48bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ::plugin::NaClPluginPrintLog("PLUGIN %" NACL_PRIu64 ": ", \ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NaClGetTimeOfDayMicroseconds()); \ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::plugin::NaClPluginPrintLog args; \ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (0) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MODULE_PRINTF is used in the module because PLUGIN_PRINTF uses a 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a timer that may not yet be initialized. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MODULE_PRINTF(args) do { \ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INIT_PLUGIN_LOGGING(); \ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (0 != ::plugin::gNaClPluginDebugPrintEnabled) { \ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::plugin::NaClPluginPrintLog("MODULE: "); \ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::plugin::NaClPluginPrintLog args; \ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (0) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define PLUGIN_PRINTF(args) do { if (0) { printf args; } } while (0) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define MODULE_PRINTF(args) do { if (0) { printf args; } } while (0) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* allows DCE but compiler can still do format string checks */ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace plugin 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ 72