src/share/classes/sun/tools/jar/Main.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File jdk Cdiff src/share/classes/sun/tools/jar/Main.java

src/share/classes/sun/tools/jar/Main.java

Print this page

        

*** 45,55 **** */ public class Main { String program; PrintStream out, err; ! String fname, mname, ename; String zname = ""; String[] files; String rootjar = null; // An entryName(path)->File map generated during "expand", it helps to --- 45,55 ---- */ public class Main { String program; PrintStream out, err; ! String fname, mname, ename, pname; String zname = ""; String[] files; String rootjar = null; // An entryName(path)->File map generated during "expand", it helps to
*** 76,85 **** --- 76,88 ---- boolean cflag, uflag, xflag, tflag, vflag, flag0, Mflag, iflag; static final String MANIFEST_DIR = "META-INF/"; static final String VERSION = "1.0"; + // valid values for Profile attribute + private static final String[] PROFILES = { "compact1", "compact2", "compact3" }; + private static ResourceBundle rsrc; /** * If true, maintain compatibility with JDK releases prior to 6.0 by * timestamping extracted files with the time at which they are extracted.
*** 182,191 **** --- 185,202 ---- return false; } if (ename != null) { addMainClass(manifest, ename); } + if (pname != null) { + if (!addProfileName(manifest, pname)) { + if (in != null) { + in.close(); + } + return false; + } + } } OutputStream out; if (fname != null) { out = new FileOutputStream(fname); } else {
*** 228,238 **** in.close(); out.close(); if (manifest != null) { manifest.close(); } ! if (fname != null) { // on Win32, we need this delete inputFile.delete(); if (!tmpFile.renameTo(inputFile)) { tmpFile.delete(); throw new IOException(getMsg("error.write.file")); --- 239,249 ---- in.close(); out.close(); if (manifest != null) { manifest.close(); } ! if (ok && fname != null) { // on Win32, we need this delete inputFile.delete(); if (!tmpFile.renameTo(inputFile)) { tmpFile.delete(); throw new IOException(getMsg("error.write.file"));
*** 359,368 **** --- 370,382 ---- iflag = true; break; case 'e': ename = args[count++]; break; + case 'p': + pname = args[count++]; + break; default: error(formatMsg("error.illegal.option", String.valueOf(flags.charAt(i)))); usageError(); return false;
*** 408,418 **** } else if (cflag && (mname == null)) { error(getMsg("error.bad.cflag")); usageError(); return false; } else if (uflag) { ! if ((mname != null) || (ename != null)) { /* just want to update the manifest */ return true; } else { error(getMsg("error.bad.uflag")); usageError(); --- 422,432 ---- } else if (cflag && (mname == null)) { error(getMsg("error.bad.cflag")); usageError(); return false; } else if (uflag) { ! if ((mname != null) || (ename != null) || (pname != null)) { /* just want to update the manifest */ return true; } else { error(getMsg("error.bad.uflag")); usageError();
*** 542,552 **** if ((jarIndex != null && equalsIgnoreCase(name, INDEX_NAME)) || (Mflag && isManifestEntry)) { continue; } else if (isManifestEntry && ((newManifest != null) || ! (ename != null))) { foundManifest = true; if (newManifest != null) { // Don't read from the newManifest InputStream, as we // might need it below, and we can't re-read the same data // twice. --- 556,566 ---- if ((jarIndex != null && equalsIgnoreCase(name, INDEX_NAME)) || (Mflag && isManifestEntry)) { continue; } else if (isManifestEntry && ((newManifest != null) || ! (ename != null) || (pname != null))) { foundManifest = true; if (newManifest != null) { // Don't read from the newManifest InputStream, as we // might need it below, and we can't re-read the same data // twice.
*** 561,571 **** // Update the manifest. Manifest old = new Manifest(zis); if (newManifest != null) { old.read(newManifest); } ! updateManifest(old, zos); } else { if (!entryMap.containsKey(name)) { // copy the old stuff // do our own compression ZipEntry e2 = new ZipEntry(name); e2.setMethod(e.getMethod()); --- 575,587 ---- // Update the manifest. Manifest old = new Manifest(zis); if (newManifest != null) { old.read(newManifest); } ! if (!updateManifest(old, zos)) { ! return false; ! } } else { if (!entryMap.containsKey(name)) { // copy the old stuff // do our own compression ZipEntry e2 = new ZipEntry(name); e2.setMethod(e.getMethod());
*** 594,607 **** if (!foundManifest) { if (newManifest != null) { Manifest m = new Manifest(newManifest); updateOk = !isAmbiguousMainClass(m); if (updateOk) { ! updateManifest(m, zos); } - } else if (ename != null) { - updateManifest(new Manifest(), zos); } } zis.close(); zos.close(); return updateOk; --- 610,627 ---- if (!foundManifest) { if (newManifest != null) { Manifest m = new Manifest(newManifest); updateOk = !isAmbiguousMainClass(m); if (updateOk) { ! if (!updateManifest(m, zos)) { ! updateOk = false; ! } ! } ! } else if (ename != null || pname != null) { ! if (!updateManifest(new Manifest(), zos)) { ! updateOk = false; } } } zis.close(); zos.close(); return updateOk;
*** 621,648 **** zos.putNextEntry(e); index.write(zos); zos.closeEntry(); } ! private void updateManifest(Manifest m, ZipOutputStream zos) throws IOException { addVersion(m); addCreatedBy(m); if (ename != null) { addMainClass(m, ename); } ZipEntry e = new ZipEntry(MANIFEST_NAME); e.setTime(System.currentTimeMillis()); if (flag0) { crc32Manifest(e, m); } zos.putNextEntry(e); m.write(zos); if (vflag) { output(getMsg("out.update.manifest")); } } private String entryName(String name) { name = name.replace(File.separatorChar, '/'); --- 641,674 ---- zos.putNextEntry(e); index.write(zos); zos.closeEntry(); } ! private boolean updateManifest(Manifest m, ZipOutputStream zos) throws IOException { addVersion(m); addCreatedBy(m); if (ename != null) { addMainClass(m, ename); } + if (pname != null) { + if (!addProfileName(m, pname)) { + return false; + } + } ZipEntry e = new ZipEntry(MANIFEST_NAME); e.setTime(System.currentTimeMillis()); if (flag0) { crc32Manifest(e, m); } zos.putNextEntry(e); m.write(zos); if (vflag) { output(getMsg("out.update.manifest")); } + return true; } private String entryName(String name) { name = name.replace(File.separatorChar, '/');
*** 685,694 **** --- 711,742 ---- // overrides any existing Main-Class attribute global.put(Attributes.Name.MAIN_CLASS, mainApp); } + private boolean addProfileName(Manifest m, String profile) { + // check profile name + boolean found = false; + int i = 0; + while (i < PROFILES.length) { + if (profile.equals(PROFILES[i])) { + found = true; + break; + } + i++; + } + if (!found) { + error(formatMsg("error.bad.pvalue", profile)); + return false; + } + + // overrides any existing Profile attribute + Attributes global = m.getMainAttributes(); + global.put(Attributes.Name.PROFILE, profile); + return true; + } + private boolean isAmbiguousMainClass(Manifest m) { if (ename != null) { Attributes global = m.getMainAttributes(); if ((global.get(Attributes.Name.MAIN_CLASS) != null)) { error(getMsg("error.bad.eflag"));
src/share/classes/sun/tools/jar/Main.java
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File