Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/make/src/classes/build/tools/addjsum/AddJsum.java
32287 views
/*1* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425package build.tools.addjsum;2627import java.io.*;28import java.util.regex.*;2930/** Adds a checksum ("jsum") to the end of a text file. The algorithm31used is known to the JVM and prevents trivial tampering with the32class list used for class data sharing.33*/3435public class AddJsum {36private static final long JSUM_SEED = 0xCAFEBABEBABECAFEL;3738public static void main(String[] args) throws Exception {39if (args.length != 2) {40System.err.println("Usage: java AddJsum [input file name] [output file name]");41System.exit(1);42}4344try {45File inFile = new File(args[0]);46File outFile = new File(args[1]);47BufferedReader reader = new BufferedReader(new FileReader(inFile));48BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));49Pattern p = Pattern.compile("# [0-9A-Fa-f]*");50long computedJsum = JSUM_SEED;5152String line = null;53while ((line = reader.readLine()) != null) {54if (line.length() > 0 && line.charAt(0) == '#') {55Matcher m = p.matcher(line);56if (!m.matches()) {57writer.write(line);58writer.newLine();59}60} else {61computedJsum = jsum(computedJsum, line);62writer.write(line);63writer.newLine();64}65}66String hex = Long.toHexString(computedJsum);67int diff = 16 - hex.length();68for (int i = 0; i < diff; i++) {69hex = "0" + hex;70}71writer.write("# " + hex);72writer.newLine();73reader.close();74writer.close();75} catch (IOException e) {76System.err.println("Error reading or writing file");77throw(e);78}79}8081private static long jsum(long start, String str) {82long h = start;83int len = str.length();84for (int i = 0; i < len; i++) {85char c = str.charAt(i);86if (c <= ' ') {87/* Skip spaces and control characters */88continue;89}90h = 31 * h + c;91}92return h;93}94}959697