| /* |
| * Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "native_client/src/shared/ppapi_proxy/utility.h" |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include "native_client/src/shared/platform/nacl_check.h" |
| #include "native_client/src/include/nacl_assert.h" |
| |
| namespace ppapi_proxy { |
| |
| const int foo = 5; |
| |
| void DebugPrintf(const char* format, ...) { |
| static bool printf_enabled = (getenv("NACL_PPAPI_PROXY_DEBUG") != NULL); |
| if (printf_enabled) { |
| va_list argptr; |
| va_start(argptr, format); |
| #ifdef __native_client__ |
| fprintf(stdout, "PPAPI_PROXY_PLUGIN : "); |
| #else |
| fprintf(stdout, "PPAPI_PROXY_BROWSER: "); |
| #endif |
| vfprintf(stdout, format, argptr); |
| va_end(argptr); |
| fflush(stdout); |
| } |
| } |
| |
| bool StringIsUtf8(const char* data, uint32_t len) { |
| for (uint32_t i = 0; i < len; i++) { |
| if ((data[i] & 0x80) == 0) { |
| // Single-byte symbol. |
| continue; |
| } else if ((data[i] & 0xc0) == 0x80) { |
| // Invalid first byte. |
| DebugPrintf("Invalid first byte %02x\n", data[i]); |
| return false; |
| } |
| // This is a multi-byte symbol. |
| DebugPrintf("Multi-byte %02x\n", data[i]); |
| // Discard the uppermost bit. The remaining high-order bits are the |
| // unary count of continuation bytes (up to 5 of them). |
| char first = data[i] << 1; |
| uint32_t continuation_bytes = 0; |
| const uint32_t kMaxContinuationBytes = 5; |
| while (first & 0x80) { |
| if (++i >= len) { |
| DebugPrintf("String ended before enough continuation bytes" |
| "were found.\n"); |
| return false; |
| } else if (++continuation_bytes > kMaxContinuationBytes) { |
| DebugPrintf("Too many continuation bytes were requested.\n"); |
| return false; |
| } else if ((data[i] & 0xc0) != 0x80) { |
| DebugPrintf("Invalid continuation byte.\n"); |
| return false; |
| } |
| first <<= 1; |
| } |
| } |
| return true; |
| } |
| |
| } // namespace ppapi_proxy |