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