* 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) {
continue;
} else if ((data[i] & 0xc0) == 0x80) {
DebugPrintf("Invalid first byte %02x\n", data[i]);
return false;
}
DebugPrintf("Multi-byte %02x\n", data[i]);
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;
}
}