This commit is contained in:
J. Duke 2017-07-05 17:28:40 +02:00
commit 6cbba57d31
144 changed files with 10061 additions and 2481 deletions

View File

@ -94,3 +94,4 @@ e8ebdf41b9c01a26642848f4134f5504e8fb3233 jdk7-b115
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117 7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118 a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119 661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119
366ff0b6d2151595629806b033e2e1497e3a55d4 jdk7-b120

View File

@ -93,3 +93,5 @@ da7561d479e0ddaa4650d8023ac0fc7294e014e3 jdk7-b115
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116 98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117 fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118 42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
39829414ae31a0080578a49b751899edd518cd7d jdk7-b119
cff5a173ec1e89013359e804a3e31736ef6fb462 jdk7-b120

View File

@ -131,3 +131,5 @@ bdbc48857210a509b3c50a3291ecb9dd6a72e016 jdk7-b115
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117 806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118 698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02 3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
5484e7c53fa7da5e869902437ee08a9ae10c1c69 jdk7-b119
f5603a6e50422046ebc0d2f1671d55cb8f1bf1e9 jdk7-b120

View File

@ -93,3 +93,5 @@ e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116 1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117 3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118 b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
ecab7eefb8f2326fd90fb632f47f1b6f81e928f8 jdk7-b119
37d74e29687cf07c2bf9411af58c7e42440855c3 jdk7-b120

View File

@ -83,14 +83,19 @@ ifndef CLOSED_SRC
CLOSED_SRC = $(BUILDDIR)/../src/closed CLOSED_SRC = $(BUILDDIR)/../src/closed
endif endif
# If we have no closed directory, force it to an openjdk build # If CLOSE_SRC_INCLUDED isn't set to true, check if there's any
CLOSED_SRC_DIR_EXISTS := $(shell \ # closed directory.
if [ -d $(CLOSED_SRC) ] ; then \ ifneq ($(CLOSED_SRC_INCLUDED), true)
echo true; \ CLOSED_SRC_INCLUDED := $(shell \
else \ if [ -d $(CLOSED_SRC) ] ; then \
echo false; \ echo true; \
fi) else \
ifeq ($(CLOSED_SRC_DIR_EXISTS), false) echo false; \
fi)
endif
# Set OPENJDK based on CLOSED_SRC_INCLUDED
ifeq ($(CLOSED_SRC_INCLUDED), false)
OPENJDK = true OPENJDK = true
endif endif

View File

@ -85,6 +85,7 @@ FILES_src = \
sun/io/ByteToCharCp500.java \ sun/io/ByteToCharCp500.java \
sun/io/ByteToCharCp737.java \ sun/io/ByteToCharCp737.java \
sun/io/ByteToCharCp775.java \ sun/io/ByteToCharCp775.java \
sun/io/ByteToCharCp833.java \
sun/io/ByteToCharCp834.java \ sun/io/ByteToCharCp834.java \
sun/io/ByteToCharCp838.java \ sun/io/ByteToCharCp838.java \
sun/io/ByteToCharCp850.java \ sun/io/ByteToCharCp850.java \
@ -214,6 +215,7 @@ FILES_src = \
sun/io/CharToByteCp500.java \ sun/io/CharToByteCp500.java \
sun/io/CharToByteCp737.java \ sun/io/CharToByteCp737.java \
sun/io/CharToByteCp775.java \ sun/io/CharToByteCp775.java \
sun/io/CharToByteCp833.java \
sun/io/CharToByteCp834.java \ sun/io/CharToByteCp834.java \
sun/io/CharToByteCp838.java \ sun/io/CharToByteCp838.java \
sun/io/CharToByteCp850.java \ sun/io/CharToByteCp850.java \
@ -331,6 +333,7 @@ FILES_gen_extcs = \
sun/nio/cs/ext/IBM420.java \ sun/nio/cs/ext/IBM420.java \
sun/nio/cs/ext/IBM424.java \ sun/nio/cs/ext/IBM424.java \
sun/nio/cs/ext/IBM500.java \ sun/nio/cs/ext/IBM500.java \
sun/nio/cs/ext/IBM833.java \
sun/nio/cs/ext/IBM838.java \ sun/nio/cs/ext/IBM838.java \
sun/nio/cs/ext/IBM856.java \ sun/nio/cs/ext/IBM856.java \
sun/nio/cs/ext/IBM860.java \ sun/nio/cs/ext/IBM860.java \

View File

@ -432,6 +432,7 @@ SUNWprivate_1.1 {
Java_sun_awt_X11_GtkFileDialogPeer_initIDs; Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
Java_sun_awt_X11_GtkFileDialogPeer_run; Java_sun_awt_X11_GtkFileDialogPeer_run;
Java_sun_awt_X11_GtkFileDialogPeer_quit; Java_sun_awt_X11_GtkFileDialogPeer_quit;
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
Java_sun_print_CUPSPrinter_initIDs; Java_sun_print_CUPSPrinter_initIDs;
Java_sun_print_CUPSPrinter_getCupsServer; Java_sun_print_CUPSPrinter_getCupsServer;

View File

@ -0,0 +1,94 @@
0x5A U+FF01
0x7F U+FF02
0x7B U+FF03
0x5B U+FF04
0x6C U+FF05
0x50 U+FF06
0x7D U+FF07
0x4D U+FF08
0x5D U+FF09
0x5C U+FF0A
0x4E U+FF0B
0x6B U+FF0C
0x60 U+FF0D
0x4B U+FF0E
0x61 U+FF0F
0xF0 U+FF10
0xF1 U+FF11
0xF2 U+FF12
0xF3 U+FF13
0xF4 U+FF14
0xF5 U+FF15
0xF6 U+FF16
0xF7 U+FF17
0xF8 U+FF18
0xF9 U+FF19
0x7A U+FF1A
0x5E U+FF1B
0x4C U+FF1C
0x7E U+FF1D
0x6E U+FF1E
0x6F U+FF1F
0x7C U+FF20
0xC1 U+FF21
0xC2 U+FF22
0xC3 U+FF23
0xC4 U+FF24
0xC5 U+FF25
0xC6 U+FF26
0xC7 U+FF27
0xC8 U+FF28
0xC9 U+FF29
0xD1 U+FF2A
0xD2 U+FF2B
0xD3 U+FF2C
0xD4 U+FF2D
0xD5 U+FF2E
0xD6 U+FF2F
0xD7 U+FF30
0xD8 U+FF31
0xD9 U+FF32
0xE2 U+FF33
0xE3 U+FF34
0xE4 U+FF35
0xE5 U+FF36
0xE6 U+FF37
0xE7 U+FF38
0xE8 U+FF39
0xE9 U+FF3A
0x70 U+FF3B
0xB2 U+FF3C
0x80 U+FF3D
0xB0 U+FF3E
0x6D U+FF3F
0x79 U+FF40
0x81 U+FF41
0x82 U+FF42
0x83 U+FF43
0x84 U+FF44
0x85 U+FF45
0x86 U+FF46
0x87 U+FF47
0x88 U+FF48
0x89 U+FF49
0x91 U+FF4A
0x92 U+FF4B
0x93 U+FF4C
0x94 U+FF4D
0x95 U+FF4E
0x96 U+FF4F
0x97 U+FF50
0x98 U+FF51
0x99 U+FF52
0xA2 U+FF53
0xA3 U+FF54
0xA4 U+FF55
0xA5 U+FF56
0xA6 U+FF57
0xA7 U+FF58
0xA8 U+FF59
0xA9 U+FF5A
0xC0 U+FF5B
0x4F U+FF5C
0xD0 U+FF5D
0xA1 U+FF5E

View File

@ -0,0 +1,217 @@
0x00 U+0000
0x01 U+0001
0x02 U+0002
0x03 U+0003
0x37 U+0004
0x2D U+0005
0x2E U+0006
0x2F U+0007
0x16 U+0008
0x05 U+0009
0x25 U+000A
0x0B U+000B
0x0C U+000C
0x0D U+000D
0x0E U+000E
0x0F U+000F
0x10 U+0010
0x11 U+0011
0x12 U+0012
0x13 U+0013
0x3C U+0014
0x3D U+0015
0x32 U+0016
0x26 U+0017
0x18 U+0018
0x19 U+0019
0x3F U+001A
0x27 U+001B
0x1C U+001C
0x1D U+001D
0x1E U+001E
0x1F U+001F
0x40 U+0020
0x5A U+0021
0x7F U+0022
0x7B U+0023
0x5B U+0024
0x6C U+0025
0x50 U+0026
0x7D U+0027
0x4D U+0028
0x5D U+0029
0x5C U+002A
0x4E U+002B
0x6B U+002C
0x60 U+002D
0x4B U+002E
0x61 U+002F
0xF0 U+0030
0xF1 U+0031
0xF2 U+0032
0xF3 U+0033
0xF4 U+0034
0xF5 U+0035
0xF6 U+0036
0xF7 U+0037
0xF8 U+0038
0xF9 U+0039
0x7A U+003A
0x5E U+003B
0x4C U+003C
0x7E U+003D
0x6E U+003E
0x6F U+003F
0x7C U+0040
0xC1 U+0041
0xC2 U+0042
0xC3 U+0043
0xC4 U+0044
0xC5 U+0045
0xC6 U+0046
0xC7 U+0047
0xC8 U+0048
0xC9 U+0049
0xD1 U+004A
0xD2 U+004B
0xD3 U+004C
0xD4 U+004D
0xD5 U+004E
0xD6 U+004F
0xD7 U+0050
0xD8 U+0051
0xD9 U+0052
0xE2 U+0053
0xE3 U+0054
0xE4 U+0055
0xE5 U+0056
0xE6 U+0057
0xE7 U+0058
0xE8 U+0059
0xE9 U+005A
0x70 U+005B
0xB2 U+005C
0x80 U+005D
0xB0 U+005E
0x6D U+005F
0x79 U+0060
0x81 U+0061
0x82 U+0062
0x83 U+0063
0x84 U+0064
0x85 U+0065
0x86 U+0066
0x87 U+0067
0x88 U+0068
0x89 U+0069
0x91 U+006A
0x92 U+006B
0x93 U+006C
0x94 U+006D
0x95 U+006E
0x96 U+006F
0x97 U+0070
0x98 U+0071
0x99 U+0072
0xA2 U+0073
0xA3 U+0074
0xA4 U+0075
0xA5 U+0076
0xA6 U+0077
0xA7 U+0078
0xA8 U+0079
0xA9 U+007A
0xC0 U+007B
0x4F U+007C
0xD0 U+007D
0xA1 U+007E
0x07 U+007F
0x20 U+0080
0x21 U+0081
0x22 U+0082
0x23 U+0083
0x24 U+0084
0x15 U+0085
0x06 U+0086
0x17 U+0087
0x28 U+0088
0x29 U+0089
0x2A U+008A
0x2B U+008B
0x2C U+008C
0x09 U+008D
0x0A U+008E
0x1B U+008F
0x30 U+0090
0x31 U+0091
0x1A U+0092
0x33 U+0093
0x34 U+0094
0x35 U+0095
0x36 U+0096
0x08 U+0097
0x38 U+0098
0x39 U+0099
0x3A U+009A
0x3B U+009B
0x04 U+009C
0x14 U+009D
0x3E U+009E
0xFF U+009F
0x4A U+00A2
0x6A U+00A6
0x5F U+00AC
0xA0 U+203E
0xE0 U+20A9
0x42 U+FFA0
0x43 U+FFA1
0x44 U+FFA2
0x45 U+FFA3
0x46 U+FFA4
0x47 U+FFA5
0x48 U+FFA6
0x49 U+FFA7
0x52 U+FFA8
0x53 U+FFA9
0x54 U+FFAA
0x55 U+FFAB
0x56 U+FFAC
0x57 U+FFAD
0x58 U+FFAE
0x59 U+FFAF
0x62 U+FFB0
0x63 U+FFB1
0x64 U+FFB2
0x65 U+FFB3
0x66 U+FFB4
0x67 U+FFB5
0x68 U+FFB6
0x69 U+FFB7
0x72 U+FFB8
0x73 U+FFB9
0x74 U+FFBA
0x75 U+FFBB
0x76 U+FFBC
0x77 U+FFBD
0x78 U+FFBE
0x8A U+FFC2
0x8B U+FFC3
0x8C U+FFC4
0x8D U+FFC5
0x8E U+FFC6
0x8F U+FFC7
0x9A U+FFCA
0x9B U+FFCB
0x9C U+FFCC
0x9D U+FFCD
0x9E U+FFCE
0x9F U+FFCF
0xAA U+FFD2
0xAB U+FFD3
0xAC U+FFD4
0xAD U+FFD5
0xAE U+FFD6
0xAF U+FFD7
0xBA U+FFDA
0xBB U+FFDB
0xBC U+FFDC

View File

@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
IBM420 IBM420 Cp420 false sun.nio.cs.ext IBM420 IBM420 Cp420 false sun.nio.cs.ext
IBM424 IBM424 Cp424 false sun.nio.cs.ext IBM424 IBM424 Cp424 false sun.nio.cs.ext
IBM500 IBM500 Cp500 false sun.nio.cs.ext IBM500 IBM500 Cp500 false sun.nio.cs.ext
IBM833 x-IBM833 Cp833 false sun.nio.cs.ext
IBM838 IBM-Thai Cp838 false sun.nio.cs.ext IBM838 IBM-Thai Cp838 false sun.nio.cs.ext
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
IBM860 IBM860 Cp860 false sun.nio.cs.ext IBM860 IBM860 Cp860 false sun.nio.cs.ext

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -111,7 +111,7 @@ class CharacterData00 extends CharacterData {
if ((val & $$maskCaseOffset) == $$maskCaseOffset) { if ((val & $$maskCaseOffset) == $$maskCaseOffset) {
switch(ch) { switch(ch) {
// map the offset overflow chars // map the offset overflow chars
case 0x0130 : mapChar = 0x0069; break; case 0x0130 : mapChar = 0x0069; break;
case 0x2126 : mapChar = 0x03C9; break; case 0x2126 : mapChar = 0x03C9; break;
case 0x212A : mapChar = 0x006B; break; case 0x212A : mapChar = 0x006B; break;
case 0x212B : mapChar = 0x00E5; break; case 0x212B : mapChar = 0x00E5; break;
@ -192,7 +192,11 @@ class CharacterData00 extends CharacterData {
case 0x2C6D : mapChar = 0x0251; break; case 0x2C6D : mapChar = 0x0251; break;
case 0x2C6E : mapChar = 0x0271; break; case 0x2C6E : mapChar = 0x0271; break;
case 0x2C6F : mapChar = 0x0250; break; case 0x2C6F : mapChar = 0x0250; break;
case 0x2C70 : mapChar = 0x0252; break;
case 0x2C7E : mapChar = 0x023F; break;
case 0x2C7F : mapChar = 0x0240; break;
case 0xA77D : mapChar = 0x1D79; break; case 0xA77D : mapChar = 0x1D79; break;
case 0xA78D : mapChar = 0x0265; break;
// default mapChar is already set, so no // default mapChar is already set, so no
// need to redo it here. // need to redo it here.
// default : mapChar = ch; // default : mapChar = ch;
@ -246,8 +250,12 @@ class CharacterData00 extends CharacterData {
case 0x1FC3 : mapChar = 0x1FCC; break; case 0x1FC3 : mapChar = 0x1FCC; break;
case 0x1FF3 : mapChar = 0x1FFC; break; case 0x1FF3 : mapChar = 0x1FFC; break;
case 0x023F : mapChar = 0x2C7E; break;
case 0x0240 : mapChar = 0x2C7F; break;
case 0x0250 : mapChar = 0x2C6F; break; case 0x0250 : mapChar = 0x2C6F; break;
case 0x0251 : mapChar = 0x2C6D; break; case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
case 0x026B : mapChar = 0x2C62; break; case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break; case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break; case 0x027D : mapChar = 0x2C64; break;
@ -487,8 +495,12 @@ class CharacterData00 extends CharacterData {
case 0x017F : mapChar = 0x0053; break; case 0x017F : mapChar = 0x0053; break;
case 0x1FBE : mapChar = 0x0399; break; case 0x1FBE : mapChar = 0x0399; break;
case 0x023F : mapChar = 0x2C7E; break;
case 0x0240 : mapChar = 0x2C7F; break;
case 0x0250 : mapChar = 0x2C6F; break; case 0x0250 : mapChar = 0x2C6F; break;
case 0x0251 : mapChar = 0x2C6D; break; case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
case 0x026B : mapChar = 0x2C62; break; case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break; case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break; case 0x027D : mapChar = 0x2C64; break;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -251,9 +251,40 @@ class CharacterData01 extends CharacterData {
case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY
case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
case 0x01085D: retval = 100; break; // IMPERIAL ARAMAIC NUMBER ONE HUNDRED
case 0x01085E: retval = 1000; break; // IMPERIAL ARAMAIC NUMBER ONE THOUSAND
case 0x01085F: retval = 10000; break; // IMPERIAL ARAMAIC NUMBER TEN THOUSAND
case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
case 0x010A7E: retval = 50; break; // OLD SOUTH ARABIAN NUMBER FIFTY
case 0x010B5E: retval = 100; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
case 0x010B5F: retval = 1000; break; // INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
case 0x010B7E: retval = 100; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
case 0x010B7F: retval = 1000; break; // INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
case 0x010E6C: retval = 40; break; // RUMI NUMBER FORTY
case 0x010E6D: retval = 50; break; // RUMI NUMBER FIFTY
case 0x010E6E: retval = 60; break; // RUMI NUMBER SIXTY
case 0x010E6F: retval = 70; break; // RUMI NUMBER SEVENTY
case 0x010E70: retval = 80; break; // RUMI NUMBER EIGHTY
case 0x010E71: retval = 90; break; // RUMI NUMBER NINETY
case 0x010E72: retval = 100; break; // RUMI NUMBER ONE HUNDRED
case 0x010E73: retval = 200; break; // RUMI NUMBER TWO HUNDRED
case 0x010E74: retval = 300; break; // RUMI NUMBER THREE HUNDRED
case 0x010E75: retval = 400; break; // RUMI NUMBER FOUR HUNDRED
case 0x010E76: retval = 500; break; // RUMI NUMBER FIVE HUNDRED
case 0x010E77: retval = 600; break; // RUMI NUMBER SIX HUNDRED
case 0x010E78: retval = 700; break; // RUMI NUMBER SEVEN HUNDRED
case 0x010E79: retval = 800; break; // RUMI NUMBER EIGHT HUNDRED
case 0x010E7A: retval = 900; break; // RUMI NUMBER NINE HUNDRED
case 0x01105E: retval = 40; break; // BRAHMI NUMBER FORTY
case 0x01105F: retval = 50; break; // BRAHMI NUMBER FIFTY
case 0x011060: retval = 60; break; // BRAHMI NUMBER SIXTY
case 0x011061: retval = 70; break; // BRAHMI NUMBER SEVENTY
case 0x011062: retval = 80; break; // BRAHMI NUMBER EIGHTY
case 0x011063: retval = 90; break; // BRAHMI NUMBER NINETY
case 0x011064: retval = 100; break; // BRAHMI NUMBER ONE HUNDRED
case 0x011065: retval = 1000; break; // BRAHMI NUMBER ONE THOUSAND
case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR
case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX

View File

@ -1,8 +1,8 @@
# Scripts-5.2.0.txt # Scripts-6.0.0.txt
# Date: 2009-08-22, 04:58:43 GMT [MD] # Date: 2010-08-19, 00:48:47 GMT [MD]
# #
# Unicode Character Database # Unicode Character Database
# Copyright (c) 1991-2009 Unicode, Inc. # Copyright (c) 1991-2010 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/ # For documentation, see http://www.unicode.org/reports/tr44/
@ -73,7 +73,7 @@
02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD 02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT 02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
02E5..02EB ; Common # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK 02E5..02E9 ; Common # Sk [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR
02EC ; Common # Lm MODIFIER LETTER VOICING 02EC ; Common # Lm MODIFIER LETTER VOICING
02ED ; Common # Sk MODIFIER LETTER UNASPIRATED 02ED ; Common # Sk MODIFIER LETTER UNASPIRATED
02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE 02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
@ -83,7 +83,6 @@
0385 ; Common # Sk GREEK DIALYTIKA TONOS 0385 ; Common # Sk GREEK DIALYTIKA TONOS
0387 ; Common # Po GREEK ANO TELEIA 0387 ; Common # Po GREEK ANO TELEIA
0589 ; Common # Po ARMENIAN FULL STOP 0589 ; Common # Po ARMENIAN FULL STOP
0600..0603 ; Common # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
060C ; Common # Po ARABIC COMMA 060C ; Common # Po ARABIC COMMA
061B ; Common # Po ARABIC SEMICOLON 061B ; Common # Po ARABIC SEMICOLON
061F ; Common # Po ARABIC QUESTION MARK 061F ; Common # Po ARABIC QUESTION MARK
@ -92,7 +91,6 @@
06DD ; Common # Cf ARABIC END OF AYAH 06DD ; Common # Cf ARABIC END OF AYAH
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA 0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN 0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
0CF1..0CF2 ; Common # So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT 0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS 0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR 10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
@ -148,7 +146,7 @@
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN 208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS 208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS 208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
20A0..20B8 ; Common # Sc [25] EURO-CURRENCY SIGN..TENGE SIGN 20A0..20B9 ; Common # Sc [26] EURO-CURRENCY SIGN..INDIAN RUPEE SIGN
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT 2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C 2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA 2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
@ -157,7 +155,8 @@
210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L 210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
2114 ; Common # So L B BAR SYMBOL 2114 ; Common # So L B BAR SYMBOL
2115 ; Common # L& DOUBLE-STRUCK CAPITAL N 2115 ; Common # L& DOUBLE-STRUCK CAPITAL N
2116..2118 ; Common # So [3] NUMERO SIGN..SCRIPT CAPITAL P 2116..2117 ; Common # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT
2118 ; Common # Sm SCRIPT CAPITAL P
2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R 2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE 211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z 2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
@ -213,7 +212,7 @@
239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM 239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE 23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET 23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
23E2..23E8 ; Common # So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL 23E2..23F3 ; Common # So [18] WHITE TRAPEZIUM..HOURGLASS WITH FLOWING SAND
2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO 2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH 2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP 2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
@ -227,18 +226,8 @@
25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE 25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN 2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
266F ; Common # Sm MUSIC SHARP SIGN 266F ; Common # Sm MUSIC SHARP SIGN
2670..26CD ; Common # So [94] WEST SYRIAC CROSS..DISABLED CAR 2670..26FF ; Common # So [144] WEST SYRIAC CROSS..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
26CF..26E1 ; Common # So [19] PICK..RESTRICTED LEFT ENTRY-2 2701..2767 ; Common # So [103] UPPER BLADE SCISSORS..ROTATED FLORAL HEART BULLET
26E3 ; Common # So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
26E8..26FF ; Common # So [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
2701..2704 ; Common # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
2706..2709 ; Common # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
270C..2727 ; Common # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
2729..274B ; Common # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
274D ; Common # So SHADOWED WHITE CIRCLE
274F..2752 ; Common # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
2756..275E ; Common # So [9] BLACK DIAMOND MINUS WHITE X..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
2761..2767 ; Common # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT 2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT 2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT 276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
@ -254,15 +243,13 @@
2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT 2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT 2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN 2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW 2794..27BF ; Common # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
2798..27AF ; Common # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
27B1..27BE ; Common # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET 27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER 27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER 27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
27C7..27CA ; Common # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE 27C7..27CA ; Common # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
27CC ; Common # Sm LONG DIVISION 27CC ; Common # Sm LONG DIVISION
27D0..27E5 ; Common # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK 27CE..27E5 ; Common # Sm [24] SQUARED LOGICAL AND..WHITE SQUARE WITH RIGHTWARDS TICK
27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET 27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET 27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET 27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
@ -555,27 +542,51 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK 1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
1F0B1..1F0BE ; Common # So [14] PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS
1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0DF ; Common # So [15] PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
1F100..1F10A ; Common # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA 1F100..1F10A ; Common # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ 1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
1F131 ; Common # So SQUARED LATIN CAPITAL LETTER B 1F130..1F169 ; Common # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F13D ; Common # So SQUARED LATIN CAPITAL LETTER N 1F170..1F19A ; Common # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
1F13F ; Common # So SQUARED LATIN CAPITAL LETTER P 1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F142 ; Common # So SQUARED LATIN CAPITAL LETTER S 1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
1F146 ; Common # So SQUARED LATIN CAPITAL LETTER W 1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
1F14A..1F14E ; Common # So [5] SQUARED HV..SQUARED PPV
1F157 ; Common # So NEGATIVE CIRCLED LATIN CAPITAL LETTER H
1F15F ; Common # So NEGATIVE CIRCLED LATIN CAPITAL LETTER P
1F179 ; Common # So NEGATIVE SQUARED LATIN CAPITAL LETTER J
1F17B..1F17C ; Common # So [2] NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M
1F17F ; Common # So NEGATIVE SQUARED LATIN CAPITAL LETTER P
1F18A..1F18D ; Common # So [4] CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA
1F190 ; Common # So SQUARE DJ
1F210..1F231 ; Common # So [34] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-6253
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
1F300..1F320 ; Common # So [33] CYCLONE..SHOOTING STAR
1F330..1F335 ; Common # So [6] CHESTNUT..CACTUS
1F337..1F37C ; Common # So [70] TULIP..BABY BOTTLE
1F380..1F393 ; Common # So [20] RIBBON..GRADUATION CAP
1F3A0..1F3C4 ; Common # So [37] CAROUSEL HORSE..SURFER
1F3C6..1F3CA ; Common # So [5] TROPHY..SWIMMER
1F3E0..1F3F0 ; Common # So [17] HOUSE BUILDING..EUROPEAN CASTLE
1F400..1F43E ; Common # So [63] RAT..PAW PRINTS
1F440 ; Common # So EYES
1F442..1F4F7 ; Common # So [182] EAR..CAMERA
1F4F9..1F4FC ; Common # So [4] VIDEO CAMERA..VIDEOCASSETTE
1F500..1F53D ; Common # So [62] TWISTED RIGHTWARDS ARROWS..DOWN-POINTING SMALL RED TRIANGLE
1F550..1F567 ; Common # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
1F5FB..1F5FF ; Common # So [5] MOUNT FUJI..MOYAI
1F601..1F610 ; Common # So [16] GRINNING FACE WITH SMILING EYES..NEUTRAL FACE
1F612..1F614 ; Common # So [3] UNAMUSED FACE..PENSIVE FACE
1F616 ; Common # So CONFOUNDED FACE
1F618 ; Common # So FACE THROWING A KISS
1F61A ; Common # So KISSING FACE WITH CLOSED EYES
1F61C..1F61E ; Common # So [3] FACE WITH STUCK-OUT TONGUE AND WINKING EYE..DISAPPOINTED FACE
1F620..1F625 ; Common # So [6] ANGRY FACE..DISAPPOINTED BUT RELIEVED FACE
1F628..1F62B ; Common # So [4] FEARFUL FACE..TIRED FACE
1F62D ; Common # So LOUDLY CRYING FACE
1F630..1F633 ; Common # So [4] FACE WITH OPEN MOUTH AND COLD SWEAT..FLUSHED FACE
1F635..1F640 ; Common # So [12] DIZZY FACE..WEARY CAT FACE
1F645..1F64F ; Common # So [11] FACE WITH NO GOOD GESTURE..PERSON WITH FOLDED HANDS
1F680..1F6C5 ; Common # So [70] ROCKET..LEFT LUGGAGE
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
E0001 ; Common # Cf LANGUAGE TAG E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
# Total code points: 5395 # Total code points: 6379
# ================================================ # ================================================
@ -603,7 +614,7 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP 1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I 2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I
207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N 207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N
2090..2094 ; Latin # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA 2090..209C ; Latin # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN 212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
2132 ; Latin # L& TURNED CAPITAL F 2132 ; Latin # L& TURNED CAPITAL F
214E ; Latin # L& TURNED SMALL F 214E ; Latin # L& TURNED SMALL F
@ -616,13 +627,16 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
A770 ; Latin # Lm MODIFIER LETTER US A770 ; Latin # Lm MODIFIER LETTER US
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78C ; Latin # L& [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A790..A791 ; Latin # L& [2] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER N WITH DESCENDER
A7A0..A7A9 ; Latin # L& [10] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE..LATIN SMALL LETTER S WITH OBLIQUE STROKE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
# Total code points: 1244 # Total code points: 1267
# ================================================ # ================================================
@ -687,12 +701,11 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION 0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION
0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE 0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN 0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
048A..0525 ; Cyrillic # L& [156] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER PE WITH DESCENDER 048A..0527 ; Cyrillic # L& [158] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER SHHA WITH DESCENDER
1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL 1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN 1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS 2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
A640..A65F ; Cyrillic # L& [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN A640..A66D ; Cyrillic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
A662..A66D ; Cyrillic # L& [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
@ -702,7 +715,7 @@ A67E ; Cyrillic # Po CYRILLIC KAVYKA
A67F ; Cyrillic # Lm CYRILLIC PAYEROK A67F ; Cyrillic # Lm CYRILLIC PAYEROK
A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
# Total code points: 404 # Total code points: 408
# ================================================ # ================================================
@ -744,6 +757,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
# ================================================ # ================================================
0600..0603 ; Arabic # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY 0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN 0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
060B ; Arabic # Sc AFGHANI SIGN 060B ; Arabic # Sc AFGHANI SIGN
@ -751,7 +765,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA 060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA 0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK 061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
0621..063F ; Arabic # Lo [31] ARABIC LETTER HAMZA..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH 0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS 0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR 066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
@ -760,7 +774,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06D4 ; Arabic # Po ARABIC FULL STOP 06D4 ; Arabic # Po ARABIC FULL STOP
06D5 ; Arabic # Lo ARABIC LETTER AE 06D5 ; Arabic # Lo ARABIC LETTER AE
06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN 06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
06DE ; Arabic # Me ARABIC START OF RUB EL HIZB 06DE ; Arabic # So ARABIC START OF RUB EL HIZB
06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA 06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH 06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON 06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
@ -773,6 +787,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V 06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE 0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
@ -782,7 +797,7 @@ FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN
FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS 10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
# Total code points: 1030 # Total code points: 1051
# ================================================ # ================================================
@ -809,27 +824,29 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA 0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA 0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093A ; Devanagari # Mn DEVANAGARI VOWEL SIGN OE
093B ; Devanagari # Mc DEVANAGARI VOWEL SIGN OOE
093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA 093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA
093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA 093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II 093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI 0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU 0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA 094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA
094E ; Devanagari # Mc DEVANAGARI VOWEL SIGN PRISHTHAMATRA E 094E..094F ; Devanagari # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
0950 ; Devanagari # Lo DEVANAGARI OM 0950 ; Devanagari # Lo DEVANAGARI OM
0953..0955 ; Devanagari # Mn [3] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN CANDRA LONG E 0953..0957 ; Devanagari # Mn [5] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN UUE
0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL 0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL 0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE 0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT 0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT
0972 ; Devanagari # Lo DEVANAGARI LETTER CANDRA A 0972..0977 ; Devanagari # Lo [6] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER UUE
0979..097F ; Devanagari # Lo [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA 0979..097F ; Devanagari # Lo [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
# Total code points: 140 # Total code points: 150
# ================================================ # ================================================
@ -941,8 +958,9 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE 0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
0B70 ; Oriya # So ORIYA ISSHAR 0B70 ; Oriya # So ORIYA ISSHAR
0B71 ; Oriya # Lo ORIYA LETTER WA 0B71 ; Oriya # Lo ORIYA LETTER WA
0B72..0B77 ; Oriya # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
# Total code points: 84 # Total code points: 90
# ================================================ # ================================================
@ -1018,22 +1036,23 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE 0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
# Total code points: 84 # Total code points: 86
# ================================================ # ================================================
0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA 0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L 0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI 0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D28 ; Malayalam # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA 0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D2A..0D39 ; Malayalam # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA 0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II 0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR 0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI 0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU 0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA 0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK 0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL 0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL 0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
@ -1042,7 +1061,7 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0D79 ; Malayalam # So MALAYALAM DATE MARK 0D79 ; Malayalam # So MALAYALAM DATE MARK
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K 0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
# Total code points: 95 # Total code points: 98
# ================================================ # ================================================
@ -1132,16 +1151,17 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA 0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
0F85 ; Tibetan # Po TIBETAN MARK PALUTA 0F85 ; Tibetan # Po TIBETAN MARK PALUTA
0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS 0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
0F88..0F8B ; Tibetan # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS 0F88..0F8C ; Tibetan # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
0F90..0F97 ; Tibetan # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA 0F8D..0F97 ; Tibetan # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA 0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE 0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN 0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL 0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM 0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA 0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
0FD9..0FDA ; Tibetan # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
# Total code points: 201 # Total code points: 207
# ================================================ # ================================================
@ -1201,6 +1221,7 @@ AA7B ; Myanmar # Mc MYANMAR SIGN PAO KAREN TONE
# ================================================ # ================================================
1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN 1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
302E..302F ; Hangul # Mn [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE 3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU 3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U 3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
@ -1214,7 +1235,7 @@ FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL
FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
# Total code points: 11737 # Total code points: 11739
# ================================================ # ================================================
@ -1234,7 +1255,7 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA 12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE 1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA 1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
135F ; Ethiopic # Mn ETHIOPIC COMBINING GEMINATION MARK 135D..135F ; Ethiopic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
1360 ; Ethiopic # So ETHIOPIC SECTION MARK 1360 ; Ethiopic # So ETHIOPIC SECTION MARK
1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR 1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND 1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
@ -1249,8 +1270,13 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO 2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO 2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO 2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
AB01..AB06 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
AB09..AB0E ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
AB11..AB16 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
AB20..AB26 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
# Total code points: 461 # Total code points: 495
# ================================================ # ================================================
@ -1329,9 +1355,10 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE 3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK 309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI 309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
1B001 ; Hiragana # Lo HIRAGANA LETTER ARCHAIC YE
1F200 ; Hiragana # So SQUARE HIRAGANA HOKA 1F200 ; Hiragana # So SQUARE HIRAGANA HOKA
# Total code points: 90 # Total code points: 91
# ================================================ # ================================================
@ -1343,15 +1370,17 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO 3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO
FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E
# Total code points: 299 # Total code points: 300
# ================================================ # ================================================
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
3105..312D ; Bopomofo # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH 3105..312D ; Bopomofo # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
31A0..31B7 ; Bopomofo # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H 31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
# Total code points: 65 # Total code points: 70
# ================================================ # ================================================
@ -1370,9 +1399,10 @@ FA30..FA6D ; Han # Lo [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILI
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
# Total code points: 75738 # Total code points: 75960
# ================================================ # ================================================
@ -1410,6 +1440,7 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X 0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA 0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW 064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
065F ; Inherited # Mn ARABIC WAVY HAMZA BELOW
0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF 0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA 0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA 1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
@ -1417,14 +1448,14 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL 1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CED ; Inherited # Mn VEDIC SIGN TIRYAK 1CED ; Inherited # Mn VEDIC SIGN TIRYAK
1DC0..1DE6 ; Inherited # Mn [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z 1DC0..1DE6 ; Inherited # Mn [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
1DFD..1DFF ; Inherited # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1DFC..1DFF ; Inherited # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER 200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE 20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE 20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE 20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
302A..302F ; Inherited # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK 302A..302D ; Inherited # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
FE20..FE26 ; Inherited # Mn [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON FE20..FE26 ; Inherited # Mn [7] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON
@ -1568,8 +1599,9 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY 19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B 19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2 19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
19D0..19DA ; New_Tai_Lue # Nd [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE 19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
19DE..19DF ; New_Tai_Lue # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV 19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE
19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
# Total code points: 83 # Total code points: 83
@ -1584,8 +1616,10 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ 2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK 2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
2D70 ; Tifinagh # Po TIFINAGH SEPARATOR MARK
2D7F ; Tifinagh # Mn TIFINAGH CONSONANT JOINER
# Total code points: 55 # Total code points: 57
# ================================================ # ================================================
@ -1882,8 +1916,9 @@ A6A0..A6E5 ; Bamum # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
16800..16A38 ; Bamum # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
# Total code points: 88 # Total code points: 657
# ================================================ # ================================================
@ -1969,4 +2004,40 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
# Total code points: 66 # Total code points: 66
# ================================================
1BC0..1BE5 ; Batak # Lo [38] BATAK LETTER A..BATAK LETTER U
1BE6 ; Batak # Mn BATAK SIGN TOMPI
1BE7 ; Batak # Mc BATAK VOWEL SIGN E
1BE8..1BE9 ; Batak # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
1BEA..1BEC ; Batak # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
1BED ; Batak # Mn BATAK VOWEL SIGN KARO O
1BEE ; Batak # Mc BATAK VOWEL SIGN U
1BEF..1BF1 ; Batak # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
1BF2..1BF3 ; Batak # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
1BFC..1BFF ; Batak # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
# Total code points: 56
# ================================================
11000 ; Brahmi # Mc BRAHMI SIGN CANDRABINDU
11001 ; Brahmi # Mn BRAHMI SIGN ANUSVARA
11002 ; Brahmi # Mc BRAHMI SIGN VISARGA
11003..11037 ; Brahmi # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11038..11046 ; Brahmi # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
11047..1104D ; Brahmi # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
11052..11065 ; Brahmi # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
11066..1106F ; Brahmi # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
# Total code points: 108
# ================================================
0840..0858 ; Mandaic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0859..085B ; Mandaic # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
085E ; Mandaic # Po MANDAIC PUNCTUATION
# Total code points: 29
# EOF # EOF

View File

@ -1,10 +1,10 @@
# SpecialCasing-5.1.0.txt # SpecialCasing-6.0.0.txt
# Date: 2008-03-03, 21:58:10 GMT [MD] # Date: 2010-05-18, 00:49:39 GMT [MD]
# #
# Unicode Character Database # Unicode Character Database
# Copyright (c) 1991-2008 Unicode, Inc. # Copyright (c) 1991-2010 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html # For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html # For documentation, see http://www.unicode.org/reports/tr44/
# #
# Special Casing Properties # Special Casing Properties
# #
@ -106,11 +106,11 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI 1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
# IMPORTANT-when capitalizing iota-subscript (0345) # IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
# It MUST be in normalized form--moved to the end of any sequence of combining marks. # the result will be incorrect unless the iota-subscript is moved to the end
# This is because logically it represents a following base character! # of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript> # This process can be achieved by first transforming the text to NFC before casing.
# It should never be the first character in a word, so in titlecasing it can be left as is. # E.g. <alpha><iota_subscript><acute> is uppercased to <ALPHA><acute><IOTA>
# The following cases are already in the UnicodeData file, so are only commented here. # The following cases are already in the UnicodeData file, so are only commented here.

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
5.1.0 6.0.0

View File

@ -65,6 +65,7 @@ static jboolean printVersion = JNI_FALSE; /* print and exit */
static jboolean showVersion = JNI_FALSE; /* print but continue */ static jboolean showVersion = JNI_FALSE; /* print but continue */
static jboolean printUsage = JNI_FALSE; /* print and exit*/ static jboolean printUsage = JNI_FALSE; /* print and exit*/
static jboolean printXUsage = JNI_FALSE; /* print and exit*/ static jboolean printXUsage = JNI_FALSE; /* print and exit*/
static char *showSettings = NULL; /* print but continue */
static const char *_program_name; static const char *_program_name;
static const char *_launcher_name; static const char *_launcher_name;
@ -109,6 +110,7 @@ static void SetApplicationClassPath(const char**);
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF); static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
static void PrintUsage(JNIEnv* env, jboolean doXUsage); static void PrintUsage(JNIEnv* env, jboolean doXUsage);
static void ShowSettings(JNIEnv* env, char *optString);
static void SetPaths(int argc, char **argv); static void SetPaths(int argc, char **argv);
@ -157,6 +159,7 @@ static jboolean IsWildCardEnabled();
* create a new thread to invoke JVM. See 6316197 for more information. * create a new thread to invoke JVM. See 6316197 for more information.
*/ */
static jlong threadStackSize = 0; /* stack size of the new thread */ static jlong threadStackSize = 0; /* stack size of the new thread */
static jlong heapSize = 0; /* heap size */
int JNICALL JavaMain(void * args); /* entry point */ int JNICALL JavaMain(void * args); /* entry point */
@ -376,6 +379,10 @@ JavaMain(void * _args)
} }
} }
if (showSettings != NULL) {
ShowSettings(env, showSettings);
CHECK_EXCEPTION_LEAVE(0);
}
/* If the user specified neither a class name nor a JAR file */ /* If the user specified neither a class name nor a JAR file */
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) { if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
PrintUsage(env, printXUsage); PrintUsage(env, printXUsage);
@ -611,7 +618,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
/* copied from HotSpot function "atomll()" */ /* copied from HotSpot function "atomll()" */
static int static int
parse_stack_size(const char *s, jlong *result) { parse_size(const char *s, jlong *result) {
jlong n = 0; jlong n = 0;
int args_read = sscanf(s, jlong_format_specifier(), &n); int args_read = sscanf(s, jlong_format_specifier(), &n);
if (args_read != 1) { if (args_read != 1) {
@ -673,10 +680,17 @@ AddOption(char *str, void *info)
options[numOptions++].extraInfo = info; options[numOptions++].extraInfo = info;
if (JLI_StrCCmp(str, "-Xss") == 0) { if (JLI_StrCCmp(str, "-Xss") == 0) {
jlong tmp; jlong tmp;
if (parse_stack_size(str + 4, &tmp)) { if (parse_size(str + 4, &tmp)) {
threadStackSize = tmp; threadStackSize = tmp;
} }
}
if (JLI_StrCCmp(str, "-Xmx") == 0) {
jlong tmp;
if (parse_size(str + 4, &tmp)) {
heapSize = tmp;
}
} }
} }
@ -1014,6 +1028,13 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
} else if (JLI_StrCmp(arg, "-X") == 0) { } else if (JLI_StrCmp(arg, "-X") == 0) {
printXUsage = JNI_TRUE; printXUsage = JNI_TRUE;
return JNI_TRUE; return JNI_TRUE;
/*
* The following case checks for -XshowSettings OR -XshowSetting:SUBOPT.
* In the latter case, any SUBOPT value not recognized will default to "all"
*/
} else if (JLI_StrCmp(arg, "-XshowSettings") == 0 ||
JLI_StrCCmp(arg, "-XshowSettings:") == 0) {
showSettings = arg;
/* /*
* The following case provide backward compatibility with old-style * The following case provide backward compatibility with old-style
* command line options. * command line options.
@ -1474,6 +1495,27 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
(*env)->CallStaticVoidMethod(env, ver, print); (*env)->CallStaticVoidMethod(env, ver, print);
} }
/*
* Prints all the Java settings, see the java implementation for more details.
*/
static void
ShowSettings(JNIEnv *env, char *optString)
{
jclass cls;
jmethodID showSettingsID;
jstring joptString;
NULL_CHECK(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
"showSettings", "(ZLjava/lang/String;JJZ)V"));
joptString = (*env)->NewStringUTF(env, optString);
(*env)->CallStaticVoidMethod(env, cls, showSettingsID,
JNI_TRUE,
joptString,
(jlong)heapSize,
(jlong)threadStackSize,
ServerClassMachine());
}
/* /*
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java * Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
*/ */

View File

@ -91,6 +91,7 @@ public class HttpsConfigurator {
return context; return context;
} }
//BEGIN_TIGER_EXCLUDE
/** /**
* Called by the HttpsServer to configure the parameters * Called by the HttpsServer to configure the parameters
* for a https connection currently being established. * for a https connection currently being established.
@ -111,4 +112,5 @@ public class HttpsConfigurator {
public void configure (HttpsParameters params) { public void configure (HttpsParameters params) {
params.setSSLParameters (getSSLContext().getDefaultSSLParameters()); params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
} }
//END_TIGER_EXCLUDE
} }

View File

@ -25,7 +25,9 @@
package com.sun.net.httpserver; package com.sun.net.httpserver;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
//BEGIN_TIGER_EXCLUDE
import javax.net.ssl.SSLParameters; import javax.net.ssl.SSLParameters;
//END_TIGER_EXCLUDE
/** /**
* Represents the set of parameters for each https * Represents the set of parameters for each https
@ -67,6 +69,7 @@ public abstract class HttpsParameters {
*/ */
public abstract InetSocketAddress getClientAddress(); public abstract InetSocketAddress getClientAddress();
//BEGIN_TIGER_EXCLUDE
/** /**
* Sets the SSLParameters to use for this HttpsParameters. * Sets the SSLParameters to use for this HttpsParameters.
* The parameters must be supported by the SSLContext contained * The parameters must be supported by the SSLContext contained
@ -79,6 +82,7 @@ public abstract class HttpsParameters {
* invalid or unsupported. * invalid or unsupported.
*/ */
public abstract void setSSLParameters (SSLParameters params); public abstract void setSSLParameters (SSLParameters params);
//END_TIGER_EXCLUDE
/** /**
* Returns a copy of the array of ciphersuites or null if none * Returns a copy of the array of ciphersuites or null if none

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -140,7 +140,7 @@ syncrsimpl.valtores = Value to be resolved can either be in the database or in c
#WebRowSetXmlReader exception #WebRowSetXmlReader exception
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
wrsxmlreader.readxml = readXML : {0} wrsxmlreader.readxml = readXML : {0}
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {0} , uri : {0} wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
#WebRowSetXmlWriter exceptions #WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException : {0} wrsxmlwriter.ioex = IOException : {0}
@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
#XmlReaderContentHandler exceptions #XmlReaderContentHandler exceptions
xmlrch.errmap = Error setting Map : {0} xmlrch.errmap = Error setting Map : {0}
xmlrch.errmetadata = Error setting metadata : {0} xmlrch.errmetadata = Error setting metadata : {0}
xmlrch.errinsert = Error inserting values : {0} xmlrch.errinsertval = Error inserting values : {0}
xmlrch.errconstr = Error constructing row : {0} xmlrch.errconstr = Error constructing row : {0}
xmlrch.errdel = Error deleting row : {0} xmlrch.errdel = Error deleting row : {0}
xmlrch.errinsert = Error constructing insert row : {0} xmlrch.errinsert = Error constructing insert row : {0}
@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
xmlrch.chars = characters : xmlrch.chars = characters :
xmlrch.badvalue = Bad value ; non-nullable property xmlrch.badvalue = Bad value ; non-nullable property
xmlrch.badvalue1 = Bad value ; non-nullable metadata xmlrch.badvalue1 = Bad value ; non-nullable metadata
xmlrch.warning = ** Warning : {0} , line : {0} , uri : {0} xmlrch.warning = ** Warning : {0} , line : {1} , uri : {2}
#RIOptimisticProvider Exceptions #RIOptimisticProvider Exceptions
riop.locking = Locking classification is not supported riop.locking = Locking classification is not supported

View File

@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
// columnValue now need to be reset to the empty string // columnValue now need to be reset to the empty string
columnValue = ""; columnValue = "";
} catch (SQLException ex) { } catch (SQLException ex) {
throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsert").toString(), ex.getMessage())); throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errinsertval").toString(), ex.getMessage()));
} }
break; break;
case RowTag: case RowTag:

View File

@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
* <p> * <p>
* This method applies an arbitrary scale factor to each of the three RGB * This method applies an arbitrary scale factor to each of the three RGB
* components of this <code>Color</code> to create a brighter version * components of this <code>Color</code> to create a brighter version
* of this <code>Color</code>. Although <code>brighter</code> and * of this <code>Color</code>.
* The {@code alpha} value is preserved.
* Although <code>brighter</code> and
* <code>darker</code> are inverse operations, the results of a * <code>darker</code> are inverse operations, the results of a
* series of invocations of these two methods might be inconsistent * series of invocations of these two methods might be inconsistent
* because of rounding errors. * because of rounding errors.
* @return a new <code>Color</code> object that is * @return a new <code>Color</code> object that is
* a brighter version of this <code>Color</code>. * a brighter version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#darker * @see java.awt.Color#darker
* @since JDK1.0 * @since JDK1.0
*/ */
@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
int r = getRed(); int r = getRed();
int g = getGreen(); int g = getGreen();
int b = getBlue(); int b = getBlue();
int alpha = getAlpha();
/* From 2D group: /* From 2D group:
* 1. black.brighter() should return grey * 1. black.brighter() should return grey
@ -632,7 +636,7 @@ public class Color implements Paint, java.io.Serializable {
*/ */
int i = (int)(1.0/(1.0-FACTOR)); int i = (int)(1.0/(1.0-FACTOR));
if ( r == 0 && g == 0 && b == 0) { if ( r == 0 && g == 0 && b == 0) {
return new Color(i, i, i); return new Color(i, i, i, alpha);
} }
if ( r > 0 && r < i ) r = i; if ( r > 0 && r < i ) r = i;
if ( g > 0 && g < i ) g = i; if ( g > 0 && g < i ) g = i;
@ -640,7 +644,8 @@ public class Color implements Paint, java.io.Serializable {
return new Color(Math.min((int)(r/FACTOR), 255), return new Color(Math.min((int)(r/FACTOR), 255),
Math.min((int)(g/FACTOR), 255), Math.min((int)(g/FACTOR), 255),
Math.min((int)(b/FACTOR), 255)); Math.min((int)(b/FACTOR), 255),
alpha);
} }
/** /**
@ -649,19 +654,23 @@ public class Color implements Paint, java.io.Serializable {
* <p> * <p>
* This method applies an arbitrary scale factor to each of the three RGB * This method applies an arbitrary scale factor to each of the three RGB
* components of this <code>Color</code> to create a darker version of * components of this <code>Color</code> to create a darker version of
* this <code>Color</code>. Although <code>brighter</code> and * this <code>Color</code>.
* The {@code alpha} value is preserved.
* Although <code>brighter</code> and
* <code>darker</code> are inverse operations, the results of a series * <code>darker</code> are inverse operations, the results of a series
* of invocations of these two methods might be inconsistent because * of invocations of these two methods might be inconsistent because
* of rounding errors. * of rounding errors.
* @return a new <code>Color</code> object that is * @return a new <code>Color</code> object that is
* a darker version of this <code>Color</code>. * a darker version of this <code>Color</code>
* with the same {@code alpha} value.
* @see java.awt.Color#brighter * @see java.awt.Color#brighter
* @since JDK1.0 * @since JDK1.0
*/ */
public Color darker() { public Color darker() {
return new Color(Math.max((int)(getRed() *FACTOR), 0), return new Color(Math.max((int)(getRed() *FACTOR), 0),
Math.max((int)(getGreen()*FACTOR), 0), Math.max((int)(getGreen()*FACTOR), 0),
Math.max((int)(getBlue() *FACTOR), 0)); Math.max((int)(getBlue() *FACTOR), 0),
getAlpha());
} }
/** /**

View File

@ -51,6 +51,7 @@ import javax.accessibility.*;
import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger;
import sun.awt.AppContext; import sun.awt.AppContext;
import sun.awt.AWTAccessor;
import sun.awt.CausedFocusEvent; import sun.awt.CausedFocusEvent;
import sun.awt.PeerEvent; import sun.awt.PeerEvent;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
@ -247,6 +248,13 @@ public class Container extends Component {
if (!GraphicsEnvironment.isHeadless()) { if (!GraphicsEnvironment.isHeadless()) {
initIDs(); initIDs();
} }
AWTAccessor.setContainerAccessor(new AWTAccessor.ContainerAccessor() {
@Override
public void validateUnconditionally(Container cont) {
cont.validateUnconditionally();
}
});
} }
/** /**

View File

@ -1248,14 +1248,31 @@ public class Dialog extends Window {
/** /**
* Disables or enables decorations for this dialog. * Disables or enables decorations for this dialog.
* This method can only be called while the dialog is not displayable. * <p>
* @param undecorated <code>true</code> if no dialog decorations are * This method can only be called while the dialog is not displayable. To
* to be enabled; * make this dialog decorated, it must be opaque and have the default shape,
* <code>false</code> if dialog decorations are to be enabled. * otherwise the {@code IllegalComponentStateException} will be thrown.
* @throws <code>IllegalComponentStateException</code> if the dialog * Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
* is displayable. * Window#setBackground} for details
*
* @param undecorated {@code true} if no dialog decorations are to be
* enabled; {@code false} if dialog decorations are to be enabled
*
* @throws IllegalComponentStateException if the dialog is displayable
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this dialog does not have the default shape
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this dialog opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and the alpha value of this dialog background
* color is less than {@code 1.0f}
*
* @see #isUndecorated * @see #isUndecorated
* @see Component#isDisplayable * @see Component#isDisplayable
* @see Window#getShape
* @see Window#getOpacity
* @see Window#getBackground
*
* @since 1.4 * @since 1.4
*/ */
public void setUndecorated(boolean undecorated) { public void setUndecorated(boolean undecorated) {
@ -1264,6 +1281,18 @@ public class Dialog extends Window {
if (isDisplayable()) { if (isDisplayable()) {
throw new IllegalComponentStateException("The dialog is displayable."); throw new IllegalComponentStateException("The dialog is displayable.");
} }
if (!undecorated) {
if (getOpacity() < 1.0f) {
throw new IllegalComponentStateException("The dialog is not opaque");
}
if (getShape() != null) {
throw new IllegalComponentStateException("The dialog does not have a default shape");
}
Color bg = getBackground();
if ((bg != null) && (bg.getAlpha() < 255)) {
throw new IllegalComponentStateException("The dialog background color is not opaque");
}
}
this.undecorated = undecorated; this.undecorated = undecorated;
} }
} }
@ -1280,6 +1309,45 @@ public class Dialog extends Window {
return undecorated; return undecorated;
} }
/**
* {@inheritDoc}
*/
@Override
public void setOpacity(float opacity) {
synchronized (getTreeLock()) {
if ((opacity < 1.0f) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setOpacity(opacity);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setShape(Shape shape) {
synchronized (getTreeLock()) {
if ((shape != null) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setShape(shape);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setBackground(Color bgColor) {
synchronized (getTreeLock()) {
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
throw new IllegalComponentStateException("The dialog is decorated");
}
super.setBackground(bgColor);
}
}
/** /**
* Returns a string representing the state of this dialog. This * Returns a string representing the state of this dialog. This
* method is intended to be used only for debugging purposes, and the * method is intended to be used only for debugging purposes, and the

View File

@ -99,7 +99,7 @@ public class FileDialog extends Dialog {
* Contains the File instances for all the files that the user selects. * Contains the File instances for all the files that the user selects.
* *
* @serial * @serial
* @see getFiles * @see #getFiles
* @since 1.7 * @since 1.7
*/ */
private File[] files; private File[] files;

View File

@ -828,6 +828,11 @@ public class Frame extends Window implements MenuContainer {
return frame.state; return frame.state;
} }
} }
public Rectangle getMaximizedBounds(Frame frame) {
synchronized(frame.getObjectLock()) {
return frame.maximizedBounds;
}
}
} }
); );
} }
@ -855,8 +860,10 @@ public class Frame extends Window implements MenuContainer {
* @see #getMaximizedBounds() * @see #getMaximizedBounds()
* @since 1.4 * @since 1.4
*/ */
public synchronized void setMaximizedBounds(Rectangle bounds) { public void setMaximizedBounds(Rectangle bounds) {
this.maximizedBounds = bounds; synchronized(getObjectLock()) {
this.maximizedBounds = bounds;
}
FramePeer peer = (FramePeer)this.peer; FramePeer peer = (FramePeer)this.peer;
if (peer != null) { if (peer != null) {
peer.setMaximizedBounds(bounds); peer.setMaximizedBounds(bounds);
@ -873,21 +880,40 @@ public class Frame extends Window implements MenuContainer {
* @since 1.4 * @since 1.4
*/ */
public Rectangle getMaximizedBounds() { public Rectangle getMaximizedBounds() {
return maximizedBounds; synchronized(getObjectLock()) {
return maximizedBounds;
}
} }
/** /**
* Disables or enables decorations for this frame. * Disables or enables decorations for this frame.
* This method can only be called while the frame is not displayable. * <p>
* @param undecorated <code>true</code> if no frame decorations are * This method can only be called while the frame is not displayable. To
* to be enabled; * make this frame decorated, it must be opaque and have the default shape,
* <code>false</code> if frame decorations are to be enabled. * otherwise the {@code IllegalComponentStateException} will be thrown.
* @throws <code>IllegalComponentStateException</code> if the frame * Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
* is displayable. * Window#setBackground} for details
*
* @param undecorated {@code true} if no frame decorations are to be
* enabled; {@code false} if frame decorations are to be enabled
*
* @throws IllegalComponentStateException if the frame is displayable
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this frame does not have the default shape
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and this frame opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if {@code undecorated} is
* {@code false}, and the alpha value of this frame background
* color is less than {@code 1.0f}
*
* @see #isUndecorated * @see #isUndecorated
* @see Component#isDisplayable * @see Component#isDisplayable
* @see Window#getShape
* @see Window#getOpacity
* @see Window#getBackground
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean) * @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
*
* @since 1.4 * @since 1.4
*/ */
public void setUndecorated(boolean undecorated) { public void setUndecorated(boolean undecorated) {
@ -896,6 +922,18 @@ public class Frame extends Window implements MenuContainer {
if (isDisplayable()) { if (isDisplayable()) {
throw new IllegalComponentStateException("The frame is displayable."); throw new IllegalComponentStateException("The frame is displayable.");
} }
if (!undecorated) {
if (getOpacity() < 1.0f) {
throw new IllegalComponentStateException("The frame is not opaque");
}
if (getShape() != null) {
throw new IllegalComponentStateException("The frame does not have a default shape");
}
Color bg = getBackground();
if ((bg != null) && (bg.getAlpha() < 255)) {
throw new IllegalComponentStateException("The frame background color is not opaque");
}
}
this.undecorated = undecorated; this.undecorated = undecorated;
} }
} }
@ -912,6 +950,45 @@ public class Frame extends Window implements MenuContainer {
return undecorated; return undecorated;
} }
/**
* {@inheritDoc}
*/
@Override
public void setOpacity(float opacity) {
synchronized (getTreeLock()) {
if ((opacity < 1.0f) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setOpacity(opacity);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setShape(Shape shape) {
synchronized (getTreeLock()) {
if ((shape != null) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setShape(shape);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setBackground(Color bgColor) {
synchronized (getTreeLock()) {
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setBackground(bgColor);
}
}
/** /**
* Removes the specified menu bar from this frame. * Removes the specified menu bar from this frame.
* @param m the menu component to remove. * @param m the menu component to remove.

View File

@ -3474,14 +3474,20 @@ public class Window extends Container implements Accessible {
* level of 0 may or may not disable the mouse event handling on this * level of 0 may or may not disable the mouse event handling on this
* window. This is a platform-dependent behavior. * window. This is a platform-dependent behavior.
* <p> * <p>
* In order for this method to enable the translucency effect, the {@link * The following conditions must be met in order to set the opacity value
* GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)} method must indicate that * less than {@code 1.0f}:
* the {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT} * <ul>
* translucency is supported. * <li>The {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
* translucency must be supported by the underlying system
* <li>The window must be undecorated (see {@link Frame#setUndecorated}
* and {@link Dialog#setUndecorated})
* <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)})
* </ul>
* <p> * <p>
* Also note that the window must not be in the full-screen mode when * If the requested opacity value is less than {@code 1.0f}, and any of the
* setting the opacity value &lt; 1.0f. Otherwise the {@code * above conditions are not met, the window opacity will not change,
* IllegalComponentStateException} is thrown. * and the {@code IllegalComponentStateException} will be thrown.
* <p> * <p>
* The translucency levels of individual pixels may also be effected by the * The translucency levels of individual pixels may also be effected by the
* alpha component of their color (see {@link Window#setBackground(Color)}) and the * alpha component of their color (see {@link Window#setBackground(Color)}) and the
@ -3491,15 +3497,20 @@ public class Window extends Container implements Accessible {
* *
* @throws IllegalArgumentException if the opacity is out of the range * @throws IllegalArgumentException if the opacity is out of the range
* [0..1] * [0..1]
* @throws IllegalComponentStateException if the window is decorated and
* the opacity is less than {@code 1.0f}
* @throws IllegalComponentStateException if the window is in full screen * @throws IllegalComponentStateException if the window is in full screen
* mode, and the opacity is less than 1.0f * mode, and the opacity is less than {@code 1.0f}
* @throws UnsupportedOperationException if the {@code * @throws UnsupportedOperationException if the {@code
* GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT} * GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
* translucency kind is not supported and the opacity is less than 1.0f * translucency is not supported and the opacity is less than
* {@code 1.0f}
* *
* @see Window#getOpacity * @see Window#getOpacity
* @see Window#setBackground(Color) * @see Window#setBackground(Color)
* @see Window#setShape(Shape) * @see Window#setShape(Shape)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency * @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency) * @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
* *
@ -3557,24 +3568,26 @@ public class Window extends Container implements Accessible {
/** /**
* Sets the shape of the window. * Sets the shape of the window.
* <p> * <p>
* Setting a shape enables cutting off some parts of the window, leaving * Setting a shape cuts off some parts of the window. Only the parts that
* visible and clickable only those parts belonging to the given shape * belong to the given {@link Shape} remain visible and clickable. If
* (see {@link Shape}). If the shape argument is null, this methods * the shape argument is {@code null}, this method restores the default
* restores the default shape (making the window rectangular on most * shape, making the window rectangular on most platforms.
* platforms.)
* <p> * <p>
* The following conditions must be met in order to set a non-null shape: * The following conditions must be met to set a non-null shape:
* <ul> * <ul>
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT * <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
* PERPIXEL_TRANSPARENT} translucency kind must be supported by the * PERPIXEL_TRANSPARENT} translucency must be supported by the
* underlying system * underlying system
* <i>and</i> * <li>The window must be undecorated (see {@link Frame#setUndecorated}
* <li>The window must not be in the full-screen mode (see * and {@link Dialog#setUndecorated})
* {@link GraphicsDevice#setFullScreenWindow(Window)}) * <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)})
* </ul> * </ul>
* If a certain condition is not met, either the {@code * <p>
* UnsupportedOperationException} or {@code IllegalComponentStateException} * If the requested shape is not {@code null}, and any of the above
* is thrown. * conditions are not met, the shape of this window will not change,
* and either the {@code UnsupportedOperationException} or {@code
* IllegalComponentStateException} will be thrown.
* <p> * <p>
* The tranlucency levels of individual pixels may also be effected by the * The tranlucency levels of individual pixels may also be effected by the
* alpha component of their color (see {@link Window#setBackground(Color)}) and the * alpha component of their color (see {@link Window#setBackground(Color)}) and the
@ -3584,6 +3597,8 @@ public class Window extends Container implements Accessible {
* @param shape the shape to set to the window * @param shape the shape to set to the window
* *
* @throws IllegalComponentStateException if the shape is not {@code * @throws IllegalComponentStateException if the shape is not {@code
* null} and the window is decorated
* @throws IllegalComponentStateException if the shape is not {@code
* null} and the window is in full-screen mode * null} and the window is in full-screen mode
* @throws UnsupportedOperationException if the shape is not {@code * @throws UnsupportedOperationException if the shape is not {@code
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT * null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
@ -3592,6 +3607,8 @@ public class Window extends Container implements Accessible {
* @see Window#getShape() * @see Window#getShape()
* @see Window#setBackground(Color) * @see Window#setBackground(Color)
* @see Window#setOpacity(float) * @see Window#setOpacity(float)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency * @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency) * @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
* *
@ -3645,37 +3662,46 @@ public class Window extends Container implements Accessible {
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT} * GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
* tranclucency, the alpha component of the given background color * tranclucency, the alpha component of the given background color
* may effect the mode of operation for this window: it indicates whether * may effect the mode of operation for this window: it indicates whether
* this window must be opaque (alpha == 1.0f) or per-pixel translucent * this window must be opaque (alpha equals {@code 1.0f}) or per-pixel translucent
* (alpha &lt; 1.0f). All the following conditions must be met in order * (alpha is less than {@code 1.0f}). If the given background color is
* to be able to enable the per-pixel transparency mode for this window: * {@code null}, the window is considered completely opaque.
* <p>
* All the following conditions must be met to enable the per-pixel
* transparency mode for this window:
* <ul> * <ul>
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT * <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
* PERPIXEL_TRANSLUCENT} translucency must be supported * PERPIXEL_TRANSLUCENT} translucency must be supported by the graphics
* by the graphics device where this window is located <i>and</i> * device where this window is located
* <li>The window must not be in the full-screen mode (see {@link * <li>The window must be undecorated (see {@link Frame#setUndecorated}
* and {@link Dialog#setUndecorated})
* <li>The window must not be in full-screen mode (see {@link
* GraphicsDevice#setFullScreenWindow(Window)}) * GraphicsDevice#setFullScreenWindow(Window)})
* </ul> * </ul>
* If a certain condition is not met at the time of calling this method, * <p>
* the alpha component of the given background color will not effect the * If the alpha component of the requested background color is less than
* mode of operation for this window. * {@code 1.0f}, and any of the above conditions are not met, the background
* color of this window will not change, the alpha component of the given
* background color will not affect the mode of operation for this window,
* and either the {@code UnsupportedOperationException} or {@code
* IllegalComponentStateException} will be thrown.
* <p> * <p>
* When the window is per-pixel translucent, the drawing sub-system * When the window is per-pixel translucent, the drawing sub-system
* respects the alpha value of each individual pixel. If a pixel gets * respects the alpha value of each individual pixel. If a pixel gets
* painted with the alpha color component equal to zero, it becomes * painted with the alpha color component equal to zero, it becomes
* visually transparent, if the alpha of the pixel is equal to 1.0f, the * visually transparent. If the alpha of the pixel is equal to 1.0f, the
* pixel is fully opaque. Interim values of the alpha color component make * pixel is fully opaque. Interim values of the alpha color component make
* the pixel semi-transparent. In this mode the background of the window * the pixel semi-transparent. In this mode, the background of the window
* gets painted with the alpha value of the given background color (meaning * gets painted with the alpha value of the given background color. If the
* that it is not painted at all if the alpha value of the argument of this * alpha value of the argument of this method is equal to {@code 0}, the
* method is equal to zero.) * background is not painted at all.
* <p> * <p>
* The actual level of translucency of a given pixel also depends on window * The actual level of translucency of a given pixel also depends on window
* opacity (see {@link #setOpacity(float)}), as well as the current shape of * opacity (see {@link #setOpacity(float)}), as well as the current shape of
* this window (see {@link #setShape(Shape)}). * this window (see {@link #setShape(Shape)}).
* <p> * <p>
* Note that painting a pixel with the alpha value of 0 may or may not * Note that painting a pixel with the alpha value of {@code 0} may or may
* disable the mouse event handling on this pixel. This is a * not disable the mouse event handling on this pixel. This is a
* platform-dependent behavior. To make sure the mouse clicks do not get * platform-dependent behavior. To make sure the mouse events do not get
* dispatched to a particular pixel, the pixel must be excluded from the * dispatched to a particular pixel, the pixel must be excluded from the
* shape of the window. * shape of the window.
* <p> * <p>
@ -3685,17 +3711,21 @@ public class Window extends Container implements Accessible {
* @param bgColor the color to become this window's background color. * @param bgColor the color to become this window's background color.
* *
* @throws IllegalComponentStateException if the alpha value of the given * @throws IllegalComponentStateException if the alpha value of the given
* background color is less than 1.0f and the window is in * background color is less than {@code 1.0f} and the window is decorated
* @throws IllegalComponentStateException if the alpha value of the given
* background color is less than {@code 1.0f} and the window is in
* full-screen mode * full-screen mode
* @throws UnsupportedOperationException if the alpha value of the given * @throws UnsupportedOperationException if the alpha value of the given
* background color is less than 1.0f and * background color is less than {@code 1.0f} and {@link
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT * GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
* PERPIXEL_TRANSLUCENT} translucency is not supported * PERPIXEL_TRANSLUCENT} translucency is not supported
* *
* @see Window#getBackground * @see Window#getBackground
* @see Window#isOpaque * @see Window#isOpaque
* @see Window#setOpacity(float) * @see Window#setOpacity(float)
* @see Window#setShape(Shape) * @see Window#setShape(Shape)
* @see Frame#isUndecorated
* @see Dialog#isUndecorated
* @see GraphicsDevice.WindowTranslucency * @see GraphicsDevice.WindowTranslucency
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency) * @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
* @see GraphicsConfiguration#isTranslucencyCapable() * @see GraphicsConfiguration#isTranslucencyCapable()
@ -3739,7 +3769,7 @@ public class Window extends Container implements Accessible {
* <p> * <p>
* The method returns {@code false} if the background color of the window * The method returns {@code false} if the background color of the window
* is not {@code null} and the alpha component of the color is less than * is not {@code null} and the alpha component of the color is less than
* 1.0f. The method returns {@code true} otherwise. * {@code 1.0f}. The method returns {@code true} otherwise.
* *
* @return {@code true} if the window is opaque, {@code false} otherwise * @return {@code true} if the window is opaque, {@code false} otherwise
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -262,7 +262,23 @@ public final class NumericShaper implements java.io.Serializable {
/** /**
* The Cham range with the Cham digits. * The Cham range with the Cham digits.
*/ */
CHAM ('\uaa50', '\uaa00', '\uaa60'); CHAM ('\uaa50', '\uaa00', '\uaa60'),
/**
* The Tai Tham Hora range with the Tai Tham Hora digits.
*/
TAI_THAM_HORA ('\u1a80', '\u1a20', '\u1ab0'),
/**
* The Tai Tham Tham range with the Tai Tham Tham digits.
*/
TAI_THAM_THAM ('\u1a90', '\u1a20', '\u1ab0'),
/**
* The Javanese range with the Javanese digits.
*/
JAVANESE ('\ua9d0', '\ua980', '\ua9e0'),
/**
* The Meetei Mayek range with the Meetei Mayek digits.
*/
MEETEI_MAYEK ('\uabf0', '\uabc0', '\uac00');
private static int toRangeIndex(Range script) { private static int toRangeIndex(Range script) {
int index = script.ordinal(); int index = script.ordinal();
@ -592,10 +608,16 @@ public final class NumericShaper implements java.io.Serializable {
0x07a6, 0x07b1, 0x07a6, 0x07b1,
0x07eb, 0x07f4, 0x07eb, 0x07f4,
0x07f6, 0x07fa, 0x07f6, 0x07fa,
0x0901, 0x0903, 0x0816, 0x081a,
0x081b, 0x0824,
0x0825, 0x0828,
0x0829, 0x0830,
0x0859, 0x085e,
0x0900, 0x0903,
0x093a, 0x093b,
0x093c, 0x093d, 0x093c, 0x093d,
0x0941, 0x0949, 0x0941, 0x0949,
0x094d, 0x0950, 0x094d, 0x094e,
0x0951, 0x0958, 0x0951, 0x0958,
0x0962, 0x0964, 0x0962, 0x0964,
0x0981, 0x0982, 0x0981, 0x0982,
@ -604,7 +626,7 @@ public final class NumericShaper implements java.io.Serializable {
0x09cd, 0x09ce, 0x09cd, 0x09ce,
0x09e2, 0x09e6, 0x09e2, 0x09e6,
0x09f2, 0x09f4, 0x09f2, 0x09f4,
0x0a01, 0x0a03, 0x09fb, 0x0a03,
0x0a3c, 0x0a3e, 0x0a3c, 0x0a3e,
0x0a41, 0x0a59, 0x0a41, 0x0a59,
0x0a70, 0x0a72, 0x0a70, 0x0a72,
@ -630,9 +652,8 @@ public final class NumericShaper implements java.io.Serializable {
0x0cbc, 0x0cbd, 0x0cbc, 0x0cbd,
0x0ccc, 0x0cd5, 0x0ccc, 0x0cd5,
0x0ce2, 0x0ce6, 0x0ce2, 0x0ce6,
0x0cf1, 0x0d02,
0x0d41, 0x0d46, 0x0d41, 0x0d46,
0x0d4d, 0x0d57, 0x0d4d, 0x0d4e,
0x0d62, 0x0d66, 0x0d62, 0x0d66,
0x0dca, 0x0dcf, 0x0dca, 0x0dcf,
0x0dd2, 0x0dd8, 0x0dd2, 0x0dd8,
@ -649,7 +670,7 @@ public final class NumericShaper implements java.io.Serializable {
0x0f71, 0x0f7f, 0x0f71, 0x0f7f,
0x0f80, 0x0f85, 0x0f80, 0x0f85,
0x0f86, 0x0f88, 0x0f86, 0x0f88,
0x0f90, 0x0fbe, 0x0f8d, 0x0fbe,
0x0fc6, 0x0fc7, 0x0fc6, 0x0fc7,
0x102d, 0x1031, 0x102d, 0x1031,
0x1032, 0x1038, 0x1032, 0x1038,
@ -661,8 +682,10 @@ public final class NumericShaper implements java.io.Serializable {
0x1082, 0x1083, 0x1082, 0x1083,
0x1085, 0x1087, 0x1085, 0x1087,
0x108d, 0x108e, 0x108d, 0x108e,
0x135f, 0x1360, 0x109d, 0x109e,
0x135d, 0x1360,
0x1390, 0x13a0, 0x1390, 0x13a0,
0x1400, 0x1401,
0x1680, 0x1681, 0x1680, 0x1681,
0x169b, 0x16a0, 0x169b, 0x16a0,
0x1712, 0x1720, 0x1712, 0x1720,
@ -682,6 +705,11 @@ public final class NumericShaper implements java.io.Serializable {
0x1939, 0x1946, 0x1939, 0x1946,
0x19de, 0x1a00, 0x19de, 0x1a00,
0x1a17, 0x1a19, 0x1a17, 0x1a19,
0x1a56, 0x1a57,
0x1a58, 0x1a61,
0x1a62, 0x1a63,
0x1a65, 0x1a6d,
0x1a73, 0x1a80,
0x1b00, 0x1b04, 0x1b00, 0x1b04,
0x1b34, 0x1b35, 0x1b34, 0x1b35,
0x1b36, 0x1b3b, 0x1b36, 0x1b3b,
@ -691,8 +719,16 @@ public final class NumericShaper implements java.io.Serializable {
0x1b80, 0x1b82, 0x1b80, 0x1b82,
0x1ba2, 0x1ba6, 0x1ba2, 0x1ba6,
0x1ba8, 0x1baa, 0x1ba8, 0x1baa,
0x1be6, 0x1be7,
0x1be8, 0x1bea,
0x1bed, 0x1bee,
0x1bef, 0x1bf2,
0x1c2c, 0x1c34, 0x1c2c, 0x1c34,
0x1c36, 0x1c3b, 0x1c36, 0x1c3b,
0x1cd0, 0x1cd3,
0x1cd4, 0x1ce1,
0x1ce2, 0x1ce9,
0x1ced, 0x1cee,
0x1dc0, 0x1e00, 0x1dc0, 0x1e00,
0x1fbd, 0x1fbe, 0x1fbd, 0x1fbe,
0x1fbf, 0x1fc2, 0x1fbf, 0x1fc2,
@ -716,14 +752,16 @@ public final class NumericShaper implements java.io.Serializable {
0x213a, 0x213c, 0x213a, 0x213c,
0x2140, 0x2145, 0x2140, 0x2145,
0x214a, 0x214e, 0x214a, 0x214e,
0x2153, 0x2160, 0x2150, 0x2160,
0x2190, 0x2336, 0x2189, 0x2336,
0x237b, 0x2395, 0x237b, 0x2395,
0x2396, 0x249c, 0x2396, 0x249c,
0x24ea, 0x26ac, 0x24ea, 0x26ac,
0x26ad, 0x2800, 0x26ad, 0x2800,
0x2900, 0x2c00, 0x2900, 0x2c00,
0x2ce5, 0x2d00, 0x2ce5, 0x2ceb,
0x2cef, 0x2d00,
0x2d7f, 0x2d80,
0x2de0, 0x3005, 0x2de0, 0x3005,
0x3008, 0x3021, 0x3008, 0x3021,
0x302a, 0x3031, 0x302a, 0x3031,
@ -742,25 +780,40 @@ public final class NumericShaper implements java.io.Serializable {
0x33de, 0x33e0, 0x33de, 0x33e0,
0x33ff, 0x3400, 0x33ff, 0x3400,
0x4dc0, 0x4e00, 0x4dc0, 0x4e00,
0xa490, 0xa500, 0xa490, 0xa4d0,
0xa60d, 0xa610, 0xa60d, 0xa610,
0xa66f, 0xa680, 0xa66f, 0xa680,
0xa6f0, 0xa6f2,
0xa700, 0xa722, 0xa700, 0xa722,
0xa788, 0xa789, 0xa788, 0xa789,
0xa802, 0xa803, 0xa802, 0xa803,
0xa806, 0xa807, 0xa806, 0xa807,
0xa80b, 0xa80c, 0xa80b, 0xa80c,
0xa825, 0xa827, 0xa825, 0xa827,
0xa828, 0xa840, 0xa828, 0xa830,
0xa838, 0xa840,
0xa874, 0xa880, 0xa874, 0xa880,
0xa8c4, 0xa8ce, 0xa8c4, 0xa8ce,
0xa8e0, 0xa8f2,
0xa926, 0xa92e, 0xa926, 0xa92e,
0xa947, 0xa952, 0xa947, 0xa952,
0xa980, 0xa983,
0xa9b3, 0xa9b4,
0xa9b6, 0xa9ba,
0xa9bc, 0xa9bd,
0xaa29, 0xaa2f, 0xaa29, 0xaa2f,
0xaa31, 0xaa33, 0xaa31, 0xaa33,
0xaa35, 0xaa40, 0xaa35, 0xaa40,
0xaa43, 0xaa44, 0xaa43, 0xaa44,
0xaa4c, 0xaa4d, 0xaa4c, 0xaa4d,
0xaab0, 0xaab1,
0xaab2, 0xaab5,
0xaab7, 0xaab9,
0xaabe, 0xaac0,
0xaac1, 0xaac2,
0xabe5, 0xabe6,
0xabe8, 0xabe9,
0xabed, 0xabf0,
0xfb1e, 0xfb1f, 0xfb1e, 0xfb1f,
0xfb29, 0xfb2a, 0xfb29, 0xfb2a,
0xfd3e, 0xfd50, 0xfd3e, 0xfd50,
@ -775,12 +828,28 @@ public final class NumericShaper implements java.io.Serializable {
0x1091f, 0x10920, 0x1091f, 0x10920,
0x10a01, 0x10a10, 0x10a01, 0x10a10,
0x10a38, 0x10a40, 0x10a38, 0x10a40,
0x10b39, 0x10b40,
0x10e60, 0x11000,
0x11001, 0x11002,
0x11038, 0x11047,
0x11052, 0x11066,
0x11080, 0x11082,
0x110b3, 0x110b7,
0x110b9, 0x110bb,
0x1d167, 0x1d16a, 0x1d167, 0x1d16a,
0x1d173, 0x1d183, 0x1d173, 0x1d183,
0x1d185, 0x1d18c, 0x1d185, 0x1d18c,
0x1d1aa, 0x1d1ae, 0x1d1aa, 0x1d1ae,
0x1d200, 0x1d360, 0x1d200, 0x1d360,
0x1d7ce, 0x20000, 0x1d6db, 0x1d6dc,
0x1d715, 0x1d716,
0x1d74f, 0x1d750,
0x1d789, 0x1d78a,
0x1d7c3, 0x1d7c4,
0x1d7ce, 0x1f110,
0x1f300, 0x1f48c,
0x1f48d, 0x1f524,
0x1f525, 0x20000,
0xe0001, 0xf0000, 0xe0001, 0xf0000,
0x10fffe, 0x10ffff // sentinel 0x10fffe, 0x10ffff // sentinel
}; };
@ -947,6 +1016,14 @@ public final class NumericShaper implements java.io.Serializable {
&& rangeSet.contains(Range.ARABIC)) { && rangeSet.contains(Range.ARABIC)) {
rangeSet.remove(Range.ARABIC); rangeSet.remove(Range.ARABIC);
} }
// As well as the above case, give precedance to TAI_THAM_THAM if both
// TAI_THAM_HORA and TAI_THAM_THAM are specified.
if (rangeSet.contains(Range.TAI_THAM_THAM)
&& rangeSet.contains(Range.TAI_THAM_HORA)) {
rangeSet.remove(Range.TAI_THAM_HORA);
}
rangeArray = rangeSet.toArray(new Range[rangeSet.size()]); rangeArray = rangeSet.toArray(new Range[rangeSet.size()]);
if (rangeArray.length > BSEARCH_THRESHOLD) { if (rangeArray.length > BSEARCH_THRESHOLD) {
// sort rangeArray for binary search // sort rangeArray for binary search

View File

@ -29,6 +29,8 @@ import com.sun.beans.WeakCache;
import com.sun.beans.finder.BeanInfoFinder; import com.sun.beans.finder.BeanInfoFinder;
import com.sun.beans.finder.ClassFinder; import com.sun.beans.finder.ClassFinder;
import java.awt.Component;
import java.lang.ref.Reference; import java.lang.ref.Reference;
import java.lang.ref.SoftReference; import java.lang.ref.SoftReference;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -39,6 +41,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.EventListener; import java.util.EventListener;
import java.util.EventObject;
import java.util.List; import java.util.List;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.WeakHashMap; import java.util.WeakHashMap;
@ -1234,7 +1237,23 @@ public class Introspector {
} }
} }
// OK, fabricate a default BeanDescriptor. // OK, fabricate a default BeanDescriptor.
return (new BeanDescriptor(beanClass)); return new BeanDescriptor(this.beanClass, findCustomizerClass(this.beanClass));
}
private static Class<?> findCustomizerClass(Class<?> type) {
String name = type.getName() + "Customizer";
try {
type = ClassFinder.findClass(name, type.getClassLoader());
// Each customizer should inherit java.awt.Component and implement java.beans.Customizer
// according to the section 9.3 of JavaBeans specification
if (Component.class.isAssignableFrom(type) && Customizer.class.isAssignableFrom(type)) {
return type;
}
}
catch (Exception exception) {
// ignore any exceptions
}
return null;
} }
private boolean isEventHandler(Method m) { private boolean isEventHandler(Method m) {
@ -1244,10 +1263,7 @@ public class Introspector {
if (argTypes.length != 1) { if (argTypes.length != 1) {
return false; return false;
} }
if (isSubclass(argTypes[0], java.util.EventObject.class)) { return isSubclass(argTypes[0], EventObject.class);
return true;
}
return false;
} }
/* /*

View File

@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
* or an I/O error occurs. * or an I/O error occurs.
*/ */
public synchronized int available() throws IOException { public synchronized int available() throws IOException {
return getInIfOpen().available() + (count - pos); int n = count - pos;
int avail = getInIfOpen().available();
return n > (Integer.MAX_VALUE - avail)
? Integer.MAX_VALUE
: n + avail;
} }
/** /**

View File

@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
*/ */
public int available() throws IOException { public int available() throws IOException {
ensureOpen(); ensureOpen();
return (buf.length - pos) + super.available(); int n = buf.length - pos;
int avail = super.available();
return n > (Integer.MAX_VALUE - avail)
? Integer.MAX_VALUE
: n + avail;
} }
/** /**

File diff suppressed because it is too large Load Diff

View File

@ -44,11 +44,11 @@ public interface Readable {
* rewinding of the buffer is performed. * rewinding of the buffer is performed.
* *
* @param cb the buffer to read characters into * @param cb the buffer to read characters into
* @return @return The number of <tt>char</tt> values added to the buffer, * @return The number of {@code char} values added to the buffer,
* or -1 if this source of characters is at its end * or -1 if this source of characters is at its end
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
* @throws NullPointerException if cb is null * @throws NullPointerException if cb is null
* @throws ReadOnlyBufferException if cb is a read only buffer * @throws java.nio.ReadOnlyBufferException if cb is a read only buffer
*/ */
public int read(java.nio.CharBuffer cb) throws IOException; public int read(java.nio.CharBuffer cb) throws IOException;

View File

@ -47,7 +47,7 @@ class StringCharBuffer // package-private
0, 0,
this.remaining(), this.remaining(),
this.remaining(), this.remaining(),
this.position()); offset + this.position());
} }
private StringCharBuffer(CharSequence s, private StringCharBuffer(CharSequence s,

View File

@ -110,7 +110,8 @@ import java.nio.ByteBuffer;
* state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O * state of the {@link ByteBuffer}, or the sequence of buffers, for the I/O
* operation is not defined. Buffers should be discarded or at least care must * operation is not defined. Buffers should be discarded or at least care must
* be taken to ensure that the buffers are not accessed while the channel remains * be taken to ensure that the buffers are not accessed while the channel remains
* open. * open. All methods that accept timeout parameters treat values less than or
* equal to zero to mean that the I/O operation does not timeout.
* *
* @since 1.7 * @since 1.7
*/ */
@ -367,7 +368,7 @@ public abstract class AsynchronousSocketChannel
* @param dst * @param dst
* The buffer into which bytes are to be transferred * The buffer into which bytes are to be transferred
* @param timeout * @param timeout
* The timeout, or {@code 0L} for no timeout * The maximum time for the I/O operation to complete
* @param unit * @param unit
* The time unit of the {@code timeout} argument * The time unit of the {@code timeout} argument
* @param attachment * @param attachment
@ -376,8 +377,7 @@ public abstract class AsynchronousSocketChannel
* The handler for consuming the result * The handler for consuming the result
* *
* @throws IllegalArgumentException * @throws IllegalArgumentException
* If the {@code timeout} parameter is negative or the buffer is * If the buffer is read-only
* read-only
* @throws ReadPendingException * @throws ReadPendingException
* If a read operation is already in progress on this channel * If a read operation is already in progress on this channel
* @throws NotYetConnectedException * @throws NotYetConnectedException
@ -471,7 +471,7 @@ public abstract class AsynchronousSocketChannel
* The maximum number of buffers to be accessed; must be non-negative * The maximum number of buffers to be accessed; must be non-negative
* and no larger than {@code dsts.length - offset} * and no larger than {@code dsts.length - offset}
* @param timeout * @param timeout
* The timeout, or {@code 0L} for no timeout * The maximum time for the I/O operation to complete
* @param unit * @param unit
* The time unit of the {@code timeout} argument * The time unit of the {@code timeout} argument
* @param attachment * @param attachment
@ -483,8 +483,7 @@ public abstract class AsynchronousSocketChannel
* If the pre-conditions for the {@code offset} and {@code length} * If the pre-conditions for the {@code offset} and {@code length}
* parameter aren't met * parameter aren't met
* @throws IllegalArgumentException * @throws IllegalArgumentException
* If the {@code timeout} parameter is negative, or a buffer is * If the buffer is read-only
* read-only
* @throws ReadPendingException * @throws ReadPendingException
* If a read operation is already in progress on this channel * If a read operation is already in progress on this channel
* @throws NotYetConnectedException * @throws NotYetConnectedException
@ -524,7 +523,7 @@ public abstract class AsynchronousSocketChannel
* @param src * @param src
* The buffer from which bytes are to be retrieved * The buffer from which bytes are to be retrieved
* @param timeout * @param timeout
* The timeout, or {@code 0L} for no timeout * The maximum time for the I/O operation to complete
* @param unit * @param unit
* The time unit of the {@code timeout} argument * The time unit of the {@code timeout} argument
* @param attachment * @param attachment
@ -532,8 +531,6 @@ public abstract class AsynchronousSocketChannel
* @param handler * @param handler
* The handler for consuming the result * The handler for consuming the result
* *
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative
* @throws WritePendingException * @throws WritePendingException
* If a write operation is already in progress on this channel * If a write operation is already in progress on this channel
* @throws NotYetConnectedException * @throws NotYetConnectedException
@ -623,7 +620,7 @@ public abstract class AsynchronousSocketChannel
* The maximum number of buffers to be accessed; must be non-negative * The maximum number of buffers to be accessed; must be non-negative
* and no larger than {@code srcs.length - offset} * and no larger than {@code srcs.length - offset}
* @param timeout * @param timeout
* The timeout, or {@code 0L} for no timeout * The maximum time for the I/O operation to complete
* @param unit * @param unit
* The time unit of the {@code timeout} argument * The time unit of the {@code timeout} argument
* @param attachment * @param attachment
@ -634,8 +631,6 @@ public abstract class AsynchronousSocketChannel
* @throws IndexOutOfBoundsException * @throws IndexOutOfBoundsException
* If the pre-conditions for the {@code offset} and {@code length} * If the pre-conditions for the {@code offset} and {@code length}
* parameter aren't met * parameter aren't met
* @throws IllegalArgumentException
* If the {@code timeout} parameter is negative
* @throws WritePendingException * @throws WritePendingException
* If a write operation is already in progress on this channel * If a write operation is already in progress on this channel
* @throws NotYetConnectedException * @throws NotYetConnectedException

View File

@ -84,7 +84,7 @@ import java.security.*;
* {@code setJNDIContext} and {@code setLogger}</td> * {@code setJNDIContext} and {@code setLogger}</td>
* <td>Permits an application to specify the JNDI context from which the * <td>Permits an application to specify the JNDI context from which the
* {@code SyncProvider} implementations can be retrieved from and the logging * {@code SyncProvider} implementations can be retrieved from and the logging
* object to be used by the{@codeSyncProvider} implementation.</td> * object to be used by the {@code SyncProvider} implementation.</td>
* </tr> * </tr>
* *
* <tr> * <tr>

View File

@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
* instance of the Java virtual machine. * instance of the Java virtual machine.
* *
* <tr><td valign="top">{@code 'Z'} * <tr><td valign="top">{@code 'Z'}
* <td valign="top"> <tt>'&#92;u005a'</tt>
* <td> A string representing the abbreviation for the time zone. This * <td> A string representing the abbreviation for the time zone. This
* value will be adjusted as necessary for Daylight Saving Time. For * value will be adjusted as necessary for Daylight Saving Time. For
* {@code long}, {@link Long}, and {@link Date} the time zone used is * {@code long}, {@link Long}, and {@link Date} the time zone used is

View File

@ -25,7 +25,9 @@
package java.util.spi; package java.util.spi;
import java.util.Arrays;
import java.util.Currency; import java.util.Currency;
import java.util.List;
import java.util.Locale; import java.util.Locale;
/** /**
@ -95,6 +97,23 @@ public abstract class CurrencyNameProvider extends LocaleServiceProvider {
throw new NullPointerException(); throw new NullPointerException();
} }
// Check whether the currencyCode is valid
char[] charray = currencyCode.toCharArray();
if (charray.length != 3) {
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
}
for (char c : charray) {
if (c < 'A' || c > 'Z') {
throw new IllegalArgumentException("The currencyCode is not in the form of three upper-case letters.");
}
}
// Check whether the locale is valid
List<Locale> avail = Arrays.asList(getAvailableLocales());
if (!avail.contains(locale)) {
throw new IllegalArgumentException("The locale is not available");
}
return null; return null;
} }
} }

View File

@ -94,7 +94,9 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider {
* @see java.util.Locale#getDisplayScript(java.util.Locale) * @see java.util.Locale#getDisplayScript(java.util.Locale)
* @since 1.7 * @since 1.7
*/ */
public abstract String getDisplayScript(String scriptCode, Locale locale); public String getDisplayScript(String scriptCode, Locale locale) {
return null;
}
/** /**
* Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt"> * Returns a localized name for the given <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">

View File

@ -25,6 +25,9 @@
package javax.security.auth; package javax.security.auth;
import java.security.Security;
import sun.security.util.Debug;
/** /**
* <p> This is an abstract class for representing the system policy for * <p> This is an abstract class for representing the system policy for
* Subject-based authorization. A subclass implementation * Subject-based authorization. A subclass implementation
@ -159,6 +162,10 @@ public abstract class Policy {
private static Policy policy; private static Policy policy;
private static ClassLoader contextClassLoader; private static ClassLoader contextClassLoader;
// true if a custom (not com.sun.security.auth.PolicyFile) system-wide
// policy object is set
private static boolean isCustomPolicy;
static { static {
contextClassLoader = java.security.AccessController.doPrivileged contextClassLoader = java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction<ClassLoader>() { (new java.security.PrivilegedAction<ClassLoader>() {
@ -234,6 +241,8 @@ public abstract class Policy {
contextClassLoader).newInstance(); contextClassLoader).newInstance();
} }
}); });
isCustomPolicy =
!finalClass.equals("com.sun.security.auth.PolicyFile");
} catch (Exception e) { } catch (Exception e) {
throw new SecurityException throw new SecurityException
(sun.security.util.ResourcesMgr.getString (sun.security.util.ResourcesMgr.getString
@ -265,6 +274,46 @@ public abstract class Policy {
java.lang.SecurityManager sm = System.getSecurityManager(); java.lang.SecurityManager sm = System.getSecurityManager();
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy")); if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
Policy.policy = policy; Policy.policy = policy;
// all non-null policy objects are assumed to be custom
isCustomPolicy = policy != null ? true : false;
}
/**
* Returns true if a custom (not com.sun.security.auth.PolicyFile)
* system-wide policy object has been set or installed. This method is
* called by SubjectDomainCombiner to provide backwards compatibility for
* developers that provide their own javax.security.auth.Policy
* implementations.
*
* @return true if a custom (not com.sun.security.auth.PolicyFile)
* system-wide policy object has been set; false otherwise
*/
static boolean isCustomPolicySet(Debug debug) {
if (policy != null) {
if (debug != null && isCustomPolicy) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
policy.toString());
}
return isCustomPolicy;
}
// check if custom policy has been set using auth.policy.provider prop
String policyClass = java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction<String>() {
public String run() {
return Security.getProperty("auth.policy.provider");
}
});
if (policyClass != null
&& !policyClass.equals("com.sun.security.auth.PolicyFile")) {
if (debug != null) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
policyClass);
}
return true;
}
return false;
} }
/** /**

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -26,8 +26,6 @@
package javax.security.auth; package javax.security.auth;
import java.security.AccessController; import java.security.AccessController;
import java.security.AccessControlContext;
import java.security.AllPermission;
import java.security.Permission; import java.security.Permission;
import java.security.Permissions; import java.security.Permissions;
import java.security.PermissionCollection; import java.security.PermissionCollection;
@ -35,10 +33,8 @@ import java.security.Policy;
import java.security.Principal; import java.security.Principal;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.security.ProtectionDomain; import java.security.ProtectionDomain;
import java.lang.ClassLoader;
import java.security.Security; import java.security.Security;
import java.util.Set; import java.util.Set;
import java.util.Iterator;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
@ -61,7 +57,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
"\t[SubjectDomainCombiner]"); "\t[SubjectDomainCombiner]");
// Note: check only at classloading time, not dynamically during combine() // Note: check only at classloading time, not dynamically during combine()
private static final boolean useJavaxPolicy = compatPolicy(); private static final boolean useJavaxPolicy =
javax.security.auth.Policy.isCustomPolicySet(debug);
// Relevant only when useJavaxPolicy is true // Relevant only when useJavaxPolicy is true
private static final boolean allowCaching = private static final boolean allowCaching =
@ -202,8 +199,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
return null; return null;
} }
// maintain backwards compatibility for people who provide // maintain backwards compatibility for developers who provide
// their own javax.security.auth.Policy implementations // their own custom javax.security.auth.Policy implementations
if (useJavaxPolicy) { if (useJavaxPolicy) {
return combineJavaxPolicy(currentDomains, assignedDomains); return combineJavaxPolicy(currentDomains, assignedDomains);
} }
@ -476,8 +473,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
String s = AccessController.doPrivileged String s = AccessController.doPrivileged
(new PrivilegedAction<String>() { (new PrivilegedAction<String>() {
public String run() { public String run() {
return java.security.Security.getProperty return Security.getProperty("cache.auth.policy");
("cache.auth.policy");
} }
}); });
if (s != null) { if (s != null) {
@ -488,29 +484,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
return true; return true;
} }
// maintain backwards compatibility for people who provide
// their own javax.security.auth.Policy implementations
private static boolean compatPolicy() {
javax.security.auth.Policy javaxPolicy = AccessController.doPrivileged
(new PrivilegedAction<javax.security.auth.Policy>() {
public javax.security.auth.Policy run() {
return javax.security.auth.Policy.getPolicy();
}
});
if (!(javaxPolicy instanceof com.sun.security.auth.PolicyFile)) {
if (debug != null) {
debug.println("Providing backwards compatibility for " +
"javax.security.auth.policy implementation: " +
javaxPolicy.toString());
}
return true;
} else {
return false;
}
}
private static void printInputDomains(ProtectionDomain[] currentDomains, private static void printInputDomains(ProtectionDomain[] currentDomains,
ProtectionDomain[] assignedDomains) { ProtectionDomain[] assignedDomains) {
if (currentDomains == null || currentDomains.length == 0) { if (currentDomains == null || currentDomains.length == 0) {

View File

@ -1379,6 +1379,10 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
* If <code>true</code> and the button has a border, * If <code>true</code> and the button has a border,
* the border is painted. The default value for the * the border is painted. The default value for the
* <code>borderPainted</code> property is <code>true</code>. * <code>borderPainted</code> property is <code>true</code>.
* <p/>
* Some look and feels might not support
* the <code>borderPainted</code> property,
* in which case they ignore this.
* *
* @param b if true and border property is not <code>null</code>, * @param b if true and border property is not <code>null</code>,
* the border is painted * the border is painted

View File

@ -273,7 +273,7 @@ public class BorderFactory
* @since 1.7 * @since 1.7
*/ */
public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) { public static Border createSoftBevelBorder(int type, Color highlight, Color shadow) {
return new BevelBorder(type, highlight, shadow); return new SoftBevelBorder(type, highlight, shadow);
} }
/** /**
@ -295,7 +295,7 @@ public class BorderFactory
* @since 1.7 * @since 1.7
*/ */
public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) { public static Border createSoftBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner) {
return new BevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner); return new SoftBevelBorder(type, highlightOuter, highlightInner, shadowOuter, shadowInner);
} }
//// EtchedBorder /////////////////////////////////////////////////////////// //// EtchedBorder ///////////////////////////////////////////////////////////

View File

@ -322,7 +322,7 @@ public final class JLayer<V extends Component>
} }
/** /**
* A non-{@code null] border, or non-zero insets, isn't supported, to prevent the geometry * A non-{@code null} border, or non-zero insets, isn't supported, to prevent the geometry
* of this component from becoming complex enough to inhibit * of this component from becoming complex enough to inhibit
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border, * subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
* add it to a {@code JPanel} that has a border. * add it to a {@code JPanel} that has a border.
@ -373,8 +373,12 @@ public final class JLayer<V extends Component>
* {@inheritDoc} * {@inheritDoc}
*/ */
public void removeAll() { public void removeAll() {
setView(null); if (view != null) {
setGlassPane(null); setView(null);
}
if (glassPane != null) {
setGlassPane(null);
}
} }
/** /**

View File

@ -1443,6 +1443,10 @@ public class JTabbedPane extends JComponent
* which can be <code>null</code>, in which case the tab's background color * which can be <code>null</code>, in which case the tab's background color
* will default to the background color of the <code>tabbedpane</code>. * will default to the background color of the <code>tabbedpane</code>.
* An internal exception is raised if there is no tab at that index. * An internal exception is raised if there is no tab at that index.
* <p/>
* It is up to the look and feel to honor this property, some may
* choose to ignore it.
*
* @param index the tab index where the background should be set * @param index the tab index where the background should be set
* @param background the color to be displayed in the tab's background * @param background the color to be displayed in the tab's background
* @exception IndexOutOfBoundsException if index is out of range * @exception IndexOutOfBoundsException if index is out of range
@ -1472,6 +1476,9 @@ public class JTabbedPane extends JComponent
* <code>null</code>, in which case the tab's foreground color * <code>null</code>, in which case the tab's foreground color
* will default to the foreground color of this <code>tabbedpane</code>. * will default to the foreground color of this <code>tabbedpane</code>.
* An internal exception is raised if there is no tab at that index. * An internal exception is raised if there is no tab at that index.
* <p/>
* It is up to the look and feel to honor this property, some may
* choose to ignore it.
* *
* @param index the tab index where the foreground should be set * @param index the tab index where the foreground should be set
* @param foreground the color to be displayed as the tab's foreground * @param foreground the color to be displayed as the tab's foreground

View File

@ -165,11 +165,11 @@ public class TitledBorder extends AbstractBorder
* @param titlePosition the position for the title * @param titlePosition the position for the title
*/ */
public TitledBorder(Border border, public TitledBorder(Border border,
String title, String title,
int titleJustification, int titleJustification,
int titlePosition) { int titlePosition) {
this(border, title, titleJustification, this(border, title, titleJustification,
titlePosition, null, null); titlePosition, null, null);
} }
/** /**
@ -183,12 +183,12 @@ public class TitledBorder extends AbstractBorder
* @param titleFont the font for rendering the title * @param titleFont the font for rendering the title
*/ */
public TitledBorder(Border border, public TitledBorder(Border border,
String title, String title,
int titleJustification, int titleJustification,
int titlePosition, int titlePosition,
Font titleFont) { Font titleFont) {
this(border, title, titleJustification, this(border, title, titleJustification,
titlePosition, titleFont, null); titlePosition, titleFont, null);
} }
/** /**
@ -205,11 +205,11 @@ public class TitledBorder extends AbstractBorder
*/ */
@ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"}) @ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
public TitledBorder(Border border, public TitledBorder(Border border,
String title, String title,
int titleJustification, int titleJustification,
int titlePosition, int titlePosition,
Font titleFont, Font titleFont,
Color titleColor) { Color titleColor) {
this.title = title; this.title = title;
this.border = border; this.border = border;
this.titleFont = titleFont; this.titleFont = titleFont;
@ -234,7 +234,7 @@ public class TitledBorder extends AbstractBorder
* @param height the height of the painted border * @param height the height of the painted border
*/ */
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Border border = getBorderUI(); Border border = getBorder();
String title = getTitle(); String title = getTitle();
if ((title != null) && !title.isEmpty()) { if ((title != null) && !title.isEmpty()) {
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING; int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
@ -347,7 +347,7 @@ public class TitledBorder extends AbstractBorder
* @param insets the object to be reinitialized * @param insets the object to be reinitialized
*/ */
public Insets getBorderInsets(Component c, Insets insets) { public Insets getBorderInsets(Component c, Insets insets) {
Border border = getBorderUI(); Border border = getBorder();
if (border == null) { if (border == null) {
insets.set(0, 0, 0, 0); insets.set(0, 0, 0, 0);
} }
@ -402,22 +402,34 @@ public class TitledBorder extends AbstractBorder
/** /**
* Returns whether or not the border is opaque. * Returns whether or not the border is opaque.
*/ */
public boolean isBorderOpaque() { return false; } public boolean isBorderOpaque() {
return false;
}
/** /**
* Returns the title of the titled border. * Returns the title of the titled border.
*
* @return the title of the titled border
*/ */
public String getTitle() { return title; } public String getTitle() {
return title;
}
/** /**
* Returns the border of the titled border. * Returns the border of the titled border.
*
* @return the border of the titled border
*/ */
public Border getBorder() { public Border getBorder() {
return border; return border != null
? border
: UIManager.getBorder("TitledBorder.border");
} }
/** /**
* Returns the title-position of the titled border. * Returns the title-position of the titled border.
*
* @return the title-position of the titled border
*/ */
public int getTitlePosition() { public int getTitlePosition() {
return titlePosition; return titlePosition;
@ -425,20 +437,28 @@ public class TitledBorder extends AbstractBorder
/** /**
* Returns the title-justification of the titled border. * Returns the title-justification of the titled border.
*
* @return the title-justification of the titled border
*/ */
public int getTitleJustification() { return titleJustification; } public int getTitleJustification() {
return titleJustification;
}
/** /**
* Returns the title-font of the titled border. * Returns the title-font of the titled border.
*
* @return the title-font of the titled border
*/ */
public Font getTitleFont() { public Font getTitleFont() {
return titleFont; return titleFont;
} }
/** /**
* Returns the title-color of the titled border. * Returns the title-color of the titled border.
*
* @return the title-color of the titled border
*/ */
public Color getTitleColor() { public Color getTitleColor() {
return titleColor; return titleColor;
} }
@ -447,15 +467,19 @@ public class TitledBorder extends AbstractBorder
/** /**
* Sets the title of the titled border. * Sets the title of the titled border.
* param title the title for the border * @param title the title for the border
*/ */
public void setTitle(String title) { this.title = title; } public void setTitle(String title) {
this.title = title;
}
/** /**
* Sets the border of the titled border. * Sets the border of the titled border.
* @param border the border * @param border the border
*/ */
public void setBorder(Border border) { this.border = border; } public void setBorder(Border border) {
this.border = border;
}
/** /**
* Sets the title-position of the titled border. * Sets the title-position of the titled border.
@ -482,19 +506,19 @@ public class TitledBorder extends AbstractBorder
* Sets the title-justification of the titled border. * Sets the title-justification of the titled border.
* @param titleJustification the justification for the border * @param titleJustification the justification for the border
*/ */
public void setTitleJustification(int titleJustification) { public void setTitleJustification(int titleJustification) {
switch (titleJustification) { switch (titleJustification) {
case DEFAULT_JUSTIFICATION: case DEFAULT_JUSTIFICATION:
case LEFT: case LEFT:
case CENTER: case CENTER:
case RIGHT: case RIGHT:
case LEADING: case LEADING:
case TRAILING: case TRAILING:
this.titleJustification = titleJustification; this.titleJustification = titleJustification;
break; break;
default: default:
throw new IllegalArgumentException(titleJustification + throw new IllegalArgumentException(titleJustification +
" is not a valid title justification."); " is not a valid title justification.");
} }
} }
@ -518,6 +542,7 @@ public class TitledBorder extends AbstractBorder
* Returns the minimum dimensions this border requires * Returns the minimum dimensions this border requires
* in order to fully display the border and title. * in order to fully display the border and title.
* @param c the component where this border will be drawn * @param c the component where this border will be drawn
* @return the {@code Dimension} object
*/ */
public Dimension getMinimumSize(Component c) { public Dimension getMinimumSize(Component c) {
Insets insets = getBorderInsets(c); Insets insets = getBorderInsets(c);
@ -557,7 +582,7 @@ public class TitledBorder extends AbstractBorder
if (height < 0) { if (height < 0) {
throw new IllegalArgumentException("Height must be >= 0"); throw new IllegalArgumentException("Height must be >= 0");
} }
Border border = getBorderUI(); Border border = getBorder();
String title = getTitle(); String title = getTitle();
if ((title != null) && !title.isEmpty()) { if ((title != null) && !title.isEmpty()) {
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING; int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
@ -616,13 +641,6 @@ public class TitledBorder extends AbstractBorder
return Component.BaselineResizeBehavior.OTHER; return Component.BaselineResizeBehavior.OTHER;
} }
private Border getBorderUI() {
Border border = getBorder();
return border != null
? border
: UIManager.getBorder("TitledBorder.border");
}
private int getPosition() { private int getPosition() {
int position = getTitlePosition(); int position = getTitlePosition();
if (position != DEFAULT_POSITION) { if (position != DEFAULT_POSITION) {

View File

@ -449,8 +449,8 @@ public class LayerUI<V extends Component>
/** /**
* Configures the {@code JLayer} this {@code LayerUI} is set to. * Configures the {@code JLayer} this {@code LayerUI} is set to.
* The default implementation registers the {@code LayerUI} * The default implementation registers the passed {@code JLayer} component
* as a property change listener for the passed {@code JLayer} component. * as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
* *
* @param c the {@code JLayer} component where this UI delegate is being installed * @param c the {@code JLayer} component where this UI delegate is being installed
*/ */
@ -461,8 +461,8 @@ public class LayerUI<V extends Component>
/** /**
* Reverses the configuration which was previously set * Reverses the configuration which was previously set
* in the {@link #installUI(JComponent)} method. * in the {@link #installUI(JComponent)} method.
* The default implementation unregisters the property change listener * The default implementation unregisters the passed {@code JLayer} component
* for the passed JLayer component. * as a {@code PropertyChangeListener} for the property changes of this {@code LayerUI}.
* *
* @param c the component from which this UI delegate is being removed. * @param c the component from which this UI delegate is being removed.
*/ */

View File

@ -196,6 +196,10 @@ public class BasicMenuUI extends BasicMenuItemUI
return getHandler(); return getHandler();
} }
protected MenuKeyListener createMenuKeyListener(JComponent c) {
return (MenuKeyListener)getHandler();
}
public Dimension getMaximumSize(JComponent c) { public Dimension getMaximumSize(JComponent c) {
if (((JMenu)menuItem).isTopLevelMenu() == true) { if (((JMenu)menuItem).isTopLevelMenu() == true) {
Dimension d = c.getPreferredSize(); Dimension d = c.getPreferredSize();
@ -397,7 +401,7 @@ public class BasicMenuUI extends BasicMenuItemUI
public void stateChanged(ChangeEvent e) { } public void stateChanged(ChangeEvent e) { }
} }
private class Handler extends BasicMenuItemUI.Handler { private class Handler extends BasicMenuItemUI.Handler implements MenuKeyListener {
// //
// PropertyChangeListener // PropertyChangeListener
// //
@ -580,5 +584,48 @@ public class BasicMenuUI extends BasicMenuItemUI
} }
public void menuDragMouseExited(MenuDragMouseEvent e) {} public void menuDragMouseExited(MenuDragMouseEvent e) {}
public void menuDragMouseReleased(MenuDragMouseEvent e) {} public void menuDragMouseReleased(MenuDragMouseEvent e) {}
//
// MenuKeyListener
//
/**
* Open the Menu
*/
public void menuKeyTyped(MenuKeyEvent e) {
if (!crossMenuMnemonic && BasicPopupMenuUI.getLastPopup() != null) {
// when crossMenuMnemonic is not set, we don't open a toplevel
// menu if another toplevel menu is already open
return;
}
if (BasicPopupMenuUI.getPopups().size() != 0) {
//Fix 6939261: to return in case not on the main menu
//and has a pop-up.
//after return code will be handled in BasicPopupMenuUI.java
return;
}
char key = Character.toLowerCase((char)menuItem.getMnemonic());
MenuElement path[] = e.getPath();
if (key == Character.toLowerCase(e.getKeyChar())) {
JPopupMenu popupMenu = ((JMenu)menuItem).getPopupMenu();
ArrayList newList = new ArrayList(Arrays.asList(path));
newList.add(popupMenu);
MenuElement subs[] = popupMenu.getSubElements();
MenuElement sub =
BasicPopupMenuUI.findEnabledChild(subs, -1, true);
if(sub != null) {
newList.add(sub);
}
MenuSelectionManager manager = e.getMenuSelectionManager();
MenuElement newPath[] = new MenuElement[0];;
newPath = (MenuElement[]) newList.toArray(newPath);
manager.setSelectedPath(newPath);
e.consume();
}
}
public void menuKeyPressed(MenuKeyEvent e) {}
public void menuKeyReleased(MenuKeyEvent e) {}
} }
} }

View File

@ -81,17 +81,26 @@ public class MetalScrollPaneUI extends BasicScrollPaneUI
} }
} }
public void installListeners(JScrollPane scrollPane) { public void installListeners(JScrollPane scrollPane) {
super.installListeners(scrollPane); super.installListeners(scrollPane);
scrollBarSwapListener = createScrollBarSwapListener(); scrollBarSwapListener = createScrollBarSwapListener();
scrollPane.addPropertyChangeListener(scrollBarSwapListener); scrollPane.addPropertyChangeListener(scrollBarSwapListener);
} }
/**
* {@inheritDoc}
*/
protected void uninstallListeners(JComponent c) {
super.uninstallListeners(c);
c.removePropertyChangeListener(scrollBarSwapListener);
}
/**
* @deprecated - Replaced by {@link #uninstallListeners(JComponent)}
*/
@Deprecated
public void uninstallListeners(JScrollPane scrollPane) { public void uninstallListeners(JScrollPane scrollPane) {
super.uninstallListeners(scrollPane); super.uninstallListeners(scrollPane);
scrollPane.removePropertyChangeListener(scrollBarSwapListener); scrollPane.removePropertyChangeListener(scrollBarSwapListener);
} }

View File

@ -223,6 +223,16 @@ public final class AWTAccessor {
void processEvent(Component comp, AWTEvent e); void processEvent(Component comp, AWTEvent e);
} }
/*
* An interface of accessor for the java.awt.Container class.
*/
public interface ContainerAccessor {
/**
* Validates the container unconditionally.
*/
void validateUnconditionally(Container cont);
}
/* /*
* An interface of accessor for java.awt.Window class. * An interface of accessor for java.awt.Window class.
*/ */
@ -334,6 +344,10 @@ public final class AWTAccessor {
* Gets the state of this frame. * Gets the state of this frame.
*/ */
int getExtendedState(Frame frame); int getExtendedState(Frame frame);
/*
* Gets the maximized bounds of this frame.
*/
Rectangle getMaximizedBounds(Frame frame);
} }
/* /*
@ -440,53 +454,19 @@ public final class AWTAccessor {
} }
/* /*
* The java.awt.Component class accessor object. * Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/ */
private static ComponentAccessor componentAccessor; private static ComponentAccessor componentAccessor;
private static ContainerAccessor containerAccessor;
/*
* The java.awt.Window class accessor object.
*/
private static WindowAccessor windowAccessor; private static WindowAccessor windowAccessor;
/*
* The java.awt.AWTEvent class accessor object.
*/
private static AWTEventAccessor awtEventAccessor; private static AWTEventAccessor awtEventAccessor;
/*
* The java.awt.event.InputEvent class accessor object.
*/
private static InputEventAccessor inputEventAccessor; private static InputEventAccessor inputEventAccessor;
/*
* The java.awt.Frame class accessor object.
*/
private static FrameAccessor frameAccessor; private static FrameAccessor frameAccessor;
/*
* The java.awt.KeyboardFocusManager class accessor object.
*/
private static KeyboardFocusManagerAccessor kfmAccessor; private static KeyboardFocusManagerAccessor kfmAccessor;
/*
* The java.awt.MenuComponent class accessor object.
*/
private static MenuComponentAccessor menuComponentAccessor; private static MenuComponentAccessor menuComponentAccessor;
/*
* The java.awt.EventQueue class accessor object.
*/
private static EventQueueAccessor eventQueueAccessor; private static EventQueueAccessor eventQueueAccessor;
/*
* The java.awt.PopupMenu class accessor object.
*/
private static PopupMenuAccessor popupMenuAccessor; private static PopupMenuAccessor popupMenuAccessor;
/*
* The java.awt.FileDialog class accessor object.
*/
private static FileDialogAccessor fileDialogAccessor; private static FileDialogAccessor fileDialogAccessor;
/* /*
@ -497,7 +477,7 @@ public final class AWTAccessor {
} }
/* /*
* Retrieve the accessor object for the java.awt.Window class. * Retrieve the accessor object for the java.awt.Component class.
*/ */
public static ComponentAccessor getComponentAccessor() { public static ComponentAccessor getComponentAccessor() {
if (componentAccessor == null) { if (componentAccessor == null) {
@ -507,6 +487,24 @@ public final class AWTAccessor {
return componentAccessor; return componentAccessor;
} }
/*
* Set an accessor object for the java.awt.Container class.
*/
public static void setContainerAccessor(ContainerAccessor ca) {
containerAccessor = ca;
}
/*
* Retrieve the accessor object for the java.awt.Container class.
*/
public static ContainerAccessor getContainerAccessor() {
if (containerAccessor == null) {
unsafe.ensureClassInitialized(Container.class);
}
return containerAccessor;
}
/* /*
* Set an accessor object for the java.awt.Window class. * Set an accessor object for the java.awt.Window class.
*/ */

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.io;
import sun.nio.cs.ext.IBM833;
public class ByteToCharCp833 extends ByteToCharSingleByte {
private final static IBM833 nioCoder = new IBM833();
public String getCharacterEncoding() {
return "Cp833";
}
public ByteToCharCp833() {
super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
}
}

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.io;
import sun.nio.cs.ext.IBM833;
public class CharToByteCp833 extends CharToByteSingleByte {
private final static IBM833 nioCoder = new IBM833();
public String getCharacterEncoding() {
return "Cp833";
}
public CharToByteCp833() {
super.mask1 = 0xFF00;
super.mask2 = 0x00FF;
super.shift = 8;
super.index1 = nioCoder.getEncoderIndex1();
super.index2 = nioCoder.getEncoderIndex2();
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -406,6 +406,11 @@ public class CharacterEncoding {
aliasTable.put("cp775", "Cp775"); aliasTable.put("cp775", "Cp775");
aliasTable.put("775", "Cp775"); aliasTable.put("775", "Cp775");
aliasTable.put("ibm833", "Cp833");
aliasTable.put("ibm-833", "Cp833");
aliasTable.put("cp833", "Cp833");
aliasTable.put("833", "Cp833");
aliasTable.put("ibm834", "Cp834"); aliasTable.put("ibm834", "Cp834");
aliasTable.put("ibm-834", "Cp834"); aliasTable.put("ibm-834", "Cp834");
aliasTable.put("cp834", "Cp834"); aliasTable.put("cp834", "Cp834");

View File

@ -44,8 +44,16 @@ import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.jar.Attributes; import java.util.jar.Attributes;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.jar.Manifest; import java.util.jar.Manifest;
@ -59,6 +67,17 @@ public enum LauncherHelper {
private static StringBuilder outBuf = new StringBuilder(); private static StringBuilder outBuf = new StringBuilder();
private static ResourceBundle javarb = null; private static ResourceBundle javarb = null;
private static final String INDENT = " ";
private static final String VM_SETTINGS = "VM settings:";
private static final String PROP_SETTINGS = "Property settings:";
private static final String LOCALE_SETTINGS = "Locale settings:";
private static final long K = 1024;
private static final long M = K * K;
private static final long G = M * K;
private static final long T = G * K;
private static synchronized ResourceBundle getLauncherResourceBundle() { private static synchronized ResourceBundle getLauncherResourceBundle() {
if (javarb == null) { if (javarb == null) {
javarb = ResourceBundle.getBundle(defaultBundleName); javarb = ResourceBundle.getBundle(defaultBundleName);
@ -66,6 +85,184 @@ public enum LauncherHelper {
return javarb; return javarb;
} }
/*
* A method called by the launcher to print out the standard settings,
* by default -XshowSettings is equivalent to -XshowSettings:all,
* Specific information may be gotten by using suboptions with possible
* values vm, properties and locale.
*
* printToStderr: choose between stdout and stderr
*
* optionFlag: specifies which options to print default is all other
* possible values are vm, properties, locale.
*
* maxHeapSize: in bytes, as set by the launcher, a zero-value indicates
* this code should determine this value, using a suitable method.
*
* stackSize: in bytes, as set by the launcher, a zero-value indicates
* this code determine this value, using a suitable method.
*/
static void showSettings(boolean printToStderr, String optionFlag,
long maxHeapSize, long stackSize, boolean isServer) {
PrintStream ostream = (printToStderr) ? System.err : System.out;
String opts[] = optionFlag.split(":");
String optStr = (opts.length > 1 && opts[1] != null)
? opts[1].trim()
: "all";
switch (optStr) {
case "vm":
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
break;
case "properties":
printProperties(ostream);
break;
case "locale":
printLocale(ostream);
break;
default:
printVmSettings(ostream, maxHeapSize, stackSize, isServer);
printProperties(ostream);
printLocale(ostream);
break;
}
}
/*
* prints the main vm settings subopt/section
*/
private static void printVmSettings(PrintStream ostream, long maxHeapSize,
long stackSize, boolean isServer) {
ostream.println(VM_SETTINGS);
if (stackSize != 0L) {
ostream.println(INDENT + "Stack Size: " + scaleValue(stackSize));
}
if (maxHeapSize != 0L) {
ostream.println(INDENT + "Max. Heap Size: " + scaleValue(maxHeapSize));
} else {
ostream.println(INDENT + "Max. Heap Size (Estimated): "
+ scaleValue(Runtime.getRuntime().maxMemory()));
}
ostream.println(INDENT + "Ergonomics Machine Class: "
+ ((isServer) ? "server" : "client"));
ostream.println(INDENT + "Using VM: "
+ System.getProperty("java.vm.name"));
ostream.println();
}
/*
* scale the incoming values to a human readable form, represented as
* K, M, G and T, see java.c parse_size for the scaled values and
* suffixes.
*/
private static String scaleValue(double v) {
MathContext mc2 = new MathContext(3, RoundingMode.HALF_EVEN);
if (v >= K && v < M) {
return (new BigDecimal(v / K, mc2)).toPlainString() + "K";
} else if (v >= M && v < G) {
return (new BigDecimal(v / M, mc2)).toPlainString() + "M";
} else if (v >= G && v < T) {
return (new BigDecimal(v / G, mc2)).toPlainString() + "G";
} else if (v >= T) {
return (new BigDecimal(v / T, mc2)).toPlainString() + "T";
} else {
return String.format("%.0f", v);
}
}
/*
* prints the properties subopt/section
*/
private static void printProperties(PrintStream ostream) {
Properties p = System.getProperties();
ostream.println(PROP_SETTINGS);
List<String> sortedPropertyKeys = new ArrayList<>();
sortedPropertyKeys.addAll(p.stringPropertyNames());
Collections.sort(sortedPropertyKeys);
for (String x : sortedPropertyKeys) {
printPropertyValue(ostream, x, p.getProperty(x));
}
ostream.println();
}
private static boolean isPath(String key) {
return key.endsWith(".dirs") || key.endsWith(".path");
}
private static void printPropertyValue(PrintStream ostream,
String key, String value) {
ostream.print(INDENT + key + " = ");
if (key.equals("line.separator")) {
byte[] bytes = value.getBytes();
for (byte b : bytes) {
switch (b) {
case 0xd:
ostream.print("CR ");
break;
case 0xa:
ostream.print("LF ");
break;
default:
ostream.printf("0x%02X", b & 0xff);
break;
}
}
ostream.println();
return;
}
if (!isPath(key)) {
ostream.println(value);
return;
}
// pretty print the path values as a list
String[] values = value.split(System.getProperty("path.separator"));
int len = values.length;
for (int i = 0 ; i < len ; i++) {
if (i == 0) { // first line treated specially
ostream.println(values[i]);
} else { // following lines prefix with indents
ostream.print(INDENT + INDENT);
ostream.println(values[i]);
}
}
}
/*
* prints the locale subopt/section
*/
private static void printLocale(PrintStream ostream) {
Locale locale = Locale.getDefault();
ostream.println(LOCALE_SETTINGS);
ostream.println(INDENT + "default locale = " + locale.getDisplayLanguage());
printLocales(ostream);
ostream.println();
}
private static void printLocales(PrintStream ostream) {
Locale[] locales = Locale.getAvailableLocales();
final int len = locales == null ? 0 : locales.length;
if (len < 1 ) {
return;
}
ostream.print(INDENT + "available locales = ");
final int last = len - 1 ;
for (int i = 0; i < last ; i++) {
ostream.print(locales[i]);
if (i != last) {
ostream.print(", ");
}
// print columns of 8
if ((i + 1) % 8 == 0) {
ostream.println();
ostream.print(INDENT + INDENT);
}
}
ostream.println(locales[last]);
}
/** /**
* A private helper method to get a localized message and also * A private helper method to get a localized message and also
* apply any arguments that we might pass. * apply any arguments that we might pass.

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -97,7 +97,15 @@ java.launcher.X.usage=\
\ -Xcheck:jni perform additional checks for JNI functions\n\ \ -Xcheck:jni perform additional checks for JNI functions\n\
\ -Xshare:off do not attempt to use shared class data\n\ \ -Xshare:off do not attempt to use shared class data\n\
\ -Xshare:auto use shared class data if possible (default)\n\ \ -Xshare:auto use shared class data if possible (default)\n\
\ -Xshare:on require using shared class data, otherwise fail.\n\n\ \ -Xshare:on require using shared class data, otherwise fail.\n\
\ -XshowSettings show all settings and continue\n\
\ -XshowSettings:all\n\
\ show all settings and continue\n\
\ -XshowSettings:vm show all vm related settings and continue\n\
\ -XshowSettings:properties\n\
\ show all property settings and continue\n\
\ -XshowSettings:locale\n\
\ show all locale related settings and continue\n\n\
The -X options are non-standard and subject to change without notice.\n The -X options are non-standard and subject to change without notice.\n
java.launcher.cls.error1=\ java.launcher.cls.error1=\

View File

@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
if (remaining == 0) { if (remaining == 0) {
eof = true; eof = true;
consumeCRLF(); consumeCRLF();
t.getServerImpl().requestCompleted (t.getConnection());
return -1; return -1;
} }
needToReadHeader = false; needToReadHeader = false;

View File

@ -40,5 +40,7 @@ class Event {
class WriteFinishedEvent extends Event { class WriteFinishedEvent extends Event {
WriteFinishedEvent (ExchangeImpl t) { WriteFinishedEvent (ExchangeImpl t) {
super (t); super (t);
assert !t.writefinished;
t.writefinished = true;
} }
} }

View File

@ -38,6 +38,7 @@ class ExchangeImpl {
Headers reqHdrs, rspHdrs; Headers reqHdrs, rspHdrs;
Request req; Request req;
String method; String method;
boolean writefinished;
URI uri; URI uri;
HttpConnection connection; HttpConnection connection;
long reqContentLen; long reqContentLen;

View File

@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
int n = in.read(b, off, len); int n = in.read(b, off, len);
if (n > -1) { if (n > -1) {
remaining -= n; remaining -= n;
if (remaining == 0) {
t.getServerImpl().requestCompleted (t.getConnection());
}
} }
return n; return n;
} }

View File

@ -55,10 +55,15 @@ class HttpConnection {
SelectionKey selectionKey; SelectionKey selectionKey;
String protocol; String protocol;
long time; long time;
volatile long creationTime; // time this connection was created
volatile long rspStartedTime; // time we started writing the response
int remaining; int remaining;
boolean closed = false; boolean closed = false;
Logger logger; Logger logger;
public enum State {IDLE, REQUEST, RESPONSE};
volatile State state;
public String toString() { public String toString() {
String s = null; String s = null;
if (chan != null) { if (chan != null) {
@ -78,6 +83,14 @@ class HttpConnection {
context = ctx; context = ctx;
} }
State getState() {
return state;
}
void setState (State s) {
state = s;
}
void setParameters ( void setParameters (
InputStream in, OutputStream rawout, SocketChannel chan, InputStream in, OutputStream rawout, SocketChannel chan,
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol, SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,

View File

@ -201,32 +201,22 @@ class Request {
static class ReadStream extends InputStream { static class ReadStream extends InputStream {
SocketChannel channel; SocketChannel channel;
SelectorCache sc;
Selector selector;
ByteBuffer chanbuf; ByteBuffer chanbuf;
SelectionKey key;
int available;
byte[] one; byte[] one;
boolean closed = false, eof = false; private boolean closed = false, eof = false;
ByteBuffer markBuf; /* reads may be satisifed from this buffer */ ByteBuffer markBuf; /* reads may be satisifed from this buffer */
boolean marked; boolean marked;
boolean reset; boolean reset;
int readlimit; int readlimit;
static long readTimeout; static long readTimeout;
ServerImpl server; ServerImpl server;
final static int BUFSIZE = 8 * 1024;
static {
readTimeout = ServerConfig.getReadTimeout();
}
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException { public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
this.channel = chan; this.channel = chan;
this.server = server; this.server = server;
sc = SelectorCache.getSelectorCache(); chanbuf = ByteBuffer.allocate (BUFSIZE);
selector = sc.getSelector(); chanbuf.clear();
chanbuf = ByteBuffer.allocate (8* 1024);
key = chan.register (selector, SelectionKey.OP_READ);
available = 0;
one = new byte[1]; one = new byte[1];
closed = marked = reset = false; closed = marked = reset = false;
} }
@ -255,6 +245,12 @@ class Request {
return -1; return -1;
} }
assert channel.isBlocking();
if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
throw new IndexOutOfBoundsException ();
}
if (reset) { /* satisfy from markBuf */ if (reset) { /* satisfy from markBuf */
canreturn = markBuf.remaining (); canreturn = markBuf.remaining ();
willreturn = canreturn>srclen ? srclen : canreturn; willreturn = canreturn>srclen ? srclen : canreturn;
@ -263,17 +259,19 @@ class Request {
reset = false; reset = false;
} }
} else { /* satisfy from channel */ } else { /* satisfy from channel */
canreturn = available(); chanbuf.clear ();
while (canreturn == 0 && !eof) { if (srclen < BUFSIZE) {
block (); chanbuf.limit (srclen);
canreturn = available();
} }
if (eof) { do {
willreturn = channel.read (chanbuf);
} while (willreturn == 0);
if (willreturn == -1) {
eof = true;
return -1; return -1;
} }
willreturn = canreturn>srclen ? srclen : canreturn; chanbuf.flip ();
chanbuf.get(b, off, willreturn); chanbuf.get(b, off, willreturn);
available -= willreturn;
if (marked) { /* copy into markBuf */ if (marked) { /* copy into markBuf */
try { try {
@ -286,6 +284,11 @@ class Request {
return willreturn; return willreturn;
} }
public boolean markSupported () {
return true;
}
/* Does not query the OS socket */
public synchronized int available () throws IOException { public synchronized int available () throws IOException {
if (closed) if (closed)
throw new IOException ("Stream is closed"); throw new IOException ("Stream is closed");
@ -296,36 +299,7 @@ class Request {
if (reset) if (reset)
return markBuf.remaining(); return markBuf.remaining();
if (available > 0) return chanbuf.remaining();
return available;
chanbuf.clear ();
available = channel.read (chanbuf);
if (available > 0) {
chanbuf.flip();
} else if (available == -1) {
eof = true;
available = 0;
}
return available;
}
/**
* block() only called when available==0 and buf is empty
*/
private synchronized void block () throws IOException {
long currtime = server.getTime();
long maxtime = currtime + readTimeout;
while (currtime < maxtime) {
if (selector.select (readTimeout) == 1) {
selector.selectedKeys().clear();
available ();
return;
}
currtime = server.getTime();
}
throw new SocketTimeoutException ("no data received");
} }
public void close () throws IOException { public void close () throws IOException {
@ -333,8 +307,6 @@ class Request {
return; return;
} }
channel.close (); channel.close ();
selector.selectNow();
sc.freeSelector(selector);
closed = true; closed = true;
} }
@ -362,23 +334,14 @@ class Request {
SocketChannel channel; SocketChannel channel;
ByteBuffer buf; ByteBuffer buf;
SelectionKey key; SelectionKey key;
SelectorCache sc;
Selector selector;
boolean closed; boolean closed;
byte[] one; byte[] one;
ServerImpl server; ServerImpl server;
static long writeTimeout;
static {
writeTimeout = ServerConfig.getWriteTimeout();
}
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException { public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
this.channel = channel; this.channel = channel;
this.server = server; this.server = server;
sc = SelectorCache.getSelectorCache(); assert channel.isBlocking();
selector = sc.getSelector();
key = channel.register (selector, SelectionKey.OP_WRITE);
closed = false; closed = false;
one = new byte [1]; one = new byte [1];
buf = ByteBuffer.allocate (4096); buf = ByteBuffer.allocate (4096);
@ -411,31 +374,14 @@ class Request {
l -= n; l -= n;
if (l == 0) if (l == 0)
return; return;
block();
} }
} }
void block () throws IOException {
long currtime = server.getTime();
long maxtime = currtime + writeTimeout;
while (currtime < maxtime) {
if (selector.select (writeTimeout) == 1) {
selector.selectedKeys().clear ();
return;
}
currtime = server.getTime();
}
throw new SocketTimeoutException ("write blocked too long");
}
public void close () throws IOException { public void close () throws IOException {
if (closed) if (closed)
return; return;
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
channel.close (); channel.close ();
selector.selectNow();
sc.freeSelector(selector);
closed = true; closed = true;
} }
} }

View File

@ -53,8 +53,6 @@ class SSLStreams {
EngineWrapper wrapper; EngineWrapper wrapper;
OutputStream os; OutputStream os;
InputStream is; InputStream is;
static long readTimeout = ServerConfig.getReadTimeout();
static long writeTimeout = ServerConfig.getWriteTimeout();
/* held by thread doing the hand-shake on this connection */ /* held by thread doing the hand-shake on this connection */
Lock handshaking = new ReentrantLock(); Lock handshaking = new ReentrantLock();
@ -77,10 +75,13 @@ class SSLStreams {
if (cfg != null) { if (cfg != null) {
Parameters params = new Parameters (cfg, addr); Parameters params = new Parameters (cfg, addr);
cfg.configure (params); cfg.configure (params);
//BEGIN_TIGER_EXCLUDE
SSLParameters sslParams = params.getSSLParameters(); SSLParameters sslParams = params.getSSLParameters();
if (sslParams != null) { if (sslParams != null) {
engine.setSSLParameters (sslParams); engine.setSSLParameters (sslParams);
} else { } else
//END_TIGER_EXCLUDE
{
/* tiger compatibility */ /* tiger compatibility */
if (params.getCipherSuites() != null) { if (params.getCipherSuites() != null) {
try { try {
@ -104,7 +105,6 @@ class SSLStreams {
class Parameters extends HttpsParameters { class Parameters extends HttpsParameters {
InetSocketAddress addr; InetSocketAddress addr;
SSLParameters params;
HttpsConfigurator cfg; HttpsConfigurator cfg;
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) { Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
@ -117,12 +117,15 @@ class SSLStreams {
public HttpsConfigurator getHttpsConfigurator() { public HttpsConfigurator getHttpsConfigurator() {
return cfg; return cfg;
} }
//BEGIN_TIGER_EXCLUDE
SSLParameters params;
public void setSSLParameters (SSLParameters p) { public void setSSLParameters (SSLParameters p) {
params = p; params = p;
} }
SSLParameters getSSLParameters () { SSLParameters getSSLParameters () {
return params; return params;
} }
//END_TIGER_EXCLUDE
} }
/** /**
@ -245,9 +248,6 @@ class SSLStreams {
SocketChannel chan; SocketChannel chan;
SSLEngine engine; SSLEngine engine;
SelectorCache sc;
Selector write_selector, read_selector;
SelectionKey wkey, rkey;
Object wrapLock, unwrapLock; Object wrapLock, unwrapLock;
ByteBuffer unwrap_src, wrap_dst; ByteBuffer unwrap_src, wrap_dst;
boolean closed = false; boolean closed = false;
@ -260,16 +260,9 @@ class SSLStreams {
unwrapLock = new Object(); unwrapLock = new Object();
unwrap_src = allocate(BufType.PACKET); unwrap_src = allocate(BufType.PACKET);
wrap_dst = allocate(BufType.PACKET); wrap_dst = allocate(BufType.PACKET);
sc = SelectorCache.getSelectorCache();
write_selector = sc.getSelector();
wkey = chan.register (write_selector, SelectionKey.OP_WRITE);
read_selector = sc.getSelector();
wkey = chan.register (read_selector, SelectionKey.OP_READ);
} }
void close () throws IOException { void close () throws IOException {
sc.freeSelector (write_selector);
sc.freeSelector (read_selector);
} }
/* try to wrap and send the data in src. Handles OVERFLOW. /* try to wrap and send the data in src. Handles OVERFLOW.
@ -304,15 +297,7 @@ class SSLStreams {
wrap_dst.flip(); wrap_dst.flip();
int l = wrap_dst.remaining(); int l = wrap_dst.remaining();
assert l == r.result.bytesProduced(); assert l == r.result.bytesProduced();
long currtime = time.getTime();
long maxtime = currtime + writeTimeout;
while (l>0) { while (l>0) {
write_selector.select(writeTimeout); // timeout
currtime = time.getTime();
if (currtime > maxtime) {
throw new SocketTimeoutException ("write timed out");
}
write_selector.selectedKeys().clear();
l -= chan.write (wrap_dst); l -= chan.write (wrap_dst);
} }
} }
@ -342,20 +327,12 @@ class SSLStreams {
needData = true; needData = true;
} }
synchronized (unwrapLock) { synchronized (unwrapLock) {
int x,y; int x;
do { do {
if (needData) { if (needData) {
long currTime = time.getTime();
long maxtime = currTime + readTimeout;
do { do {
if (currTime > maxtime) {
throw new SocketTimeoutException ("read timedout");
}
y = read_selector.select (readTimeout);
currTime = time.getTime();
} while (y != 1);
read_selector.selectedKeys().clear();
x = chan.read (unwrap_src); x = chan.read (unwrap_src);
} while (x == 0);
if (x == -1) { if (x == -1) {
throw new IOException ("connection closed for reading"); throw new IOException ("connection closed for reading");
} }

View File

@ -1,134 +0,0 @@
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.net.httpserver;
import java.util.*;
import java.nio.*;
import java.net.*;
import java.io.*;
import java.security.*;
import java.nio.channels.*;
/*
* Implements a cache of java.nio.channels.Selector
* where Selectors are allocated on demand and placed
* in a temporary cache for a period of time, so they
* can be reused. If a period of between 2 and 4 minutes
* elapses without being used, then they are closed.
*/
public class SelectorCache {
static SelectorCache cache = null;
private SelectorCache () {
freeSelectors = new LinkedList<SelectorWrapper>();
CacheCleaner c = AccessController.doPrivileged(
new PrivilegedAction<CacheCleaner>() {
public CacheCleaner run() {
CacheCleaner cleaner = new CacheCleaner();
cleaner.setDaemon (true);
return cleaner;
}
});
c.start();
}
/**
* factory method for creating single instance
*/
public static SelectorCache getSelectorCache () {
synchronized (SelectorCache.class) {
if (cache == null) {
cache = new SelectorCache ();
}
}
return cache;
}
private static class SelectorWrapper {
private Selector sel;
private boolean deleteFlag;
private SelectorWrapper (Selector sel) {
this.sel = sel;
this.deleteFlag = false;
}
public Selector getSelector() { return sel;}
public boolean getDeleteFlag () {return deleteFlag;}
public void setDeleteFlag (boolean b) {deleteFlag = b;}
}
/* list of free selectors. Can be re-allocated for a period
* of time, after which if not allocated will be closed
* and removed from the list (by CacheCleaner thread)
*/
LinkedList<SelectorWrapper> freeSelectors;
synchronized Selector getSelector () throws IOException {
SelectorWrapper wrapper = null;
Selector selector;
if (freeSelectors.size() > 0) {
wrapper = freeSelectors.remove();
selector = wrapper.getSelector();
} else {
selector = Selector.open();
}
return selector;
}
synchronized void freeSelector (Selector selector) {
freeSelectors.add (new SelectorWrapper (selector));
}
/* Thread ensures that entries on freeSelector list
* remain there for at least 2 minutes and no longer
* than 4 minutes.
*/
class CacheCleaner extends Thread {
public void run () {
long timeout = ServerConfig.getSelCacheTimeout() * 1000;
while (true) {
try {Thread.sleep (timeout); } catch (Exception e) {}
synchronized (freeSelectors) {
ListIterator<SelectorWrapper> l = freeSelectors.listIterator();
while (l.hasNext()) {
SelectorWrapper w = l.next();
if (w.getDeleteFlag()) {
/* 2nd pass. Close the selector */
try {
w.getSelector().close();
} catch (IOException e) {}
l.remove();
} else {
/* 1st pass. Set the flag */
w.setDeleteFlag (true);
}
}
}
}
}
}
}

View File

@ -27,6 +27,8 @@ package sun.net.httpserver;
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import com.sun.net.httpserver.spi.*; import com.sun.net.httpserver.spi.*;
import java.util.logging.Logger;
import java.security.PrivilegedAction;
/** /**
* Parameters that users will not likely need to set * Parameters that users will not likely need to set
@ -37,23 +39,26 @@ class ServerConfig {
static int clockTick; static int clockTick;
static int defaultClockTick = 10000 ; // 10 sec. static final int DEFAULT_CLOCK_TICK = 10000 ; // 10 sec.
/* These values must be a reasonable multiple of clockTick */ /* These values must be a reasonable multiple of clockTick */
static long defaultReadTimeout = 20 ; // 20 sec. static final long DEFAULT_IDLE_INTERVAL = 300 ; // 5 min
static long defaultWriteTimeout = 60 ; // 60 sec. static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200 ;
static long defaultIdleInterval = 300 ; // 5 min
static long defaultSelCacheTimeout = 120 ; // seconds
static int defaultMaxIdleConnections = 200 ;
static long defaultDrainAmount = 64 * 1024; static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
static final long DEFAULT_TIMER_MILLIS = 1000;
static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
static long readTimeout;
static long writeTimeout;
static long idleInterval; static long idleInterval;
static long selCacheTimeout;
static long drainAmount; // max # of bytes to drain from an inputstream static long drainAmount; // max # of bytes to drain from an inputstream
static int maxIdleConnections; static int maxIdleConnections;
// max time a request or response is allowed to take
static long maxReqTime;
static long maxRspTime;
static long timerMillis;
static boolean debug = false; static boolean debug = false;
static { static {
@ -61,49 +66,79 @@ class ServerConfig {
idleInterval = ((Long)java.security.AccessController.doPrivileged( idleInterval = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction( new sun.security.action.GetLongAction(
"sun.net.httpserver.idleInterval", "sun.net.httpserver.idleInterval",
defaultIdleInterval))).longValue() * 1000; DEFAULT_IDLE_INTERVAL))).longValue() * 1000;
clockTick = ((Integer)java.security.AccessController.doPrivileged( clockTick = ((Integer)java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction( new sun.security.action.GetIntegerAction(
"sun.net.httpserver.clockTick", "sun.net.httpserver.clockTick",
defaultClockTick))).intValue(); DEFAULT_CLOCK_TICK))).intValue();
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged( maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction( new sun.security.action.GetIntegerAction(
"sun.net.httpserver.maxIdleConnections", "sun.net.httpserver.maxIdleConnections",
defaultMaxIdleConnections))).intValue(); DEFAULT_MAX_IDLE_CONNECTIONS))).intValue();
readTimeout = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.readTimeout",
defaultReadTimeout))).longValue()* 1000;
selCacheTimeout = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.selCacheTimeout",
defaultSelCacheTimeout))).longValue()* 1000;
writeTimeout = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.writeTimeout",
defaultWriteTimeout))).longValue()* 1000;
drainAmount = ((Long)java.security.AccessController.doPrivileged( drainAmount = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction( new sun.security.action.GetLongAction(
"sun.net.httpserver.drainAmount", "sun.net.httpserver.drainAmount",
defaultDrainAmount))).longValue(); DEFAULT_DRAIN_AMOUNT))).longValue();
maxReqTime = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.maxReqTime",
DEFAULT_MAX_REQ_TIME))).longValue();
maxRspTime = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.maxRspTime",
DEFAULT_MAX_RSP_TIME))).longValue();
timerMillis = ((Long)java.security.AccessController.doPrivileged(
new sun.security.action.GetLongAction(
"sun.net.httpserver.timerMillis",
DEFAULT_TIMER_MILLIS))).longValue();
debug = ((Boolean)java.security.AccessController.doPrivileged( debug = ((Boolean)java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction( new sun.security.action.GetBooleanAction(
"sun.net.httpserver.debug"))).booleanValue(); "sun.net.httpserver.debug"))).booleanValue();
} }
static long getReadTimeout () {
return readTimeout;
}
static long getSelCacheTimeout () { static void checkLegacyProperties (final Logger logger) {
return selCacheTimeout;
// legacy properties that are no longer used
// print a warning to logger if they are set.
java.security.AccessController.doPrivileged(
new PrivilegedAction<Void>() {
public Void run () {
if (System.getProperty("sun.net.httpserver.readTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.readTimeout "+
"property is no longer used. "+
"Use sun.net.httpserver.maxReqTime instead."
);
}
if (System.getProperty("sun.net.httpserver.writeTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.writeTimeout "+
"property is no longer used. Use "+
"sun.net.httpserver.maxRspTime instead."
);
}
if (System.getProperty("sun.net.httpserver.selCacheTimeout")
!=null)
{
logger.warning ("sun.net.httpserver.selCacheTimeout "+
"property is no longer used."
);
}
return null;
}
}
);
} }
static boolean debugEnabled () { static boolean debugEnabled () {
@ -122,11 +157,19 @@ class ServerConfig {
return maxIdleConnections; return maxIdleConnections;
} }
static long getWriteTimeout () {
return writeTimeout;
}
static long getDrainAmount () { static long getDrainAmount () {
return drainAmount; return drainAmount;
} }
static long getMaxReqTime () {
return maxReqTime;
}
static long getMaxRspTime () {
return maxRspTime;
}
static long getTimerMillis () {
return timerMillis;
}
} }

View File

@ -37,6 +37,7 @@ import java.util.logging.Level;
import javax.net.ssl.*; import javax.net.ssl.*;
import com.sun.net.httpserver.*; import com.sun.net.httpserver.*;
import com.sun.net.httpserver.spi.*; import com.sun.net.httpserver.spi.*;
import sun.net.httpserver.HttpConnection.State;
/** /**
* Provides implementation for both HTTP and HTTPS * Provides implementation for both HTTP and HTTPS
@ -55,6 +56,12 @@ class ServerImpl implements TimeSource {
private SelectionKey listenerKey; private SelectionKey listenerKey;
private Set<HttpConnection> idleConnections; private Set<HttpConnection> idleConnections;
private Set<HttpConnection> allConnections; private Set<HttpConnection> allConnections;
/* following two are used to keep track of the times
* when a connection/request is first received
* and when we start to send the response
*/
private Set<HttpConnection> reqConnections;
private Set<HttpConnection> rspConnections;
private List<Event> events; private List<Event> events;
private Object lolock = new Object(); private Object lolock = new Object();
private volatile boolean finished = false; private volatile boolean finished = false;
@ -62,14 +69,19 @@ class ServerImpl implements TimeSource {
private boolean bound = false; private boolean bound = false;
private boolean started = false; private boolean started = false;
private volatile long time; /* current time */ private volatile long time; /* current time */
private volatile long subticks = 0;
private volatile long ticks; /* number of clock ticks since server started */ private volatile long ticks; /* number of clock ticks since server started */
private HttpServer wrapper; private HttpServer wrapper;
final static int CLOCK_TICK = ServerConfig.getClockTick(); final static int CLOCK_TICK = ServerConfig.getClockTick();
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval(); final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections(); final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
final static long TIMER_MILLIS = ServerConfig.getTimerMillis ();
final static long MAX_REQ_TIME=getTimeMillis(ServerConfig.getMaxReqTime());
final static long MAX_RSP_TIME=getTimeMillis(ServerConfig.getMaxRspTime());
final static boolean timer1Enabled = MAX_REQ_TIME != -1 || MAX_RSP_TIME != -1;
private Timer timer; private Timer timer, timer1;
private Logger logger; private Logger logger;
ServerImpl ( ServerImpl (
@ -79,6 +91,7 @@ class ServerImpl implements TimeSource {
this.protocol = protocol; this.protocol = protocol;
this.wrapper = wrapper; this.wrapper = wrapper;
this.logger = Logger.getLogger ("com.sun.net.httpserver"); this.logger = Logger.getLogger ("com.sun.net.httpserver");
ServerConfig.checkLegacyProperties (logger);
https = protocol.equalsIgnoreCase ("https"); https = protocol.equalsIgnoreCase ("https");
this.address = addr; this.address = addr;
contexts = new ContextList(); contexts = new ContextList();
@ -94,9 +107,18 @@ class ServerImpl implements TimeSource {
dispatcher = new Dispatcher(); dispatcher = new Dispatcher();
idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>()); idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>()); allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
reqConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
rspConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
time = System.currentTimeMillis(); time = System.currentTimeMillis();
timer = new Timer ("server-timer", true); timer = new Timer ("server-timer", true);
timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK); timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
if (timer1Enabled) {
timer1 = new Timer ("server-timer1", true);
timer1.schedule (new ServerTimerTask1(),TIMER_MILLIS,TIMER_MILLIS);
logger.config ("HttpServer timer1 enabled period in ms: "+TIMER_MILLIS);
logger.config ("MAX_REQ_TIME: "+MAX_REQ_TIME);
logger.config ("MAX_RSP_TIME: "+MAX_RSP_TIME);
}
events = new LinkedList<Event>(); events = new LinkedList<Event>();
logger.config ("HttpServer created "+protocol+" "+ addr); logger.config ("HttpServer created "+protocol+" "+ addr);
} }
@ -181,6 +203,9 @@ class ServerImpl implements TimeSource {
allConnections.clear(); allConnections.clear();
idleConnections.clear(); idleConnections.clear();
timer.cancel(); timer.cancel();
if (timer1Enabled) {
timer1.cancel();
}
} }
Dispatcher dispatcher; Dispatcher dispatcher;
@ -236,13 +261,6 @@ class ServerImpl implements TimeSource {
} }
} }
int resultSize () {
synchronized (lolock) {
return events.size ();
}
}
/* main server listener task */ /* main server listener task */
class Dispatcher implements Runnable { class Dispatcher implements Runnable {
@ -257,7 +275,7 @@ class ServerImpl implements TimeSource {
if (terminating && exchanges == 0) { if (terminating && exchanges == 0) {
finished = true; finished = true;
} }
SocketChannel chan = c.getChannel(); responseCompleted (c);
LeftOverInputStream is = t.getOriginalInputStream(); LeftOverInputStream is = t.getOriginalInputStream();
if (!is.isEOF()) { if (!is.isEOF()) {
t.close = true; t.close = true;
@ -268,17 +286,10 @@ class ServerImpl implements TimeSource {
} else { } else {
if (is.isDataBuffered()) { if (is.isDataBuffered()) {
/* don't re-enable the interestops, just handle it */ /* don't re-enable the interestops, just handle it */
requestStarted (c);
handle (c.getChannel(), c); handle (c.getChannel(), c);
} else { } else {
/* re-enable interestops */ connsToRegister.add (c);
SelectionKey key = c.getSelectionKey();
if (key.isValid()) {
key.interestOps (
key.interestOps()|SelectionKey.OP_READ
);
}
c.time = getTime() + IDLE_INTERVAL;
idleConnections.add (c);
} }
} }
} }
@ -290,21 +301,50 @@ class ServerImpl implements TimeSource {
} }
} }
final LinkedList<HttpConnection> connsToRegister =
new LinkedList<HttpConnection>();
void reRegister (HttpConnection c) {
/* re-register with selector */
try {
SocketChannel chan = c.getChannel();
chan.configureBlocking (false);
SelectionKey key = chan.register (selector, SelectionKey.OP_READ);
key.attach (c);
c.selectionKey = key;
c.time = getTime() + IDLE_INTERVAL;
idleConnections.add (c);
} catch (IOException e) {
dprint(e);
logger.log(Level.FINER, "Dispatcher(8)", e);
c.close();
}
}
public void run() { public void run() {
while (!finished) { while (!finished) {
try { try {
ListIterator<HttpConnection> li =
connsToRegister.listIterator();
for (HttpConnection c : connsToRegister) {
reRegister(c);
}
connsToRegister.clear();
/* process the events list first */ List<Event> list = null;
selector.select(1000);
while (resultSize() > 0) { synchronized (lolock) {
Event r; if (events.size() > 0) {
synchronized (lolock) { list = events;
r = events.remove(0); events = new LinkedList<Event>();
handleEvent (r);
} }
} }
selector.select(1000); if (list != null) {
for (Event r: list) {
handleEvent (r);
}
}
/* process the selected list now */ /* process the selected list now */
@ -327,6 +367,7 @@ class ServerImpl implements TimeSource {
c.selectionKey = newkey; c.selectionKey = newkey;
c.setChannel (chan); c.setChannel (chan);
newkey.attach (c); newkey.attach (c);
requestStarted (c);
allConnections.add (c); allConnections.add (c);
} else { } else {
try { try {
@ -334,27 +375,44 @@ class ServerImpl implements TimeSource {
boolean closed; boolean closed;
SocketChannel chan = (SocketChannel)key.channel(); SocketChannel chan = (SocketChannel)key.channel();
HttpConnection conn = (HttpConnection)key.attachment(); HttpConnection conn = (HttpConnection)key.attachment();
// interestOps will be restored at end of read
key.interestOps (0); key.cancel();
chan.configureBlocking (true);
if (idleConnections.remove(conn)) {
// was an idle connection so add it
// to reqConnections set.
requestStarted (conn);
}
handle (chan, conn); handle (chan, conn);
} else { } else {
assert false; assert false;
} }
} catch (CancelledKeyException e) {
handleException(key, null);
} catch (IOException e) { } catch (IOException e) {
HttpConnection conn = (HttpConnection)key.attachment(); handleException(key, e);
logger.log (
Level.FINER, "Dispatcher (2)", e
);
conn.close();
} }
} }
} }
// call the selector just to process the cancelled keys
selector.selectNow();
} catch (IOException e) {
logger.log (Level.FINER, "Dispatcher (4)", e);
} catch (Exception e) { } catch (Exception e) {
logger.log (Level.FINER, "Dispatcher (3)", e); e.printStackTrace();
logger.log (Level.FINER, "Dispatcher (7)", e);
} }
} }
} }
private void handleException (SelectionKey key, Exception e) {
HttpConnection conn = (HttpConnection)key.attachment();
if (e != null) {
logger.log (Level.FINER, "Dispatcher (2)", e);
}
closeConnection(conn);
}
public void handle (SocketChannel chan, HttpConnection conn) public void handle (SocketChannel chan, HttpConnection conn)
throws IOException throws IOException
{ {
@ -363,10 +421,10 @@ class ServerImpl implements TimeSource {
executor.execute (t); executor.execute (t);
} catch (HttpError e1) { } catch (HttpError e1) {
logger.log (Level.FINER, "Dispatcher (4)", e1); logger.log (Level.FINER, "Dispatcher (4)", e1);
conn.close(); closeConnection(conn);
} catch (IOException e) { } catch (IOException e) {
logger.log (Level.FINER, "Dispatcher (5)", e); logger.log (Level.FINER, "Dispatcher (5)", e);
conn.close(); closeConnection(conn);
} }
} }
} }
@ -390,7 +448,26 @@ class ServerImpl implements TimeSource {
return logger; return logger;
} }
/* per exchange task */ private void closeConnection(HttpConnection conn) {
conn.close();
allConnections.remove(conn);
switch (conn.getState()) {
case REQUEST:
reqConnections.remove(conn);
break;
case RESPONSE:
rspConnections.remove(conn);
break;
case IDLE:
idleConnections.remove(conn);
break;
}
assert !reqConnections.remove(conn);
assert !rspConnections.remove(conn);
assert !idleConnections.remove(conn);
}
/* per exchange task */
class Exchange implements Runnable { class Exchange implements Runnable {
SocketChannel chan; SocketChannel chan;
@ -450,8 +527,7 @@ class ServerImpl implements TimeSource {
requestLine = req.requestLine(); requestLine = req.requestLine();
if (requestLine == null) { if (requestLine == null) {
/* connection closed */ /* connection closed */
connection.close(); closeConnection(connection);
allConnections.remove(connection);
return; return;
} }
int space = requestLine.indexOf (' '); int space = requestLine.indexOf (' ');
@ -482,6 +558,9 @@ class ServerImpl implements TimeSource {
if (s != null) { if (s != null) {
clen = Long.parseLong(s); clen = Long.parseLong(s);
} }
if (clen == 0) {
requestCompleted (connection);
}
} }
ctx = contexts.findContext (protocol, uri.getPath()); ctx = contexts.findContext (protocol, uri.getPath());
if (ctx == null) { if (ctx == null) {
@ -560,7 +639,7 @@ class ServerImpl implements TimeSource {
} catch (IOException e1) { } catch (IOException e1) {
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1); logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
connection.close(); closeConnection(connection);
} catch (NumberFormatException e3) { } catch (NumberFormatException e3) {
reject (Code.HTTP_BAD_REQUEST, reject (Code.HTTP_BAD_REQUEST,
requestLine, "NumberFormatException thrown"); requestLine, "NumberFormatException thrown");
@ -569,7 +648,7 @@ class ServerImpl implements TimeSource {
requestLine, "URISyntaxException thrown"); requestLine, "URISyntaxException thrown");
} catch (Exception e4) { } catch (Exception e4) {
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4); logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
connection.close(); closeConnection(connection);
} }
} }
@ -591,47 +670,60 @@ class ServerImpl implements TimeSource {
rejected = true; rejected = true;
logReply (code, requestStr, message); logReply (code, requestStr, message);
sendReply ( sendReply (
code, true, "<h1>"+code+Code.msg(code)+"</h1>"+message code, false, "<h1>"+code+Code.msg(code)+"</h1>"+message
); );
/* connection is already closed by sendReply, now remove it */ closeConnection(connection);
allConnections.remove(connection);
} }
void sendReply ( void sendReply (
int code, boolean closeNow, String text) int code, boolean closeNow, String text)
{ {
try { try {
String s = "HTTP/1.1 " + code + Code.msg(code) + "\r\n"; StringBuilder builder = new StringBuilder (512);
builder.append ("HTTP/1.1 ")
.append (code).append (Code.msg(code)).append ("\r\n");
if (text != null && text.length() != 0) { if (text != null && text.length() != 0) {
s = s + "Content-Length: "+text.length()+"\r\n"; builder.append ("Content-Length: ")
s = s + "Content-Type: text/html\r\n"; .append (text.length()).append ("\r\n")
.append ("Content-Type: text/html\r\n");
} else { } else {
s = s + "Content-Length: 0\r\n"; builder.append ("Content-Length: 0\r\n");
text = ""; text = "";
} }
if (closeNow) { if (closeNow) {
s = s + "Connection: close\r\n"; builder.append ("Connection: close\r\n");
} }
s = s + "\r\n" + text; builder.append ("\r\n").append (text);
String s = builder.toString();
byte[] b = s.getBytes("ISO8859_1"); byte[] b = s.getBytes("ISO8859_1");
rawout.write (b); rawout.write (b);
rawout.flush(); rawout.flush();
if (closeNow) { if (closeNow) {
connection.close(); closeConnection(connection);
} }
} catch (IOException e) { } catch (IOException e) {
logger.log (Level.FINER, "ServerImpl.sendReply", e); logger.log (Level.FINER, "ServerImpl.sendReply", e);
connection.close(); closeConnection(connection);
} }
} }
} }
void logReply (int code, String requestStr, String text) { void logReply (int code, String requestStr, String text) {
if (!logger.isLoggable(Level.FINE)) {
return;
}
if (text == null) { if (text == null) {
text = ""; text = "";
} }
String message = requestStr + " [" + code + " " + String r;
if (requestStr.length() > 80) {
r = requestStr.substring (0, 80) + "<TRUNCATED>";
} else {
r = requestStr;
}
String message = r + " [" + code + " " +
Code.msg(code) + "] ("+text+")"; Code.msg(code) + "] ("+text+")";
logger.fine (message); logger.fine (message);
} }
@ -667,6 +759,34 @@ class ServerImpl implements TimeSource {
return wrapper; return wrapper;
} }
void requestStarted (HttpConnection c) {
c.creationTime = getTime();
c.setState (State.REQUEST);
reqConnections.add (c);
}
// called after a request has been completely read
// by the server. This stops the timer which would
// close the connection if the request doesn't arrive
// quickly enough. It then starts the timer
// that ensures the client reads the response in a timely
// fashion.
void requestCompleted (HttpConnection c) {
assert c.getState() == State.REQUEST;
reqConnections.remove (c);
c.rspStartedTime = getTime();
rspConnections.add (c);
c.setState (State.RESPONSE);
}
// called after response has been sent
void responseCompleted (HttpConnection c) {
assert c.getState() == State.RESPONSE;
rspConnections.remove (c);
c.setState (State.IDLE);
}
/** /**
* TimerTask run every CLOCK_TICK ms * TimerTask run every CLOCK_TICK ms
*/ */
@ -689,4 +809,62 @@ class ServerImpl implements TimeSource {
} }
} }
} }
class ServerTimerTask1 extends TimerTask {
// runs every TIMER_MILLIS
public void run () {
LinkedList<HttpConnection> toClose = new LinkedList<HttpConnection>();
time = System.currentTimeMillis();
synchronized (reqConnections) {
if (MAX_REQ_TIME != -1) {
for (HttpConnection c : reqConnections) {
if (c.creationTime + TIMER_MILLIS + MAX_REQ_TIME <= time) {
toClose.add (c);
}
}
for (HttpConnection c : toClose) {
logger.log (Level.FINE, "closing: no request: " + c);
reqConnections.remove (c);
allConnections.remove (c);
c.close();
}
}
}
toClose = new LinkedList<HttpConnection>();
synchronized (rspConnections) {
if (MAX_RSP_TIME != -1) {
for (HttpConnection c : rspConnections) {
if (c.rspStartedTime + TIMER_MILLIS +MAX_RSP_TIME <= time) {
toClose.add (c);
}
}
for (HttpConnection c : toClose) {
logger.log (Level.FINE, "closing: no response: " + c);
rspConnections.remove (c);
allConnections.remove (c);
c.close();
}
}
}
}
}
void logStackTrace (String s) {
logger.finest (s);
StringBuilder b = new StringBuilder ();
StackTraceElement[] e = Thread.currentThread().getStackTrace();
for (int i=0; i<e.length; i++) {
b.append (e[i].toString()).append("\n");
}
logger.finest (b.toString());
}
static long getTimeMillis(long secs) {
if (secs == -1) {
return -1;
} else {
return secs * 1000;
}
}
} }

View File

@ -235,8 +235,6 @@ abstract class AsynchronousSocketChannelImpl
if (remoteAddress == null) if (remoteAddress == null)
throw new NotYetConnectedException(); throw new NotYetConnectedException();
if (timeout < 0L)
throw new IllegalArgumentException("Negative timeout");
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining(); boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
boolean shutdown = false; boolean shutdown = false;
@ -342,8 +340,6 @@ abstract class AsynchronousSocketChannelImpl
if (isOpen()) { if (isOpen()) {
if (remoteAddress == null) if (remoteAddress == null)
throw new NotYetConnectedException(); throw new NotYetConnectedException();
if (timeout < 0L)
throw new IllegalArgumentException("Negative timeout");
// check and update state // check and update state
synchronized (writeLock) { synchronized (writeLock) {
if (writeKilled) if (writeKilled)

View File

@ -358,7 +358,7 @@ class UTF_8 extends Unicode
private static class Encoder extends CharsetEncoder { private static class Encoder extends CharsetEncoder {
private Encoder(Charset cs) { private Encoder(Charset cs) {
super(cs, 1.1f, 4.0f); super(cs, 1.1f, 3.0f);
} }
public boolean canEncode(char c) { public boolean canEncode(char c) {

View File

@ -778,6 +778,13 @@ public class ExtendedCharsets
"csIBM500" "csIBM500"
}); });
charset("x-IBM833", "IBM833",
new String[] {
"cp833",
"ibm833",
"ibm-833"
});
//EBCDIC DBCS-only Korean //EBCDIC DBCS-only Korean
charset("x-IBM834", "IBM834", charset("x-IBM834", "IBM834",
new String[] { new String[] {

View File

@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
else return null; else return null;
} }
Ticket readData() throws IOException, RealmException, KrbApErrException, Asn1Exception { byte[] readData() throws IOException {
int length; int length;
length = read(4); length = read(4);
if (length > 0) { if (length == 0) {
return null;
} else {
byte[] bytes = new byte[length]; byte[] bytes = new byte[length];
read(bytes, 0, length); read(bytes, 0, length);
Ticket ticket = new Ticket(bytes); return bytes;
return ticket;
} }
else return null;
} }
boolean[] readFlags() throws IOException { boolean[] readFlags() throws IOException {
@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
} }
return flags; return flags;
} }
/**
* Reads the next cred in stream.
* @return the next cred, null if ticket or second_ticket unparseable.
*
* Note: MIT krb5 1.8.1 might generate a config entry with server principal
* X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/REALM@REALM. The
* entry is used by KDC to inform the client that it support certain
* features. Its ticket is not a valid krb5 ticket and thus this method
* returns null.
*/
Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception { Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception {
PrincipalName cpname = readPrincipal(version); PrincipalName cpname = readPrincipal(version);
if (DEBUG) if (DEBUG)
@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
if (auData != null) { if (auData != null) {
auData = new AuthorizationData(auDataEntry); auData = new AuthorizationData(auDataEntry);
} }
Ticket ticket = readData(); byte[] ticketData = readData();
if (DEBUG) { byte[] ticketData2 = readData();
System.out.println(">>>DEBUG <CCacheInputStream>");
if (ticket == null) { try {
System.out.println("///ticket is null"); return new Credentials(cpname, spname, key, authtime, starttime,
} endtime, renewTill, skey, tFlags,
addrs, auData,
ticketData != null ? new Ticket(ticketData) : null,
ticketData2 != null ? new Ticket(ticketData2) : null);
} catch (Exception e) { // If any of new Ticket(*) fails.
return null;
} }
Ticket secTicket = readData();
Credentials cred = new Credentials(cpname, spname, key, authtime, starttime,
endtime, renewTill, skey, tFlags,
addrs, auData, ticket, secTicket);
return cred;
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -186,7 +186,10 @@ public class FileCredentialsCache extends CredentialsCache
primaryRealm = primaryPrincipal.getRealm(); primaryRealm = primaryPrincipal.getRealm();
credentialsList = new Vector<Credentials> (); credentialsList = new Vector<Credentials> ();
while (cis.available() > 0) { while (cis.available() > 0) {
credentialsList.addElement(cis.readCred(version)); Credentials cred = cis.readCred(version);
if (cred != null) {
credentialsList.addElement(cred);
}
} }
cis.close(); cis.close();
} }

View File

@ -74,7 +74,7 @@ final class P11Cipher extends CipherSpi {
// DEC: return the length of trailing padding bytes given the specified // DEC: return the length of trailing padding bytes given the specified
// padded data // padded data
int unpad(byte[] paddedData, int len) int unpad(byte[] paddedData, int len)
throws BadPaddingException; throws BadPaddingException, IllegalBlockSizeException;
} }
private static class PKCS5Padding implements Padding { private static class PKCS5Padding implements Padding {
@ -96,9 +96,10 @@ final class P11Cipher extends CipherSpi {
} }
public int unpad(byte[] paddedData, int len) public int unpad(byte[] paddedData, int len)
throws BadPaddingException { throws BadPaddingException, IllegalBlockSizeException {
if (len < 1 || len > paddedData.length) { if ((len < 1) || (len % blockSize != 0)) {
throw new BadPaddingException("Invalid pad array length!"); throw new IllegalBlockSizeException
("Input length must be multiples of " + blockSize);
} }
byte padValue = paddedData[len - 1]; byte padValue = paddedData[len - 1];
if (padValue < 1 || padValue > blockSize) { if (padValue < 1 || padValue > blockSize) {

View File

@ -10,7 +10,7 @@
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that * version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code). * accompanied this code).
* *

View File

@ -10,7 +10,7 @@
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that * version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code). * accompanied this code).
* *

View File

@ -10,7 +10,7 @@
* *
* This code is distributed in the hope that it will be useful, but WITHOUT * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that * version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code). * accompanied this code).
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -1472,19 +1472,9 @@ public final class NormalizerImpl {
} }
--remove; --remove;
} }
} else if(value2!=0) { } else if(value2!=0) { // for U+1109A, U+1109C, and U+110AB
/* the composition is longer than the starter,
* move the intermediate characters back one */
starterIsSupplementary=true; starterIsSupplementary=true;
/* temporarily increment for the loop boundary */ args.source[starter+1]=(char)value2;
++starter;
q=remove;
r=++remove;
while(starter<q) {
args.source[--r]=args.source[--q];
}
args.source[starter]=(char)value2;
--starter; /* undo the temporary increment */
/* } else { both are on the BMP, nothing more to do */ /* } else { both are on the BMP, nothing more to do */
} }

View File

@ -1,7 +1,7 @@
<title>Nervous Text 1.1</title> <title>Nervous Text 1.1</title>
<hr> <hr>
<applet code="NervousText.class" width=534 height=50> <applet code="NervousText.class" width=534 height=50>
<param name=text value="Java^T^M 2 SDK, Standard Edition 6.0"> <param name=text value="Java SE Development Kit (JDK) 7.0">
</applet> </applet>
<hr> <hr>
<a href="NervousText.java">The source.</a> <a href="NervousText.java">The source.</a>

View File

@ -75,7 +75,8 @@ public class J2DBench {
static JFrame guiFrame; static JFrame guiFrame;
static final SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z"); static final SimpleDateFormat sdf =
new SimpleDateFormat("MM.dd.yyyy 'at' HH:mm aaa z");
public static void init() { public static void init() {
progoptroot = new Group("prog", "Program Options"); progoptroot = new Group("prog", "Program Options");
@ -176,6 +177,8 @@ public class J2DBench {
public static void main(String argv[]) { public static void main(String argv[]) {
init(); init();
TestEnvironment.init(); TestEnvironment.init();
Result.init();
Destinations.init(); Destinations.init();
GraphicsTests.init(); GraphicsTests.init();
RenderTests.init(); RenderTests.init();
@ -323,7 +326,7 @@ public class J2DBench {
} else if (type.equalsIgnoreCase("m")) { } else if (type.equalsIgnoreCase("m")) {
multiplyWith = 60; multiplyWith = 60;
} else { } else {
System.out.println("Invalid \"-loop\" option specified."); System.err.println("Invalid \"-loop\" option specified.");
usage(1); usage(1);
} }
@ -331,32 +334,20 @@ public class J2DBench {
try { try {
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1)); val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
} catch(Exception e) { } catch(Exception e) {
System.out.println("Invalid \"-loop\" option specified."); System.err.println("Invalid \"-loop\" option specified.");
usage(1); usage(1);
} }
requiredLoopTime = val * multiplyWith * 1000; requiredLoopTime = val * multiplyWith * 1000;
} }
} else if (arg.length() > 7 && } else if (arg.length() > 8 &&
arg.substring(0, 7).equalsIgnoreCase("-report")) arg.substring(0, 8).equalsIgnoreCase("-report:"))
{ {
for (int j = 7; j < arg.length(); j++) { String error = Result.parseRateOpt(arg.substring(8));
char c = arg.charAt(j); if (error != null) {
switch (c) { System.err.println("Invalid rate: "+error);
case 'N': Result.unitScale = Result.UNITS_WHOLE; break; usage(1);
case 'M': Result.unitScale = Result.UNITS_MILLIONS; break;
case 'K': Result.unitScale = Result.UNITS_THOUSANDS; break;
case 'A': Result.unitScale = Result.UNITS_AUTO; break;
case 'U': Result.useUnits = true; break;
case 'O': Result.useUnits = false; break;
case 's': Result.timeScale = Result.SECONDS_WHOLE; break;
case 'm': Result.timeScale = Result.SECONDS_MILLIS; break;
case 'u': Result.timeScale = Result.SECONDS_MICROS; break;
case 'n': Result.timeScale = Result.SECONDS_NANOS; break;
case 'a': Result.timeScale = Result.SECONDS_AUTO; break;
case '/': Result.invertRate = !Result.invertRate; break;
}
} }
} else { } else {
String reason = Group.root.setOption(arg); String reason = Group.root.setOption(arg);
@ -411,7 +402,7 @@ public class J2DBench {
writer.flush(); writer.flush();
} catch(IOException ioe) { } catch(IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
System.out.println("\nERROR : Could not create Loop-Report. Exit"); System.err.println("\nERROR : Could not create Loop-Report. Exit");
System.exit(1); System.exit(1);
} }
} }
@ -466,7 +457,7 @@ public class J2DBench {
} while(J2DBench.looping); } while(J2DBench.looping);
if(J2DBench.looping) { if (J2DBench.looping) {
writer.println("</html>"); writer.println("</html>");
writer.flush(); writer.flush();
writer.close(); writer.close();

View File

@ -170,7 +170,7 @@ public abstract class Option extends Node implements Modifier {
updateGUI(); updateGUI();
jcb.addItemListener(new ItemListener() { jcb.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == e.SELECTED) { if (e.getStateChange() == ItemEvent.SELECTED) {
JComboBox jcb = (JComboBox) e.getItemSelectable(); JComboBox jcb = (JComboBox) e.getItemSelectable();
value = jcb.getSelectedIndex(); value = jcb.getSelectedIndex();
if (J2DBench.verbose.isEnabled()) { if (J2DBench.verbose.isEnabled()) {
@ -261,7 +261,7 @@ public abstract class Option extends Node implements Modifier {
updateGUI(); updateGUI();
jcb.addItemListener(new ItemListener() { jcb.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
value = (e.getStateChange() == e.SELECTED); value = (e.getStateChange() == ItemEvent.SELECTED);
if (J2DBench.verbose.isEnabled()) { if (J2DBench.verbose.isEnabled()) {
System.out.println(getOptionString()); System.out.println(getOptionString());
} }
@ -569,8 +569,6 @@ public abstract class Option extends Node implements Modifier {
} }
public String setValueFromString(String value) { public String setValueFromString(String value) {
int prev = 0;
int next = 0;
int enabled = 0; int enabled = 0;
StringTokenizer st = new StringTokenizer(value, ","); StringTokenizer st = new StringTokenizer(value, ",");
while (st.hasMoreTokens()) { while (st.hasMoreTokens()) {
@ -588,7 +586,6 @@ public abstract class Option extends Node implements Modifier {
if (s != null) { if (s != null) {
return "Bad value in list ("+s+")"; return "Bad value in list ("+s+")";
} }
prev = next+1;
} }
this.enabled = enabled; this.enabled = enabled;
updateGUI(); updateGUI();
@ -623,6 +620,175 @@ public abstract class Option extends Node implements Modifier {
} }
} }
public static class ObjectChoice extends Option {
int size;
String optionnames[];
Object optionvalues[];
String abbrevnames[];
String descnames[];
int defaultselected;
int selected;
JPanel jp;
JComboBox jcombo;
public ObjectChoice(Group parent, String nodeName, String description,
String optionnames[],
Object optionvalues[],
String abbrevnames[],
String descnames[],
int defaultselected)
{
this(parent, nodeName, description,
Math.min(Math.min(optionnames.length,
optionvalues.length),
Math.min(abbrevnames.length,
descnames.length)),
optionnames, optionvalues,
abbrevnames, descnames, defaultselected);
}
public ObjectChoice(Group parent, String nodeName, String description,
int size,
String optionnames[],
Object optionvalues[],
String abbrevnames[],
String descnames[],
int defaultselected)
{
super(parent, nodeName, description);
this.size = size;
this.optionnames = trim(optionnames, size);
this.optionvalues = trim(optionvalues, size);
this.abbrevnames = trim(abbrevnames, size);
this.descnames = trim(descnames, size);
this.selected = this.defaultselected = defaultselected;
}
private static String[] trim(String list[], int size) {
if (list.length == size) {
return list;
}
String newlist[] = new String[size];
System.arraycopy(list, 0, newlist, 0, size);
return newlist;
}
private static Object[] trim(Object list[], int size) {
if (list.length == size) {
return list;
}
Object newlist[] = new Object[size];
System.arraycopy(list, 0, newlist, 0, size);
return newlist;
}
public void restoreDefault() {
if (selected != defaultselected) {
selected = defaultselected;
updateGUI();
}
}
public void updateGUI() {
if (jcombo != null) {
jcombo.setSelectedIndex(this.selected);
}
}
public boolean isDefault() {
return (selected == defaultselected);
}
public Modifier.Iterator getIterator(TestEnvironment env) {
return new SwitchIterator(optionvalues, 1 << selected);
}
public JComponent getJComponent() {
if (jp == null) {
jp = new JPanel();
jp.setLayout(new BorderLayout());
jp.add(new JLabel(getDescription()), BorderLayout.WEST);
jcombo = new JComboBox(descnames);
updateGUI();
jcombo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
selected = jcombo.getSelectedIndex();
if (J2DBench.verbose.isEnabled()) {
System.out.println(getOptionString());
}
}
}
});
jp.add(jcombo, BorderLayout.EAST);
}
return jp;
}
public Object getValue() {
return optionvalues[selected];
}
public int getIntValue() {
return ((Integer) optionvalues[selected]).intValue();
}
public boolean getBooleanValue() {
return ((Boolean) optionvalues[selected]).booleanValue();
}
public String getValString() {
return optionnames[selected];
}
int findValueIndex(Object value) {
for (int i = 0; i < size; i++) {
if (optionvalues[i] == value) {
return i;
}
}
return -1;
}
public String getValString(Object value) {
return optionnames[findValueIndex(value)];
}
public String getAbbreviatedModifierDescription(Object value) {
return abbrevnames[findValueIndex(value)];
}
public String setValue(int v) {
return setValue(new Integer(v));
}
public String setValue(boolean v) {
return setValue(new Boolean(v));
}
public String setValue(Object value) {
for (int i = 0; i < size; i++) {
if (optionvalues[i].equals(value)) {
this.selected = i;
updateGUI();
return null;
}
}
return "Bad value";
}
public String setValueFromString(String value) {
for (int i = 0; i < size; i++) {
if (optionnames[i].equals(value)) {
this.selected = i;
updateGUI();
return null;
}
}
return "Bad value";
}
}
public static class BooleanIterator implements Modifier.Iterator { public static class BooleanIterator implements Modifier.Iterator {
private Boolean list[]; private Boolean list[];
private int index; private int index;

View File

@ -35,23 +35,199 @@ import java.util.Vector;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Enumeration; import java.util.Enumeration;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.HashMap;
public class Result { public class Result {
public static final int UNITS_WHOLE = 0; public static final int RATE_UNKNOWN = 0;
public static final int UNITS_THOUSANDS = 1;
public static final int UNITS_MILLIONS = 2;
public static final int UNITS_AUTO = 3;
public static final int SECONDS_WHOLE = 0; public static final int WORK_OPS = 1;
public static final int SECONDS_MILLIS = 1; public static final int WORK_UNITS = 2;
public static final int SECONDS_MICROS = 2; public static final int WORK_THOUSANDS = 4;
public static final int SECONDS_NANOS = 3; public static final int WORK_MILLIONS = 6;
public static final int SECONDS_AUTO = 4; public static final int WORK_AUTO = 8;
public static int unitScale = UNITS_WHOLE; public static final int TIME_SECONDS = 10;
public static int timeScale = SECONDS_WHOLE; public static final int TIME_MILLIS = 11;
public static boolean useUnits = true; public static final int TIME_MICROS = 12;
public static boolean invertRate = false; public static final int TIME_NANOS = 13;
public static final int TIME_AUTO = 14;
static Group resultoptroot;
static Option.ObjectChoice timeOpt;
static Option.ObjectChoice workOpt;
static Option.ObjectChoice rateOpt;
public static void init() {
resultoptroot = new Group(TestEnvironment.globaloptroot,
"results", "Result Options");
String workStrings[] = {
"units",
"kilounits",
"megaunits",
"autounits",
"ops",
"kiloops",
"megaops",
"autoops",
};
String workDescriptions[] = {
"Test Units",
"Thousands of Test Units",
"Millions of Test Units",
"Auto-scaled Test Units",
"Operations",
"Thousands of Operations",
"Millions of Operations",
"Auto-scaled Operations",
};
Integer workObjects[] = {
new Integer(WORK_UNITS),
new Integer(WORK_THOUSANDS),
new Integer(WORK_MILLIONS),
new Integer(WORK_AUTO),
new Integer(WORK_OPS | WORK_UNITS),
new Integer(WORK_OPS | WORK_THOUSANDS),
new Integer(WORK_OPS | WORK_MILLIONS),
new Integer(WORK_OPS | WORK_AUTO),
};
workOpt = new Option.ObjectChoice(resultoptroot,
"workunits", "Work Units",
workStrings, workObjects,
workStrings, workDescriptions,
0);
String timeStrings[] = {
"sec",
"msec",
"usec",
"nsec",
"autosec",
};
String timeDescriptions[] = {
"Seconds",
"Milliseconds",
"Microseconds",
"Nanoseconds",
"Auto-scaled seconds",
};
Integer timeObjects[] = {
new Integer(TIME_SECONDS),
new Integer(TIME_MILLIS),
new Integer(TIME_MICROS),
new Integer(TIME_NANOS),
new Integer(TIME_AUTO),
};
timeOpt = new Option.ObjectChoice(resultoptroot,
"timeunits", "Time Units",
timeStrings, timeObjects,
timeStrings, timeDescriptions,
0);
String rateStrings[] = {
"unitspersec",
"secsperunit",
};
String rateDescriptions[] = {
"Work units per Time",
"Time units per Work",
};
Boolean rateObjects[] = {
Boolean.FALSE,
Boolean.TRUE,
};
rateOpt = new Option.ObjectChoice(resultoptroot,
"ratio", "Rate Ratio",
rateStrings, rateObjects,
rateStrings, rateDescriptions,
0);
}
public static boolean isTimeUnit(int unit) {
return (unit >= TIME_SECONDS && unit <= TIME_AUTO);
}
public static boolean isWorkUnit(int unit) {
return (unit >= WORK_OPS && unit <= (WORK_AUTO | WORK_OPS));
}
public static String parseRateOpt(String opt) {
int timeScale = timeOpt.getIntValue();
int workScale = workOpt.getIntValue();
boolean invertRate = rateOpt.getBooleanValue();
int divindex = opt.indexOf('/');
if (divindex < 0) {
int unit = parseUnit(opt);
if (isTimeUnit(unit)) {
timeScale = unit;
} else if (isWorkUnit(unit)) {
workScale = unit;
} else {
return "Bad unit: "+opt;
}
} else {
int unit1 = parseUnit(opt.substring(0,divindex));
int unit2 = parseUnit(opt.substring(divindex+1));
if (isTimeUnit(unit1)) {
if (isWorkUnit(unit2)) {
timeScale = unit1;
workScale = unit2;
invertRate = true;
} else if (isTimeUnit(unit2)) {
return "Both time units: "+opt;
} else {
return "Bad denominator: "+opt;
}
} else if (isWorkUnit(unit1)) {
if (isWorkUnit(unit2)) {
return "Both work units: "+opt;
} else if (isTimeUnit(unit2)) {
timeScale = unit2;
workScale = unit1;
invertRate = false;
} else {
return "Bad denominator: "+opt;
}
} else {
return "Bad numerator: "+opt;
}
}
timeOpt.setValue(timeScale);
workOpt.setValue(workScale);
rateOpt.setValue(invertRate);
return null;
}
private static HashMap unitMap;
static {
unitMap = new HashMap();
unitMap.put("U", new Integer(WORK_UNITS));
unitMap.put("M", new Integer(WORK_MILLIONS));
unitMap.put("K", new Integer(WORK_THOUSANDS));
unitMap.put("A", new Integer(WORK_AUTO));
unitMap.put("MU", new Integer(WORK_MILLIONS));
unitMap.put("KU", new Integer(WORK_THOUSANDS));
unitMap.put("AU", new Integer(WORK_AUTO));
unitMap.put("O", new Integer(WORK_UNITS | WORK_OPS));
unitMap.put("NO", new Integer(WORK_UNITS | WORK_OPS));
unitMap.put("MO", new Integer(WORK_MILLIONS | WORK_OPS));
unitMap.put("KO", new Integer(WORK_THOUSANDS | WORK_OPS));
unitMap.put("AO", new Integer(WORK_AUTO | WORK_OPS));
unitMap.put("s", new Integer(TIME_SECONDS));
unitMap.put("m", new Integer(TIME_MILLIS));
unitMap.put("u", new Integer(TIME_MICROS));
unitMap.put("n", new Integer(TIME_NANOS));
unitMap.put("a", new Integer(TIME_AUTO));
}
public static int parseUnit(String c) {
Integer u = (Integer) unitMap.get(c);
if (u != null) {
return u.intValue();
}
return RATE_UNKNOWN;
}
String unitname = "unit"; String unitname = "unit";
Test test; Test test;
@ -157,69 +333,76 @@ public class Result {
} }
public String getAverageString() { public String getAverageString() {
double units = (useUnits ? getTotalUnits() : getTotalReps()); int timeScale = timeOpt.getIntValue();
int workScale = workOpt.getIntValue();
boolean invertRate = rateOpt.getBooleanValue();
double time = getTotalTime(); double time = getTotalTime();
String timeprefix = "";
switch (timeScale) {
case TIME_AUTO:
case TIME_SECONDS:
time /= 1000;
break;
case TIME_MILLIS:
timeprefix = "m";
break;
case TIME_MICROS:
time *= 1000.0;
timeprefix = "u";
break;
case TIME_NANOS:
time *= 1000000.0;
timeprefix = "n";
break;
}
String workprefix = "";
boolean isOps = (workScale & WORK_OPS) != 0;
String workname = isOps ? "op" : unitname;
double work = isOps ? getTotalReps() : getTotalUnits();
switch (workScale & (~WORK_OPS)) {
case WORK_AUTO:
case WORK_UNITS:
break;
case WORK_THOUSANDS:
work /= 1000.0;
workprefix = "K";
break;
case WORK_MILLIONS:
work /= 1000000.0;
workprefix = "M";
break;
}
if (invertRate) { if (invertRate) {
double rate = time / units; double rate = time / work;
String prefix = ""; if (timeScale == TIME_AUTO) {
switch (timeScale) {
case SECONDS_WHOLE:
rate /= 1000;
break;
case SECONDS_MILLIS:
prefix = "m";
break;
case SECONDS_MICROS:
rate *= 1000.0;
prefix = "u";
break;
case SECONDS_NANOS:
rate *= 1000000.0;
prefix = "n";
break;
case SECONDS_AUTO:
rate /= 1000.0;
if (rate < 1.0) { if (rate < 1.0) {
rate *= 1000.0; rate *= 1000.0;
prefix = "m"; timeprefix = "m";
if (rate < 1.0) { if (rate < 1.0) {
rate *= 1000.0; rate *= 1000.0;
prefix = "u"; timeprefix = "u";
if (rate < 1.0) { if (rate < 1.0) {
rate *= 1000.0; rate *= 1000.0;
prefix = "n"; timeprefix = "n";
} }
} }
} }
break;
} }
return rate+" "+prefix+"secs/"+(useUnits ? unitname : "op"); return rate+" "+timeprefix+"secs/"+workprefix+workname;
} else { } else {
double rate = units / (time / 1000.0); double rate = work / time;
String prefix = ""; if (workScale == WORK_AUTO) {
switch (unitScale) {
case UNITS_WHOLE:
break;
case UNITS_THOUSANDS:
rate /= 1000.0;
prefix = "K";
break;
case UNITS_MILLIONS:
rate /= 1000000.0;
prefix = "M";
break;
case UNITS_AUTO:
if (rate > 1000.0) { if (rate > 1000.0) {
rate /= 1000.0; rate /= 1000.0;
prefix = "K"; workprefix = "K";
if (rate > 1000.0) { if (rate > 1000.0) {
rate /= 1000.0; rate /= 1000.0;
prefix = "M"; workprefix = "M";
} }
} }
break;
} }
return rate+" "+prefix+(useUnits ? unitname : "op")+"s/sec"; return rate+" "+workprefix+workname+"s/"+timeprefix+"sec";
} }
} }

View File

@ -61,6 +61,8 @@ public class J2DAnalyzer {
"the following result sets are combined into a group"); "the following result sets are combined into a group");
out.println(" -NoGroup "+ out.println(" -NoGroup "+
"the following result sets stand on their own"); "the following result sets stand on their own");
out.println(" -ShowUncontested "+
"show results even when only result set has a result");
out.println(" -Graph "+ out.println(" -Graph "+
"graph the results visually (using lines of *'s)"); "graph the results visually (using lines of *'s)");
out.println(" -Best "+ out.println(" -Best "+
@ -83,6 +85,7 @@ public class J2DAnalyzer {
public static void main(String argv[]) { public static void main(String argv[]) {
boolean gavehelp = false; boolean gavehelp = false;
boolean graph = false; boolean graph = false;
boolean ignoreuncontested = true;
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) { if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
String newargs[] = new String[argv.length-1]; String newargs[] = new String[argv.length-1];
System.arraycopy(argv, 1, newargs, 0, newargs.length); System.arraycopy(argv, 1, newargs, 0, newargs.length);
@ -97,6 +100,8 @@ public class J2DAnalyzer {
results.add(groupHolder); results.add(groupHolder);
} else if (arg.equalsIgnoreCase("-NoGroup")) { } else if (arg.equalsIgnoreCase("-NoGroup")) {
groupHolder = null; groupHolder = null;
} else if (arg.equalsIgnoreCase("-ShowUncontested")) {
ignoreuncontested = false;
} else if (arg.equalsIgnoreCase("-Graph")) { } else if (arg.equalsIgnoreCase("-Graph")) {
graph = true; graph = true;
} else if (arg.equalsIgnoreCase("-Best")) { } else if (arg.equalsIgnoreCase("-Best")) {
@ -171,18 +176,23 @@ public class J2DAnalyzer {
String key = keys[k]; String key = keys[k];
ResultHolder rh = base.getResultByKey(key); ResultHolder rh = base.getResultByKey(key);
double score = rh.getScore(); double score = rh.getScore();
System.out.println(rh.getShortKey()+":");
double maxscore = score; double maxscore = score;
if (graph) { int numcontesting = 0;
for (int i = 0; i < numsets; i++) { for (int i = 0; i < numsets; i++) {
ResultSetHolder rsh = ResultSetHolder rsh =
(ResultSetHolder) results.elementAt(i); (ResultSetHolder) results.elementAt(i);
ResultHolder rh2 = rsh.getResultByKey(key); ResultHolder rh2 = rsh.getResultByKey(key);
if (rh2 != null) { if (rh2 != null) {
if (graph) {
maxscore = Math.max(maxscore, rh2.getBestScore()); maxscore = Math.max(maxscore, rh2.getBestScore());
} }
numcontesting++;
} }
} }
if (ignoreuncontested && numcontesting < 2) {
continue;
}
System.out.println(rh.getShortKey()+":");
for (int i = 0; i < numsets; i++) { for (int i = 0; i < numsets; i++) {
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i); ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
System.out.print(rsh.getTitle()+": "); System.out.print(rsh.getTitle()+": ");

View File

@ -38,6 +38,8 @@ import java.awt.RenderingHints;
import java.awt.Polygon; import java.awt.Polygon;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.geom.Point2D;
import java.awt.geom.AffineTransform;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import j2dbench.Destinations; import j2dbench.Destinations;
@ -74,6 +76,7 @@ public abstract class GraphicsTests extends Test {
static Option animList; static Option animList;
static Option sizeList; static Option sizeList;
static Option compRules; static Option compRules;
static Option transforms;
static Option doExtraAlpha; static Option doExtraAlpha;
static Option doXor; static Option doXor;
static Option doClipping; static Option doClipping;
@ -167,6 +170,29 @@ public abstract class GraphicsTests extends Test {
j, rulenames, rules, rulenames, j, rulenames, rules, rulenames,
ruledescs, (1 << defrule)); ruledescs, (1 << defrule));
((Option.ObjectList) compRules).setNumRows(4); ((Option.ObjectList) compRules).setNumRows(4);
Transform xforms[] = {
Identity.instance,
FTranslate.instance,
Scale2x2.instance,
Rotate15.instance,
ShearX.instance,
ShearY.instance,
};
String xformnames[] = new String[xforms.length];
String xformdescs[] = new String[xforms.length];
for (int i = 0; i < xforms.length; i++) {
xformnames[i] = xforms[i].getShortName();
xformdescs[i] = xforms[i].getDescription();
}
transforms =
new Option.ObjectList(groptroot, "transform",
"Affine Transform",
xforms.length,
xformnames, xforms, xformnames,
xformdescs, 0x1);
((Option.ObjectList) transforms).setNumRows(3);
doExtraAlpha = doExtraAlpha =
new Option.Toggle(groptroot, "extraalpha", new Option.Toggle(groptroot, "extraalpha",
"Render with an \"extra alpha\" of 0.125", "Render with an \"extra alpha\" of 0.125",
@ -200,6 +226,7 @@ public abstract class GraphicsTests extends Test {
int orgX, orgY; int orgX, orgY;
int initX, initY; int initX, initY;
int maxX, maxY; int maxX, maxY;
double pixscale;
} }
public GraphicsTests(Group parent, String nodeName, String description) { public GraphicsTests(Group parent, String nodeName, String description) {
@ -211,7 +238,7 @@ public abstract class GraphicsTests extends Test {
public Object initTest(TestEnvironment env, Result result) { public Object initTest(TestEnvironment env, Result result) {
Context ctx = createContext(); Context ctx = createContext();
initContext(env, ctx); initContext(env, ctx);
result.setUnits(pixelsTouched(ctx)); result.setUnits((int) (ctx.pixscale * pixelsTouched(ctx)));
result.setUnitName("pixel"); result.setUnitName("pixel");
return ctx; return ctx;
} }
@ -232,6 +259,9 @@ public abstract class GraphicsTests extends Test {
ctx.graphics = env.getGraphics(); ctx.graphics = env.getGraphics();
int w = env.getWidth(); int w = env.getWidth();
int h = env.getHeight(); int h = env.getHeight();
ctx.size = env.getIntValue(sizeList);
ctx.outdim = getOutputSize(ctx.size, ctx.size);
ctx.pixscale = 1.0;
if (hasGraphics2D) { if (hasGraphics2D) {
Graphics2D g2d = (Graphics2D) ctx.graphics; Graphics2D g2d = (Graphics2D) ctx.graphics;
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules); AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
@ -251,11 +281,14 @@ public abstract class GraphicsTests extends Test {
p.addPoint(0, 0); p.addPoint(0, 0);
g2d.clip(p); g2d.clip(p);
} }
Transform tx = (Transform) env.getModifier(transforms);
Dimension envdim = new Dimension(w, h);
tx.init(g2d, ctx, envdim);
w = envdim.width;
h = envdim.height;
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
env.getModifier(renderHint)); env.getModifier(renderHint));
} }
ctx.size = env.getIntValue(sizeList);
ctx.outdim = getOutputSize(ctx.size, ctx.size);
switch (env.getIntValue(animList)) { switch (env.getIntValue(animList)) {
case 0: case 0:
ctx.animate = false; ctx.animate = false;
@ -290,4 +323,201 @@ public abstract class GraphicsTests extends Test {
graphics.dispose(); graphics.dispose();
((Context) ctx).graphics = null; ((Context) ctx).graphics = null;
} }
public abstract static class Transform {
public abstract String getShortName();
public abstract String getDescription();
public abstract void init(Graphics2D g2d, Context ctx, Dimension dim);
public static double scaleForPoint(AffineTransform at,
double xorig, double yorig,
double x, double y,
int w, int h)
{
Point2D.Double ptd = new Point2D.Double(x, y);
at.transform(ptd, ptd);
x = ptd.getX();
y = ptd.getY();
double scale = 1.0;
if (x < 0) {
scale = Math.min(scale, xorig / (xorig - x));
} else if (x > w) {
scale = Math.min(scale, (w - xorig) / (x - xorig));
}
if (y < 0) {
scale = Math.min(scale, yorig / (yorig - y));
} else if (y > h) {
scale = Math.min(scale, (h - yorig) / (y - yorig));
}
return scale;
}
public static Dimension scaleForTransform(AffineTransform at,
Dimension dim)
{
int w = dim.width;
int h = dim.height;
Point2D.Double ptd = new Point2D.Double(0, 0);
at.transform(ptd, ptd);
double ox = ptd.getX();
double oy = ptd.getY();
if (ox < 0 || ox > w || oy < 0 || oy > h) {
throw new InternalError("origin outside destination");
}
double scalex = scaleForPoint(at, ox, oy, w, h, w, h);
double scaley = scalex;
scalex = Math.min(scaleForPoint(at, ox, oy, w, 0, w, h), scalex);
scaley = Math.min(scaleForPoint(at, ox, oy, 0, h, w, h), scaley);
if (scalex < 0 || scaley < 0) {
throw new InternalError("could not fit dims to transform");
}
return new Dimension((int) Math.floor(w * scalex),
(int) Math.floor(h * scaley));
}
}
public static class Identity extends Transform {
public static final Identity instance = new Identity();
private Identity() {}
public String getShortName() {
return "ident";
}
public String getDescription() {
return "Identity";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
}
}
public static class FTranslate extends Transform {
public static final FTranslate instance = new FTranslate();
private FTranslate() {}
public String getShortName() {
return "ftrans";
}
public String getDescription() {
return "FTranslate 1.5";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
int w = dim.width;
int h = dim.height;
AffineTransform at = new AffineTransform();
at.translate(1.5, 1.5);
g2d.transform(at);
dim.setSize(w-3, h-3);
}
}
public static class Scale2x2 extends Transform {
public static final Scale2x2 instance = new Scale2x2();
private Scale2x2() {}
public String getShortName() {
return "scale2x2";
}
public String getDescription() {
return "Scale 2x by 2x";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
int w = dim.width;
int h = dim.height;
AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0);
g2d.transform(at);
dim.setSize(w/2, h/2);
ctx.pixscale = 4;
}
}
public static class Rotate15 extends Transform {
public static final Rotate15 instance = new Rotate15();
private Rotate15() {}
public String getShortName() {
return "rot15";
}
public String getDescription() {
return "Rotate 15 degrees";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
int w = dim.width;
int h = dim.height;
double theta = Math.toRadians(15);
double cos = Math.cos(theta);
double sin = Math.sin(theta);
double xsize = sin * h + cos * w;
double ysize = sin * w + cos * h;
double scale = Math.min(w / xsize, h / ysize);
xsize *= scale;
ysize *= scale;
AffineTransform at = new AffineTransform();
at.translate((w - xsize) / 2.0, (h - ysize) / 2.0);
at.translate(sin * h * scale, 0.0);
at.rotate(theta);
g2d.transform(at);
dim.setSize(scaleForTransform(at, dim));
}
}
public static class ShearX extends Transform {
public static final ShearX instance = new ShearX();
private ShearX() {}
public String getShortName() {
return "shearx";
}
public String getDescription() {
return "Shear X to the right";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
int w = dim.width;
int h = dim.height;
AffineTransform at = new AffineTransform();
at.translate(0.0, (h - (w*h)/(w + h*0.1)) / 2);
at.shear(0.1, 0.0);
g2d.transform(at);
dim.setSize(scaleForTransform(at, dim));
}
}
public static class ShearY extends Transform {
public static final ShearY instance = new ShearY();
private ShearY() {}
public String getShortName() {
return "sheary";
}
public String getDescription() {
return "Shear Y down";
}
public void init(Graphics2D g2d, Context ctx, Dimension dim) {
int w = dim.width;
int h = dim.height;
AffineTransform at = new AffineTransform();
at.translate((w - (w*h)/(h + w*0.1)) / 2, 0.0);
at.shear(0.0, 0.1);
g2d.transform(at);
dim.setSize(scaleForTransform(at, dim));
}
}
} }

View File

@ -454,7 +454,7 @@ public abstract class TextTests extends Test {
taaNames, taaHints, taaNames, taaHints,
taaNames, taaNames, taaNames, taaNames,
0x1); 0x1);
((Option.ObjectList) taaList).setNumRows(2); ((Option.ObjectList) taaList).setNumRows(6);
// add special TextAAOpt for backwards compatibility with // add special TextAAOpt for backwards compatibility with
// older options files // older options files
new TextAAOpt(); new TextAAOpt();
@ -707,3 +707,4 @@ public abstract class TextTests extends Test {
} }
} }
} }

View File

@ -31,5 +31,9 @@ disabledMechanisms = {
CKM_SHA256_RSA_PKCS CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS CKM_SHA512_RSA_PKCS
# the following mechanisms are disabled to ensure backward compatibility (Solaris bug 6545046)
CKM_DES_CBC_PAD
CKM_DES3_CBC_PAD
CKM_AES_CBC_PAD
} }

View File

@ -132,14 +132,17 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
in_buf = (jbyte *) malloc(this_len); in_buf = (jbyte *) malloc(this_len);
if (in_buf == 0) { if (in_buf == 0) {
JNU_ThrowOutOfMemoryError(env, 0); // Throw OOME only when length is not zero
if (this_len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf); (*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
out_buf = (jbyte *) malloc(len); out_buf = (jbyte *) malloc(len);
if (out_buf == 0) { if (out_buf == 0) {
free(in_buf); free(in_buf);
JNU_ThrowOutOfMemoryError(env, 0); if (len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }
@ -173,7 +176,8 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
jboolean finish = (*env)->GetBooleanField(env, this, finishID); jboolean finish = (*env)->GetBooleanField(env, this, finishID);
in_buf = (jbyte *) malloc(this_len); in_buf = (jbyte *) malloc(this_len);
if (in_buf == 0) { if (in_buf == 0) {
JNU_ThrowOutOfMemoryError(env, 0); if (this_len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf); (*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
@ -181,7 +185,8 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
out_buf = (jbyte *) malloc(len); out_buf = (jbyte *) malloc(len);
if (out_buf == 0) { if (out_buf == 0) {
free(in_buf); free(in_buf);
JNU_ThrowOutOfMemoryError(env, 0); if (len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }

View File

@ -135,7 +135,8 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr,
in_buf = (jbyte *) malloc(in_len); in_buf = (jbyte *) malloc(in_len);
if (in_buf == 0) { if (in_buf == 0) {
JNU_ThrowOutOfMemoryError(env, 0); if (in_len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }
(*env)->GetByteArrayRegion(env, this_buf, this_off, in_len, in_buf); (*env)->GetByteArrayRegion(env, this_buf, this_off, in_len, in_buf);
@ -143,7 +144,8 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr,
out_buf = (jbyte *) malloc(len); out_buf = (jbyte *) malloc(len);
if (out_buf == 0) { if (out_buf == 0) {
free(in_buf); free(in_buf);
JNU_ThrowOutOfMemoryError(env, 0); if (len != 0)
JNU_ThrowOutOfMemoryError(env, 0);
return 0; return 0;
} }

View File

@ -314,7 +314,7 @@ findEND(jzfile *zip, void *endbuf)
if (pos < 0) { if (pos < 0) {
/* Pretend there are some NUL bytes before start of file */ /* Pretend there are some NUL bytes before start of file */
off = -pos; off = -pos;
memset(buf, '\0', off); memset(buf, '\0', (size_t)off);
} }
if (readFullyAt(zfd, buf + off, sizeof(buf) - off, if (readFullyAt(zfd, buf + off, sizeof(buf) - off,
@ -426,7 +426,7 @@ static int
isMetaName(const char *name, int length) isMetaName(const char *name, int length)
{ {
const char *s; const char *s;
if (length < sizeof("META-INF/") - 1) if (length < (int)sizeof("META-INF/") - 1)
return 0; return 0;
for (s = "META-INF/"; *s != '\0'; s++) { for (s = "META-INF/"; *s != '\0'; s++) {
char c = *name++; char c = *name++;
@ -912,7 +912,7 @@ readCENHeader(jzfile *zip, jlong cenpos, jint bufsize)
ZFILE zfd = zip->zfd; ZFILE zfd = zip->zfd;
char *cen; char *cen;
if (bufsize > zip->len - cenpos) if (bufsize > zip->len - cenpos)
bufsize = zip->len - cenpos; bufsize = (jint)(zip->len - cenpos);
if ((cen = malloc(bufsize)) == NULL) goto Catch; if ((cen = malloc(bufsize)) == NULL) goto Catch;
if (readFullyAt(zfd, cen, bufsize, cenpos) == -1) goto Catch; if (readFullyAt(zfd, cen, bufsize, cenpos) == -1) goto Catch;
censize = CENSIZE(cen); censize = CENSIZE(cen);
@ -1256,6 +1256,9 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
* file had been previously locked with ZIP_Lock(). Returns the * file had been previously locked with ZIP_Lock(). Returns the
* number of bytes read, or -1 if an error occurred. If zip->msg != 0 * number of bytes read, or -1 if an error occurred. If zip->msg != 0
* then a zip error occurred and zip->msg contains the error text. * then a zip error occurred and zip->msg contains the error text.
*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/ */
jint jint
ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len) ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
@ -1276,7 +1279,7 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
if (len <= 0) if (len <= 0)
return 0; return 0;
if (len > entry_size - pos) if (len > entry_size - pos)
len = entry_size - pos; len = (jint)(entry_size - pos);
/* Get file offset to start reading data */ /* Get file offset to start reading data */
start = ZIP_GetEntryDataOffset(zip, entry); start = ZIP_GetEntryDataOffset(zip, entry);
@ -1306,6 +1309,9 @@ ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len)
* from ZIP/JAR files specified in the class path. It is defined here * from ZIP/JAR files specified in the class path. It is defined here
* so that it can be dynamically loaded by the runtime if the zip library * so that it can be dynamically loaded by the runtime if the zip library
* is found. * is found.
*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/ */
jboolean jboolean
InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg) InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
@ -1314,7 +1320,6 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
char tmp[BUF_SIZE]; char tmp[BUF_SIZE];
jlong pos = 0; jlong pos = 0;
jlong count = entry->csize; jlong count = entry->csize;
jboolean status;
*msg = 0; /* Reset error message */ *msg = 0; /* Reset error message */
@ -1330,10 +1335,10 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
} }
strm.next_out = buf; strm.next_out = buf;
strm.avail_out = entry->size; strm.avail_out = (uInt)entry->size;
while (count > 0) { while (count > 0) {
jint n = count > (jlong)sizeof(tmp) ? (jint)sizeof(tmp) : count; jint n = count > (jlong)sizeof(tmp) ? (jint)sizeof(tmp) : (jint)count;
ZIP_Lock(zip); ZIP_Lock(zip);
n = ZIP_Read(zip, entry, pos, tmp, n); n = ZIP_Read(zip, entry, pos, tmp, n);
ZIP_Unlock(zip); ZIP_Unlock(zip);
@ -1368,12 +1373,16 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
return JNI_TRUE; return JNI_TRUE;
} }
/*
* The current implementation does not support reading an entry that
* has the size bigger than 2**32 bytes in ONE invocation.
*/
jzentry * JNICALL jzentry * JNICALL
ZIP_FindEntry(jzfile *zip, char *name, jint *sizeP, jint *nameLenP) ZIP_FindEntry(jzfile *zip, char *name, jint *sizeP, jint *nameLenP)
{ {
jzentry *entry = ZIP_GetEntry(zip, name, 0); jzentry *entry = ZIP_GetEntry(zip, name, 0);
if (entry) { if (entry) {
*sizeP = entry->size; *sizeP = (jint)entry->size;
*nameLenP = strlen(entry->name); *nameLenP = strlen(entry->name);
} }
return entry; return entry;

View File

@ -75,7 +75,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
deflateEnd(&stream); deflateEnd(&stream);
return err == Z_OK ? Z_BUF_ERROR : err; return err == Z_OK ? Z_BUF_ERROR : err;
} }
*destLen = stream.total_out; *destLen = (uLong)stream.total_out;
err = deflateEnd(&stream); err = deflateEnd(&stream);
return err; return err;

View File

@ -78,7 +78,7 @@ int ZEXPORT uncompress (dest, destLen, source, sourceLen)
return Z_DATA_ERROR; return Z_DATA_ERROR;
return err; return err;
} }
*destLen = stream.total_out; *destLen = (uLong)stream.total_out;
err = inflateEnd(&stream); err = inflateEnd(&stream);
return err; return err;

View File

@ -57,9 +57,12 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer {
private native void run(String title, int mode, String dir, String file, private native void run(String title, int mode, String dir, String file,
FilenameFilter filter, boolean isMultipleMode); FilenameFilter filter, boolean isMultipleMode);
private native void quit(); private native void quit();
@Override
public native void toFront();
/** /**
* Called exclusively by the native C code. * Called exclusively by the native C code.
*/ */

View File

@ -150,6 +150,8 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
void updateChildrenSizes() { void updateChildrenSizes() {
super.updateChildrenSizes(); super.updateChildrenSizes();
int height = getMenuBarHeight();
// XWindow.reshape calls XBaseWindow.xSetBounds, which acquires // XWindow.reshape calls XBaseWindow.xSetBounds, which acquires
// the AWT lock, so we have to acquire the AWT lock here // the AWT lock, so we have to acquire the AWT lock here
// before getStateLock() to avoid a deadlock with the Toolkit thread // before getStateLock() to avoid a deadlock with the Toolkit thread
@ -159,7 +161,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
synchronized(getStateLock()) { synchronized(getStateLock()) {
int width = dimensions.getClientSize().width; int width = dimensions.getClientSize().width;
if (menubarPeer != null) { if (menubarPeer != null) {
menubarPeer.reshape(0, 0, width, getMenuBarHeight()); menubarPeer.reshape(0, 0, width, height);
} }
} }
} finally { } finally {

View File

@ -217,15 +217,18 @@ static int ParseLocale(int cat, char ** std_language, char ** std_script,
/* Normalize the language name */ /* Normalize the language name */
if (std_language != NULL) { if (std_language != NULL) {
*std_language = "en"; *std_language = "en";
if (language != NULL) { if (language != NULL && mapLookup(language_names, language, std_language) == 0) {
mapLookup(language_names, language, std_language); *std_language = malloc(strlen(language)+1);
strcpy(*std_language, language);
} }
} }
/* Normalize the country name */ /* Normalize the country name */
if (std_country != NULL && country != NULL) { if (std_country != NULL && country != NULL) {
*std_country = country; if (mapLookup(country_names, country, std_country) == 0) {
mapLookup(country_names, country, std_country); *std_country = malloc(strlen(country)+1);
strcpy(*std_country, country);
}
} }
/* Normalize the script and variant name. Note that we only use /* Normalize the script and variant name. Note that we only use

View File

@ -87,7 +87,7 @@
"zh", "zh_CN", "zh", "zh_CN",
#ifdef __linux__ #ifdef __linux__
"bokmal", "nb_NO", "bokmal", "nb_NO",
"bokm\u00e5l", "nb_NO", "bokm\xE5l", "nb_NO",
"catalan", "ca_ES", "catalan", "ca_ES",
"croatian", "hr_HR", "croatian", "hr_HR",
"czech", "cs_CZ", "czech", "cs_CZ",
@ -144,203 +144,16 @@
static char *language_names[] = { static char *language_names[] = {
"C", "en", "C", "en",
"POSIX", "en", "POSIX", "en",
"aa", "aa",
"ab", "ab",
"ae", "ae",
"af", "af",
"ak", "ak",
"am", "am",
"an", "an",
"ar", "ar",
"as", "as",
"av", "av",
"ay", "ay",
"az", "az",
"ba", "ba",
"be", "be",
"bg", "bg",
"bh", "bh",
"bi", "bi",
"bm", "bm",
"bn", "bn",
"bo", "bo",
"br", "br",
"bs", "bs",
"ca", "ca",
"ce", "ce",
"ch", "ch",
"co", "co",
"cr", "cr",
"cs", "cs",
"cz", "cs", "cz", "cs",
"cu", "cu",
"cv", "cv",
"cy", "cy",
"da", "da",
"de", "de",
"dv", "dv",
"dz", "dz",
"ee", "ee",
"el", "el",
"en", "en",
"eo", "eo",
"es", "es",
"et", "et",
"eu", "eu",
"fa", "fa",
"ff", "ff",
"fi", "fi",
"fj", "fj",
"fo", "fo",
"fr", "fr",
"fy", "fy",
"ga", "ga",
"gd", "gd",
"gl", "gl",
"gn", "gn",
"gu", "gu",
"gv", "gv",
"ha", "ha",
"he", "iw", "he", "iw",
"hi", "hi",
"ho", "ho",
"hr", "hr",
#ifdef __linux__ #ifdef __linux__
"hs", "en", // used on Linux, not clear what it stands for "hs", "en", // used on Linux, not clear what it stands for
#endif #endif
"ht", "ht",
"hu", "hu",
"hy", "hy",
"hz", "hz",
"ia", "ia",
"id", "in", "id", "in",
"ie", "ie",
"ig", "ig",
"ii", "ii",
"ik", "ik",
"in", "in",
"io", "io",
"is", "is",
"it", "it",
"iu", "iu",
"iw", "iw",
"ja", "ja",
"ji", "yi",
"jv", "jv",
"ka", "ka",
"kg", "kg",
"ki", "ki",
"kj", "kj",
"kk", "kk",
"kl", "kl",
"km", "km",
"kn", "kn",
"ko", "ko",
"kr", "kr",
"ks", "ks",
"ku", "ku",
"kv", "kv",
"kw", "kw",
"ky", "ky",
"la", "la",
"lb", "lb",
"lg", "lg",
"li", "li",
"ln", "ln",
"lo", "lo",
"lt", "lt",
"lu", "lu",
"lv", "lv",
"mg", "mg",
"mh", "mh",
"mi", "mi",
"mk", "mk",
"ml", "ml",
"mn", "mn",
"mo", "mo",
"mr", "mr",
"ms", "ms",
"mt", "mt",
"my", "my",
"na", "na",
"nb", "nb",
"nd", "nd",
"ne", "ne",
"ng", "ng",
"nl", "nl",
"nn", "nn",
"no", "no",
"nr", "nr",
"nv", "nv",
"ny", "ny",
"oc", "oc",
"oj", "oj",
"om", "om",
"or", "or",
"os", "os",
"pa", "pa",
"pi", "pi",
"pl", "pl",
"ps", "ps",
"pt", "pt",
"qu", "qu",
"rm", "rm",
"rn", "rn",
"ro", "ro",
"ru", "ru",
"rw", "rw",
"sa", "sa",
"sc", "sc",
"sd", "sd",
"se", "se",
"sg", "sg",
"sh", "sr", // sh is deprecated "sh", "sr", // sh is deprecated
"si", "si",
"sk", "sk",
"sl", "sl",
"sm", "sm",
"sn", "sn",
"so", "so",
"sq", "sq",
"sr", "sr",
"ss", "ss",
"st", "st",
"su", "fi", "su", "fi",
"sv", "sv",
"sw", "sw",
"ta", "ta",
"te", "te",
"tg", "tg",
"th", "th",
"ti", "ti",
"tk", "tk",
"tl", "tl",
"tn", "tn",
"to", "to",
"tr", "tr",
"ts", "ts",
"tt", "tt",
"tw", "tw",
"ty", "ty",
#ifdef __linux__ #ifdef __linux__
"ua", "en", // used on Linux, not clear what it stands for "ua", "en", // used on Linux, not clear what it stands for
#endif
"ug", "ug",
"uk", "uk",
"ur", "ur",
"uz", "uz",
"ve", "ve",
"vi", "vi",
"vo", "vo",
"wa", "wa",
"wo", "wo",
"xh", "xh",
"yi", "yi",
"yo", "yo",
"za", "za",
"zh", "zh",
"zu", "zu",
#ifdef __linux__
"catalan", "ca", "catalan", "ca",
"croatian", "hr", "croatian", "hr",
"czech", "cs", "czech", "cs",
@ -375,493 +188,6 @@ static char *language_names[] = {
"japanese", "ja", "japanese", "ja",
"korean", "ko", "korean", "ko",
#endif #endif
/* ISO 639.2 codes */
"aar", "aar",
"abk", "abk",
"ace", "ace",
"ach", "ach",
"ada", "ada",
"ady", "ady",
"afa", "afa",
"afh", "afh",
"afr", "afr",
"ain", "ain",
"aka", "aka",
"akk", "akk",
"alb", "alb",
"ale", "ale",
"alg", "alg",
"alt", "alt",
"amh", "amh",
"ang", "ang",
"anp", "anp",
"apa", "apa",
"ara", "ara",
"arc", "arc",
"arg", "arg",
"arm", "arm",
"arn", "arn",
"arp", "arp",
"art", "art",
"arw", "arw",
"asm", "asm",
"ast", "ast",
"ath", "ath",
"aus", "aus",
"ava", "ava",
"ave", "ave",
"awa", "awa",
"aym", "aym",
"aze", "aze",
"bad", "bad",
"bai", "bai",
"bak", "bak",
"bal", "bal",
"bam", "bam",
"ban", "ban",
"baq", "baq",
"bas", "bas",
"bat", "bat",
"bej", "bej",
"bel", "bel",
"bem", "bem",
"ben", "ben",
"ber", "ber",
"bho", "bho",
"bih", "bih",
"bik", "bik",
"bin", "bin",
"bis", "bis",
"bla", "bla",
"bnt", "bnt",
"bos", "bos",
"bra", "bra",
"bre", "bre",
"btk", "btk",
"bua", "bua",
"bug", "bug",
"bul", "bul",
"bur", "bur",
"byn", "byn",
"cad", "cad",
"cai", "cai",
"car", "car",
"cat", "cat",
"cau", "cau",
"ceb", "ceb",
"cel", "cel",
"cha", "cha",
"chb", "chb",
"che", "che",
"chg", "chg",
"chi", "chi",
"chk", "chk",
"chm", "chm",
"chn", "chn",
"cho", "cho",
"chp", "chp",
"chr", "chr",
"chu", "chu",
"chv", "chv",
"chy", "chy",
"cmc", "cmc",
"cop", "cop",
"cor", "cor",
"cos", "cos",
"cpe", "cpe",
"cpf", "cpf",
"cpp", "cpp",
"cre", "cre",
"crh", "crh",
"crp", "crp",
"csb", "csb",
"cus", "cus",
"cze", "cze",
"dak", "dak",
"dan", "dan",
"dar", "dar",
"day", "day",
"del", "del",
"den", "den",
"dgr", "dgr",
"din", "din",
"div", "div",
"doi", "doi",
"dra", "dra",
"dsb", "dsb",
"dua", "dua",
"dum", "dum",
"dut", "dut",
"dyu", "dyu",
"dzo", "dzo",
"efi", "efi",
"egy", "egy",
"eka", "eka",
"elx", "elx",
"eng", "eng",
"enm", "enm",
"epo", "epo",
"est", "est",
"ewe", "ewe",
"ewo", "ewo",
"fan", "fan",
"fao", "fao",
"fat", "fat",
"fij", "fij",
"fil", "fil",
"fin", "fin",
"fiu", "fiu",
"fon", "fon",
"fre", "fre",
"frm", "frm",
"fro", "fro",
"frr", "frr",
"frs", "frs",
"fry", "fry",
"ful", "ful",
"fur", "fur",
"gaa", "gaa",
"gay", "gay",
"gba", "gba",
"gem", "gem",
"geo", "geo",
"ger", "ger",
"gez", "gez",
"gil", "gil",
"gla", "gla",
"gle", "gle",
"glg", "glg",
"glv", "glv",
"gmh", "gmh",
"goh", "goh",
"gon", "gon",
"gor", "gor",
"got", "got",
"grb", "grb",
"grc", "grc",
"gre", "gre",
"grn", "grn",
"gsw", "gsw",
"guj", "guj",
"gwi", "gwi",
"hai", "hai",
"hat", "hat",
"hau", "hau",
"haw", "haw",
"heb", "heb",
"her", "her",
"hil", "hil",
"him", "him",
"hin", "hin",
"hit", "hit",
"hmn", "hmn",
"hmo", "hmo",
"hrv", "hrv",
"hsb", "hsb",
"hun", "hun",
"hup", "hup",
"iba", "iba",
"ibo", "ibo",
"ice", "ice",
"ido", "ido",
"iii", "iii",
"ijo", "ijo",
"iku", "iku",
"ile", "ile",
"ilo", "ilo",
"ina", "ina",
"inc", "inc",
"ind", "ind",
"ine", "ine",
"inh", "inh",
"ipk", "ipk",
"ira", "ira",
"iro", "iro",
"ita", "ita",
"jav", "jav",
"jbo", "jbo",
"jpn", "jpn",
"jpr", "jpr",
"jrb", "jrb",
"kaa", "kaa",
"kab", "kab",
"kac", "kac",
"kal", "kal",
"kam", "kam",
"kan", "kan",
"kar", "kar",
"kas", "kas",
"kau", "kau",
"kaw", "kaw",
"kaz", "kaz",
"kbd", "kbd",
"kha", "kha",
"khi", "khi",
"khm", "khm",
"kho", "kho",
"kik", "kik",
"kin", "kin",
"kir", "kir",
"kmb", "kmb",
"kok", "kok",
"kom", "kom",
"kon", "kon",
"kor", "kor",
"kos", "kos",
"kpe", "kpe",
"krc", "krc",
"krl", "krl",
"kro", "kro",
"kru", "kru",
"kua", "kua",
"kum", "kum",
"kur", "kur",
"kut", "kut",
"lad", "lad",
"lah", "lah",
"lam", "lam",
"lao", "lao",
"lat", "lat",
"lav", "lav",
"lez", "lez",
"lim", "lim",
"lin", "lin",
"lit", "lit",
"lol", "lol",
"loz", "loz",
"ltz", "ltz",
"lua", "lua",
"lub", "lub",
"lug", "lug",
"lui", "lui",
"lun", "lun",
"luo", "luo",
"lus", "lus",
"mac", "mac",
"mad", "mad",
"mag", "mag",
"mah", "mah",
"mai", "mai",
"mak", "mak",
"mal", "mal",
"man", "man",
"mao", "mao",
"map", "map",
"mar", "mar",
"mas", "mas",
"may", "may",
"mdf", "mdf",
"mdr", "mdr",
"men", "men",
"mga", "mga",
"mic", "mic",
"min", "min",
"mis", "mis",
"mkh", "mkh",
"mlg", "mlg",
"mlt", "mlt",
"mnc", "mnc",
"mni", "mni",
"mno", "mno",
"moh", "moh",
"mon", "mon",
"mos", "mos",
"mul", "mul",
"mun", "mun",
"mus", "mus",
"mwl", "mwl",
"mwr", "mwr",
"myn", "myn",
"myv", "myv",
"nah", "nah",
"nai", "nai",
"nap", "nap",
"nau", "nau",
"nav", "nav",
"nbl", "nbl",
"nde", "nde",
"ndo", "ndo",
"nds", "nds",
"nep", "nep",
"new", "new",
"nia", "nia",
"nic", "nic",
"niu", "niu",
"nno", "nno",
"nob", "nob",
"nog", "nog",
"non", "non",
"nor", "nor",
"nqo", "nqo",
"nso", "nso",
"nub", "nub",
"nwc", "nwc",
"nya", "nya",
"nym", "nym",
"nyn", "nyn",
"nyo", "nyo",
"nzi", "nzi",
"oci", "oci",
"oji", "oji",
"ori", "ori",
"orm", "orm",
"osa", "osa",
"oss", "oss",
"ota", "ota",
"oto", "oto",
"paa", "paa",
"pag", "pag",
"pal", "pal",
"pam", "pam",
"pan", "pan",
"pap", "pap",
"pau", "pau",
"peo", "peo",
"per", "per",
"phi", "phi",
"phn", "phn",
"pli", "pli",
"pol", "pol",
"pon", "pon",
"por", "por",
"pra", "pra",
"pro", "pro",
"pus", "pus",
"que", "que",
"raj", "raj",
"rap", "rap",
"rar", "rar",
"roa", "roa",
"roh", "roh",
"rom", "rom",
"rum", "rum",
"run", "run",
"rup", "rup",
"rus", "rus",
"sad", "sad",
"sag", "sag",
"sah", "sah",
"sai", "sai",
"sal", "sal",
"sam", "sam",
"san", "san",
"sas", "sas",
"sat", "sat",
"scn", "scn",
"sco", "sco",
"sel", "sel",
"sem", "sem",
"sga", "sga",
"sgn", "sgn",
"shn", "shn",
"sid", "sid",
"sin", "sin",
"sio", "sio",
"sit", "sit",
"sla", "sla",
"slo", "slo",
"slv", "slv",
"sma", "sma",
"sme", "sme",
"smi", "smi",
"smj", "smj",
"smn", "smn",
"smo", "smo",
"sms", "sms",
"sna", "sna",
"snd", "snd",
"snk", "snk",
"sog", "sog",
"som", "som",
"son", "son",
"sot", "sot",
"spa", "spa",
"srd", "srd",
"srn", "srn",
"srp", "srp",
"srr", "srr",
"ssa", "ssa",
"ssw", "ssw",
"suk", "suk",
"sun", "sun",
"sus", "sus",
"sux", "sux",
"swa", "swa",
"swe", "swe",
"syc", "syc",
"syr", "syr",
"tah", "tah",
"tai", "tai",
"tam", "tam",
"tat", "tat",
"tel", "tel",
"tem", "tem",
"ter", "ter",
"tet", "tet",
"tgk", "tgk",
"tgl", "tgl",
"tha", "tha",
"tib", "tib",
"tig", "tig",
"tir", "tir",
"tiv", "tiv",
"tkl", "tkl",
"tlh", "tlh",
"tli", "tli",
"tmh", "tmh",
"tog", "tog",
"ton", "ton",
"tpi", "tpi",
"tsi", "tsi",
"tsn", "tsn",
"tso", "tso",
"tuk", "tuk",
"tum", "tum",
"tup", "tup",
"tur", "tur",
"tut", "tut",
"tvl", "tvl",
"twi", "twi",
"tyv", "tyv",
"udm", "udm",
"uga", "uga",
"uig", "uig",
"ukr", "ukr",
"umb", "umb",
"und", "und",
"urd", "urd",
"uzb", "uzb",
"vai", "vai",
"ven", "ven",
"vie", "vie",
"vol", "vol",
"vot", "vot",
"wak", "wak",
"wal", "wal",
"war", "war",
"was", "was",
"wel", "wel",
"wen", "wen",
"wln", "wln",
"wol", "wol",
"xal", "xal",
"xho", "xho",
"yao", "yao",
"yap", "yap",
"yid", "yid",
"yor", "yor",
"ypk", "ypk",
"zap", "zap",
"zbl", "zbl",
"zen", "zen",
"zha", "zha",
"znd", "znd",
"zul", "zul",
"zun", "zun",
"zxx", "zxx",
"zza", "zza",
"", "",
}; };
@ -882,253 +208,10 @@ static char *script_names[] = {
* Linux/Solaris country string to ISO3166 string mapping table. * Linux/Solaris country string to ISO3166 string mapping table.
*/ */
static char *country_names[] = { static char *country_names[] = {
"AD", "AD",
"AE", "AE",
"AF", "AF",
"AG", "AG",
"AI", "AI",
"AL", "AL",
"AM", "AM",
"AN", "AN",
"AO", "AO",
"AQ", "AQ",
"AR", "AR",
"AS", "AS",
"AT", "AT",
"AU", "AU",
"AW", "AW",
"AX", "AX",
"AZ", "AZ",
"BA", "BA",
"BB", "BB",
"BD", "BD",
"BE", "BE",
"BF", "BF",
"BG", "BG",
"BH", "BH",
"BI", "BI",
"BJ", "BJ",
"BM", "BM",
"BN", "BN",
"BO", "BO",
"BR", "BR",
"BS", "BS",
"BT", "BT",
"BV", "BV",
"BW", "BW",
"BY", "BY",
"BZ", "BZ",
"CA", "CA",
"CC", "CC",
"CD", "CD",
"CF", "CF",
"CG", "CG",
"CH", "CH",
"CI", "CI",
"CK", "CK",
"CL", "CL",
"CM", "CM",
"CN", "CN",
"CO", "CO",
"CR", "CR",
"CS", "CS",
"CU", "CU",
"CV", "CV",
"CX", "CX",
"CY", "CY",
"CZ", "CZ",
"DE", "DE",
"DJ", "DJ",
"DK", "DK",
"DM", "DM",
"DO", "DO",
"DZ", "DZ",
"EC", "EC",
"EE", "EE",
"EG", "EG",
"EH", "EH",
"ER", "ER",
"ES", "ES",
"ET", "ET",
"FI", "FI",
"FJ", "FJ",
"FK", "FK",
"FM", "FM",
"FO", "FO",
"FR", "FR",
"GA", "GA",
"GB", "GB",
"GD", "GD",
"GE", "GE",
"GF", "GF",
"GH", "GH",
"GI", "GI",
"GL", "GL",
"GM", "GM",
"GN", "GN",
"GP", "GP",
"GQ", "GQ",
"GR", "GR",
"GS", "GS",
"GT", "GT",
"GU", "GU",
"GW", "GW",
"GY", "GY",
"HK", "HK",
"HM", "HM",
"HN", "HN",
"HR", "HR",
"HT", "HT",
"HU", "HU",
"ID", "ID",
"IE", "IE",
"IL", "IL",
"IN", "IN",
"IO", "IO",
"IQ", "IQ",
"IR", "IR",
"IS", "IS",
"IT", "IT",
"JM", "JM",
"JO", "JO",
"JP", "JP",
"KE", "KE",
"KG", "KG",
"KH", "KH",
"KI", "KI",
"KM", "KM",
"KN", "KN",
"KP", "KP",
"KR", "KR",
"KW", "KW",
"KY", "KY",
"KZ", "KZ",
"LA", "LA",
"LB", "LB",
"LC", "LC",
"LI", "LI",
"LK", "LK",
"LR", "LR",
"LS", "LS",
"LT", "LT",
"LU", "LU",
"LV", "LV",
"LY", "LY",
"MA", "MA",
"MC", "MC",
"MD", "MD",
"ME", "ME",
"MG", "MG",
"MH", "MH",
"MK", "MK",
"ML", "ML",
"MM", "MM",
"MN", "MN",
"MO", "MO",
"MP", "MP",
"MQ", "MQ",
"MR", "MR",
"MS", "MS",
"MT", "MT",
"MU", "MU",
"MV", "MV",
"MW", "MW",
"MX", "MX",
"MY", "MY",
"MZ", "MZ",
"NA", "NA",
"NC", "NC",
"NE", "NE",
"NF", "NF",
"NG", "NG",
"NI", "NI",
"NL", "NL",
"NO", "NO",
"NP", "NP",
"NR", "NR",
"NU", "NU",
"NZ", "NZ",
"OM", "OM",
"PA", "PA",
"PE", "PE",
"PF", "PF",
"PG", "PG",
"PH", "PH",
"PK", "PK",
"PL", "PL",
"PM", "PM",
"PN", "PN",
"PR", "PR",
"PS", "PS",
"PT", "PT",
"PW", "PW",
"PY", "PY",
"QA", "QA",
"RE", "RE",
#ifdef __linux__ #ifdef __linux__
"RN", "US", // used on Linux, not clear what it stands for "RN", "US", // used on Linux, not clear what it stands for
#endif #endif
"RO", "RO",
"RS", "RS",
"RU", "RU",
"RW", "RW",
"SA", "SA",
"SB", "SB",
"SC", "SC",
"SD", "SD",
"SE", "SE",
"SG", "SG",
"SH", "SH",
"SI", "SI",
"SJ", "SJ",
"SK", "SK",
"SL", "SL",
"SM", "SM",
"SN", "SN",
"SO", "SO",
"SR", "SR",
"ST", "ST",
"SV", "SV",
"SY", "SY",
"SZ", "SZ",
"TC", "TC",
"TD", "TD",
"TF", "TF",
"TG", "TG",
"TH", "TH",
"TJ", "TJ",
"TK", "TK",
"TL", "TL",
"TM", "TM",
"TN", "TN",
"TO", "TO",
"TR", "TR",
"TT", "TT",
"TV", "TV",
"TW", "TW",
"TZ", "TZ",
"UA", "UA",
"UG", "UG",
"UK", "GB",
"UM", "UM",
"US", "US",
"UY", "UY",
"UZ", "UZ",
"VA", "VA",
"VC", "VC",
"VE", "VE",
"VG", "VG",
"VI", "VI",
"VN", "VN",
"VU", "VU",
"WF", "WF",
"WS", "WS",
"YE", "YE",
"YT", "YT",
"YU", "CS", // YU has been removed from ISO 3166 "YU", "CS", // YU has been removed from ISO 3166
"ZA", "ZA",
"ZM", "ZM",
"ZW", "ZW",
"", "",
}; };

View File

@ -33,6 +33,7 @@
#include <netdb.h> #include <netdb.h>
#include <stdlib.h> #include <stdlib.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <values.h>
#ifdef __solaris__ #ifdef __solaris__
#include <sys/sockio.h> #include <sys/sockio.h>
@ -75,17 +76,17 @@ getnameinfo_f getnameinfo_ptr = NULL;
#endif #endif
#ifdef __solaris__ #ifdef __solaris__
static int init_max_buf; static int init_tcp_max_buf, init_udp_max_buf;
static int tcp_max_buf; static int tcp_max_buf;
static int udp_max_buf; static int udp_max_buf;
/* /*
* Get the specified parameter from the specified driver. The value * Get the specified parameter from the specified driver. The value
* of the parameter is assumed to be an 'int'. If the parameter * of the parameter is assumed to be an 'int'. If the parameter
* cannot be obtained return the specified default value. * cannot be obtained return -1
*/ */
static int static int
getParam(char *driver, char *param, int dflt) getParam(char *driver, char *param)
{ {
struct strioctl stri; struct strioctl stri;
char buf [64]; char buf [64];
@ -94,7 +95,7 @@ getParam(char *driver, char *param, int dflt)
s = open (driver, O_RDWR); s = open (driver, O_RDWR);
if (s < 0) { if (s < 0) {
return dflt; return -1;
} }
strncpy (buf, param, sizeof(buf)); strncpy (buf, param, sizeof(buf));
stri.ic_cmd = ND_GET; stri.ic_cmd = ND_GET;
@ -102,13 +103,64 @@ getParam(char *driver, char *param, int dflt)
stri.ic_dp = buf; stri.ic_dp = buf;
stri.ic_len = sizeof(buf); stri.ic_len = sizeof(buf);
if (ioctl (s, I_STR, &stri) < 0) { if (ioctl (s, I_STR, &stri) < 0) {
value = dflt; value = -1;
} else { } else {
value = atoi(buf); value = atoi(buf);
} }
close (s); close (s);
return value; return value;
} }
/*
* Iterative way to find the max value that SO_SNDBUF or SO_RCVBUF
* for Solaris versions that do not support the ioctl() in getParam().
* Ugly, but only called once (for each sotype).
*
* As an optimisation, we make a guess using the default values for Solaris
* assuming they haven't been modified with ndd.
*/
#define MAX_TCP_GUESS 1024 * 1024
#define MAX_UDP_GUESS 2 * 1024 * 1024
#define FAIL_IF_NOT_ENOBUFS if (errno != ENOBUFS) return -1
static int findMaxBuf(int fd, int opt, int sotype) {
int a = 0;
int b = MAXINT;
int initial_guess;
int limit = -1;
if (sotype == SOCK_DGRAM) {
initial_guess = MAX_UDP_GUESS;
} else {
initial_guess = MAX_TCP_GUESS;
}
if (setsockopt(fd, SOL_SOCKET, opt, &initial_guess, sizeof(int)) == 0) {
initial_guess++;
if (setsockopt(fd, SOL_SOCKET, opt, &initial_guess,sizeof(int)) < 0) {
FAIL_IF_NOT_ENOBUFS;
return initial_guess - 1;
}
a = initial_guess;
} else {
FAIL_IF_NOT_ENOBUFS;
b = initial_guess - 1;
}
do {
int mid = a + (b-a)/2;
if (setsockopt(fd, SOL_SOCKET, opt, &mid, sizeof(int)) == 0) {
limit = mid;
a = mid + 1;
} else {
FAIL_IF_NOT_ENOBUFS;
b = mid - 1;
}
} while (b >= a);
return limit;
}
#endif #endif
#ifdef __linux__ #ifdef __linux__
@ -1148,7 +1200,6 @@ NET_GetSockOpt(int fd, int level, int opt, void *result,
return rv; return rv;
} }
/* /*
* Wrapper for setsockopt system routine - performs any * Wrapper for setsockopt system routine - performs any
* necessary pre/post processing to deal with OS specific * necessary pre/post processing to deal with OS specific
@ -1212,7 +1263,7 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
#ifdef __solaris__ #ifdef __solaris__
if (level == SOL_SOCKET) { if (level == SOL_SOCKET) {
if (opt == SO_SNDBUF || opt == SO_RCVBUF) { if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
int sotype, arglen; int sotype=0, arglen;
int *bufsize, maxbuf; int *bufsize, maxbuf;
int ret; int ret;
@ -1223,18 +1274,37 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
/* Exceeded system limit so clamp and retry */ /* Exceeded system limit so clamp and retry */
if (!init_max_buf) {
tcp_max_buf = getParam("/dev/tcp", "tcp_max_buf", 1024*1024);
udp_max_buf = getParam("/dev/udp", "udp_max_buf", 2048*1024);
init_max_buf = 1;
}
arglen = sizeof(sotype); arglen = sizeof(sotype);
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype, if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype,
&arglen) < 0) { &arglen) < 0) {
return -1; return -1;
} }
/*
* We try to get tcp_maxbuf (and udp_max_buf) using
* an ioctl() that isn't available on all versions of Solaris.
* If that fails, we use the search algorithm in findMaxBuf()
*/
if (!init_tcp_max_buf && sotype == SOCK_STREAM) {
tcp_max_buf = getParam("/dev/tcp", "tcp_max_buf");
if (tcp_max_buf == -1) {
tcp_max_buf = findMaxBuf(fd, opt, SOCK_STREAM);
if (tcp_max_buf == -1) {
return -1;
}
}
init_tcp_max_buf = 1;
} else if (!init_udp_max_buf && sotype == SOCK_DGRAM) {
udp_max_buf = getParam("/dev/udp", "udp_max_buf");
if (udp_max_buf == -1) {
udp_max_buf = findMaxBuf(fd, opt, SOCK_DGRAM);
if (udp_max_buf == -1) {
return -1;
}
}
init_udp_max_buf = 1;
}
maxbuf = (sotype == SOCK_STREAM) ? tcp_max_buf : udp_max_buf; maxbuf = (sotype == SOCK_STREAM) ? tcp_max_buf : udp_max_buf;
bufsize = (int *)arg; bufsize = (int *)arg;
if (*bufsize > maxbuf) { if (*bufsize > maxbuf) {

View File

@ -607,6 +607,7 @@ gboolean gtk2_load()
fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new"); fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new");
fp_gtk_viewport_new = dl_symbol("gtk_viewport_new"); fp_gtk_viewport_new = dl_symbol("gtk_viewport_new");
fp_gtk_window_new = dl_symbol("gtk_window_new"); fp_gtk_window_new = dl_symbol("gtk_window_new");
fp_gtk_window_present = dl_symbol("gtk_window_present");
fp_gtk_dialog_new = dl_symbol("gtk_dialog_new"); fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
fp_gtk_frame_new = dl_symbol("gtk_frame_new"); fp_gtk_frame_new = dl_symbol("gtk_frame_new");

View File

@ -749,6 +749,7 @@ int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf); int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error); GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
void (*fp_gtk_widget_destroy)(GtkWidget *widget); void (*fp_gtk_widget_destroy)(GtkWidget *widget);
void (*fp_gtk_window_present)(GtkWindow *window);
/** /**

View File

@ -80,6 +80,28 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
quit(env, jpeer, FALSE); quit(env, jpeer, FALSE);
} }
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: toFront
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
(JNIEnv * env, jobject jpeer)
{
GtkWidget * dialog;
fp_gdk_threads_enter();
dialog = (GtkWidget*)jlong_to_ptr(
(*env)->GetLongField(env, jpeer, widgetFieldID));
if (dialog != NULL) {
fp_gtk_window_present((GtkWindow*)dialog);
}
fp_gdk_threads_leave();
}
/** /**
* Convert a GSList to an array of filenames (without the parent folder) * Convert a GSList to an array of filenames (without the parent folder)
*/ */

View File

@ -33,6 +33,14 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
(JNIEnv *, jobject); (JNIEnv *, jobject);
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: toFront
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
(JNIEnv *, jobject);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

Some files were not shown because too many files have changed in this diff Show More