Path: blob/master/runtime/jcl/common/jclreflect.c
6000 views
/*******************************************************************************1* Copyright (c) 1998, 2016 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "j9.h"23#include "j9protos.h"2425UDATA26compareJavaStringToPartialUTF8(J9VMThread * vmThread, j9object_t string, U_8 * utfData, UDATA utfLength)27{28UDATA unicodeLength = J9VMJAVALANGSTRING_LENGTH(vmThread, string);29j9object_t unicodeBytes = J9VMJAVALANGSTRING_VALUE(vmThread, string);30UDATA i;3132if (IS_STRING_COMPRESSED(vmThread, string)) {33for (i = 0; i < unicodeLength; i++) {34U_16 utfChar;35U_32 count;3637/* If the String is longer than the UTF, then they don't match */3839if (utfLength == 0) {40return FALSE;41}4243count = decodeUTF8CharN(utfData, &utfChar, utfLength);44if (count == 0) {45return FALSE;46}47utfData += count;48utfLength -= count;4950if (utfChar == '/') {51utfChar = '.';52}53if (utfChar != J9JAVAARRAYOFBYTE_LOAD(vmThread, unicodeBytes, i)) {54return FALSE;55}56}57} else {58for (i = 0; i < unicodeLength; i++) {59U_16 utfChar;60U_32 count;6162/* If the String is longer than the UTF, then they don't match */6364if (utfLength == 0) {65return FALSE;66}6768count = decodeUTF8CharN(utfData, &utfChar, utfLength);69if (count == 0) {70return FALSE;71}72utfData += count;73utfLength -= count;7475if (utfChar == '/') {76utfChar = '.';77}78if (utfChar != J9JAVAARRAYOFCHAR_LOAD(vmThread, unicodeBytes, i)) {79return FALSE;80}81}82}8384return TRUE;85}8687888990