Merge
This commit is contained in:
commit
6cbba57d31
@ -94,3 +94,4 @@ e8ebdf41b9c01a26642848f4134f5504e8fb3233 jdk7-b115
|
||||
7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
|
||||
a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
||||
661360bef6ccad6c119f067f5829b207de80c936 jdk7-b119
|
||||
366ff0b6d2151595629806b033e2e1497e3a55d4 jdk7-b120
|
||||
|
@ -93,3 +93,5 @@ da7561d479e0ddaa4650d8023ac0fc7294e014e3 jdk7-b115
|
||||
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
|
||||
fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
|
||||
42e77836fded7c2a3080d27316b96634ea9e33c6 jdk7-b118
|
||||
39829414ae31a0080578a49b751899edd518cd7d jdk7-b119
|
||||
cff5a173ec1e89013359e804a3e31736ef6fb462 jdk7-b120
|
||||
|
@ -131,3 +131,5 @@ bdbc48857210a509b3c50a3291ecb9dd6a72e016 jdk7-b115
|
||||
806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
|
||||
698b7b727e12de44139d8cca6ab9a494ead13253 jdk7-b118
|
||||
3ef7426b4deac5dcfd4afb35cabe9ab3d666df91 hs20-b02
|
||||
5484e7c53fa7da5e869902437ee08a9ae10c1c69 jdk7-b119
|
||||
f5603a6e50422046ebc0d2f1671d55cb8f1bf1e9 jdk7-b120
|
||||
|
@ -93,3 +93,5 @@ e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
|
||||
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
|
||||
3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
|
||||
b357910aa04aead2a16b6d6ff395a8df4b51d1dd jdk7-b118
|
||||
ecab7eefb8f2326fd90fb632f47f1b6f81e928f8 jdk7-b119
|
||||
37d74e29687cf07c2bf9411af58c7e42440855c3 jdk7-b120
|
||||
|
@ -83,14 +83,19 @@ ifndef CLOSED_SRC
|
||||
CLOSED_SRC = $(BUILDDIR)/../src/closed
|
||||
endif
|
||||
|
||||
# If we have no closed directory, force it to an openjdk build
|
||||
CLOSED_SRC_DIR_EXISTS := $(shell \
|
||||
if [ -d $(CLOSED_SRC) ] ; then \
|
||||
echo true; \
|
||||
else \
|
||||
echo false; \
|
||||
fi)
|
||||
ifeq ($(CLOSED_SRC_DIR_EXISTS), false)
|
||||
# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any
|
||||
# closed directory.
|
||||
ifneq ($(CLOSED_SRC_INCLUDED), true)
|
||||
CLOSED_SRC_INCLUDED := $(shell \
|
||||
if [ -d $(CLOSED_SRC) ] ; then \
|
||||
echo true; \
|
||||
else \
|
||||
echo false; \
|
||||
fi)
|
||||
endif
|
||||
|
||||
# Set OPENJDK based on CLOSED_SRC_INCLUDED
|
||||
ifeq ($(CLOSED_SRC_INCLUDED), false)
|
||||
OPENJDK = true
|
||||
endif
|
||||
|
||||
|
@ -85,6 +85,7 @@ FILES_src = \
|
||||
sun/io/ByteToCharCp500.java \
|
||||
sun/io/ByteToCharCp737.java \
|
||||
sun/io/ByteToCharCp775.java \
|
||||
sun/io/ByteToCharCp833.java \
|
||||
sun/io/ByteToCharCp834.java \
|
||||
sun/io/ByteToCharCp838.java \
|
||||
sun/io/ByteToCharCp850.java \
|
||||
@ -214,6 +215,7 @@ FILES_src = \
|
||||
sun/io/CharToByteCp500.java \
|
||||
sun/io/CharToByteCp737.java \
|
||||
sun/io/CharToByteCp775.java \
|
||||
sun/io/CharToByteCp833.java \
|
||||
sun/io/CharToByteCp834.java \
|
||||
sun/io/CharToByteCp838.java \
|
||||
sun/io/CharToByteCp850.java \
|
||||
@ -331,6 +333,7 @@ FILES_gen_extcs = \
|
||||
sun/nio/cs/ext/IBM420.java \
|
||||
sun/nio/cs/ext/IBM424.java \
|
||||
sun/nio/cs/ext/IBM500.java \
|
||||
sun/nio/cs/ext/IBM833.java \
|
||||
sun/nio/cs/ext/IBM838.java \
|
||||
sun/nio/cs/ext/IBM856.java \
|
||||
sun/nio/cs/ext/IBM860.java \
|
||||
|
@ -432,6 +432,7 @@ SUNWprivate_1.1 {
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_initIDs;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_run;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_quit;
|
||||
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
|
||||
|
||||
Java_sun_print_CUPSPrinter_initIDs;
|
||||
Java_sun_print_CUPSPrinter_getCupsServer;
|
||||
|
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal file
94
jdk/make/tools/CharsetMapping/IBM833.c2b
Normal 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
|
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal file
217
jdk/make/tools/CharsetMapping/IBM833.map
Normal 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
|
@ -32,6 +32,7 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext
|
||||
IBM420 IBM420 Cp420 false sun.nio.cs.ext
|
||||
IBM424 IBM424 Cp424 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
|
||||
IBM856 x-IBM856 Cp856 false sun.nio.cs.ext
|
||||
IBM860 IBM860 Cp860 false sun.nio.cs.ext
|
||||
|
@ -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.
|
||||
*
|
||||
* 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) {
|
||||
switch(ch) {
|
||||
// map the offset overflow chars
|
||||
case 0x0130 : mapChar = 0x0069; break;
|
||||
case 0x0130 : mapChar = 0x0069; break;
|
||||
case 0x2126 : mapChar = 0x03C9; break;
|
||||
case 0x212A : mapChar = 0x006B; break;
|
||||
case 0x212B : mapChar = 0x00E5; break;
|
||||
@ -192,7 +192,11 @@ class CharacterData00 extends CharacterData {
|
||||
case 0x2C6D : mapChar = 0x0251; break;
|
||||
case 0x2C6E : mapChar = 0x0271; 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 0xA78D : mapChar = 0x0265; break;
|
||||
// default mapChar is already set, so no
|
||||
// need to redo it here.
|
||||
// default : mapChar = ch;
|
||||
@ -246,8 +250,12 @@ class CharacterData00 extends CharacterData {
|
||||
case 0x1FC3 : mapChar = 0x1FCC; break;
|
||||
case 0x1FF3 : mapChar = 0x1FFC; break;
|
||||
|
||||
case 0x023F : mapChar = 0x2C7E; break;
|
||||
case 0x0240 : mapChar = 0x2C7F; break;
|
||||
case 0x0250 : mapChar = 0x2C6F; break;
|
||||
case 0x0251 : mapChar = 0x2C6D; break;
|
||||
case 0x0252 : mapChar = 0x2C70; break;
|
||||
case 0x0265 : mapChar = 0xA78D; break;
|
||||
case 0x026B : mapChar = 0x2C62; break;
|
||||
case 0x0271 : mapChar = 0x2C6E; break;
|
||||
case 0x027D : mapChar = 0x2C64; break;
|
||||
@ -487,8 +495,12 @@ class CharacterData00 extends CharacterData {
|
||||
case 0x017F : mapChar = 0x0053; break;
|
||||
case 0x1FBE : mapChar = 0x0399; break;
|
||||
|
||||
case 0x023F : mapChar = 0x2C7E; break;
|
||||
case 0x0240 : mapChar = 0x2C7F; break;
|
||||
case 0x0250 : mapChar = 0x2C6F; break;
|
||||
case 0x0251 : mapChar = 0x2C6D; break;
|
||||
case 0x0252 : mapChar = 0x2C70; break;
|
||||
case 0x0265 : mapChar = 0xA78D; break;
|
||||
case 0x026B : mapChar = 0x2C62; break;
|
||||
case 0x0271 : mapChar = 0x2C6E; break;
|
||||
case 0x027D : mapChar = 0x2C64; break;
|
||||
|
@ -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.
|
||||
*
|
||||
* 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 0x01034A: retval = 900; break; // GOTHIC LETTER NINE 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 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
|
||||
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 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
|
||||
case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Scripts-5.2.0.txt
|
||||
# Date: 2009-08-22, 04:58:43 GMT [MD]
|
||||
# Scripts-6.0.0.txt
|
||||
# Date: 2010-08-19, 00:48:47 GMT [MD]
|
||||
#
|
||||
# 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 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
|
||||
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
|
||||
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
|
||||
02ED ; Common # Sk MODIFIER LETTER UNASPIRATED
|
||||
02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
|
||||
@ -83,7 +83,6 @@
|
||||
0385 ; Common # Sk GREEK DIALYTIKA TONOS
|
||||
0387 ; Common # Po GREEK ANO TELEIA
|
||||
0589 ; Common # Po ARMENIAN FULL STOP
|
||||
0600..0603 ; Common # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
|
||||
060C ; Common # Po ARABIC COMMA
|
||||
061B ; Common # Po ARABIC SEMICOLON
|
||||
061F ; Common # Po ARABIC QUESTION MARK
|
||||
@ -92,7 +91,6 @@
|
||||
06DD ; Common # Cf ARABIC END OF AYAH
|
||||
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
|
||||
0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
|
||||
0CF1..0CF2 ; Common # So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
|
||||
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
|
||||
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
|
||||
10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
|
||||
@ -148,7 +146,7 @@
|
||||
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
|
||||
208D ; Common # Ps SUBSCRIPT LEFT 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
|
||||
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
|
||||
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
|
||||
@ -157,7 +155,8 @@
|
||||
210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
|
||||
2114 ; Common # So L B BAR SYMBOL
|
||||
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
|
||||
211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
|
||||
2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
|
||||
@ -213,7 +212,7 @@
|
||||
239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
|
||||
23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
|
||||
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
|
||||
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
|
||||
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
|
||||
2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
|
||||
266F ; Common # Sm MUSIC SHARP SIGN
|
||||
2670..26CD ; Common # So [94] WEST SYRIAC CROSS..DISABLED CAR
|
||||
26CF..26E1 ; Common # So [19] PICK..RESTRICTED LEFT ENTRY-2
|
||||
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
|
||||
2670..26FF ; Common # So [144] WEST SYRIAC CROSS..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
|
||||
2701..2767 ; Common # So [103] UPPER BLADE SCISSORS..ROTATED FLORAL HEART BULLET
|
||||
2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
|
||||
2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
|
||||
276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
|
||||
@ -254,15 +243,13 @@
|
||||
2774 ; Common # Ps MEDIUM LEFT 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
|
||||
2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
|
||||
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
|
||||
2794..27BF ; Common # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
|
||||
27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
|
||||
27C5 ; Common # Ps LEFT 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
|
||||
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
|
||||
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE 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
|
||||
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
|
||||
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
|
||||
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
|
||||
1F131 ; Common # So SQUARED LATIN CAPITAL LETTER B
|
||||
1F13D ; Common # So SQUARED LATIN CAPITAL LETTER N
|
||||
1F13F ; Common # So SQUARED LATIN CAPITAL LETTER P
|
||||
1F142 ; Common # So SQUARED LATIN CAPITAL LETTER S
|
||||
1F146 ; Common # So SQUARED LATIN CAPITAL LETTER W
|
||||
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
|
||||
1F130..1F169 ; Common # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
|
||||
1F170..1F19A ; Common # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
|
||||
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
|
||||
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
|
||||
1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
|
||||
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
|
||||
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
|
||||
2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I
|
||||
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
|
||||
2132 ; Latin # L& TURNED CAPITAL 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
|
||||
A770 ; Latin # Lm MODIFIER LETTER US
|
||||
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
|
||||
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
|
||||
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
|
||||
0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
|
||||
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
|
||||
1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
|
||||
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
|
||||
A662..A66D ; Cyrillic # L& [12] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
|
||||
A640..A66D ; Cyrillic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
|
||||
A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
|
||||
A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
|
||||
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
|
||||
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
|
||||
0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND 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
|
||||
0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
|
||||
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
|
||||
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
|
||||
@ -760,7 +774,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
|
||||
06D4 ; Arabic # Po ARABIC FULL STOP
|
||||
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
|
||||
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
|
||||
06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -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
|
||||
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
|
||||
0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
|
||||
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
|
||||
093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
|
||||
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
|
||||
0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
|
||||
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
|
||||
0B70 ; Oriya # So ORIYA ISSHAR
|
||||
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
|
||||
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
|
||||
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
|
||||
0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
|
||||
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
|
||||
0D12..0D28 ; Malayalam # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
|
||||
0D2A..0D39 ; Malayalam # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
|
||||
0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
|
||||
0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
|
||||
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
|
||||
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
|
||||
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
|
||||
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
|
||||
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
|
||||
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
|
||||
@ -1042,7 +1061,7 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
|
||||
0D79 ; Malayalam # So MALAYALAM DATE MARK
|
||||
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
|
||||
0F85 ; Tibetan # Po TIBETAN MARK PALUTA
|
||||
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
|
||||
0F90..0F97 ; Tibetan # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
|
||||
0F88..0F8C ; Tibetan # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
|
||||
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
|
||||
0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
|
||||
0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -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
|
||||
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
|
||||
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
|
||||
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
|
||||
1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
|
||||
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
|
||||
2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
|
||||
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
|
||||
309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
|
||||
309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
|
||||
1B001 ; Hiragana # Lo HIRAGANA LETTER ARCHAIC YE
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
# 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
|
||||
0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA
|
||||
064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
|
||||
065F ; Inherited # Mn ARABIC WAVY HAMZA BELOW
|
||||
0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
|
||||
0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
|
||||
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
|
||||
1CED ; Inherited # Mn VEDIC SIGN TIRYAK
|
||||
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
|
||||
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
|
||||
20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
|
||||
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
|
||||
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
|
||||
FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
|
||||
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
|
||||
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
|
||||
19D0..19DA ; New_Tai_Lue # Nd [11] NEW TAI LUE DIGIT ZERO..NEW TAI LUE THAM DIGIT ONE
|
||||
19DE..19DF ; New_Tai_Lue # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
|
||||
19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
|
||||
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
|
||||
|
||||
@ -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
|
||||
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
|
||||
A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
|
||||
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
|
||||
|
||||
# ================================================
|
||||
|
||||
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
|
||||
|
@ -1,10 +1,10 @@
|
||||
# SpecialCasing-5.1.0.txt
|
||||
# Date: 2008-03-03, 21:58:10 GMT [MD]
|
||||
# SpecialCasing-6.0.0.txt
|
||||
# Date: 2010-05-18, 00:49:39 GMT [MD]
|
||||
#
|
||||
# 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 documentation, see UCD.html
|
||||
# For documentation, see http://www.unicode.org/reports/tr44/
|
||||
#
|
||||
# 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
|
||||
1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
|
||||
|
||||
# IMPORTANT-when capitalizing iota-subscript (0345)
|
||||
# It MUST be in normalized form--moved to the end of any sequence of combining marks.
|
||||
# This is because logically it represents a following base character!
|
||||
# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
|
||||
# It should never be the first character in a word, so in titlecasing it can be left as is.
|
||||
# IMPORTANT-when iota-subscript (0345) is uppercased or titlecased,
|
||||
# the result will be incorrect unless the iota-subscript is moved to the end
|
||||
# of any sequence of combining marks. Otherwise, the accents will go on the capital iota.
|
||||
# This process can be achieved by first transforming the text to NFC before casing.
|
||||
# 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.
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
5.1.0
|
||||
6.0.0
|
||||
|
@ -65,6 +65,7 @@ static jboolean printVersion = JNI_FALSE; /* print and exit */
|
||||
static jboolean showVersion = JNI_FALSE; /* print but continue */
|
||||
static jboolean printUsage = 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 *_launcher_name;
|
||||
@ -109,6 +110,7 @@ static void SetApplicationClassPath(const char**);
|
||||
|
||||
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
|
||||
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
|
||||
static void ShowSettings(JNIEnv* env, char *optString);
|
||||
|
||||
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.
|
||||
*/
|
||||
static jlong threadStackSize = 0; /* stack size of the new thread */
|
||||
static jlong heapSize = 0; /* heap size */
|
||||
|
||||
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 (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
|
||||
PrintUsage(env, printXUsage);
|
||||
@ -611,7 +618,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
|
||||
|
||||
/* copied from HotSpot function "atomll()" */
|
||||
static int
|
||||
parse_stack_size(const char *s, jlong *result) {
|
||||
parse_size(const char *s, jlong *result) {
|
||||
jlong n = 0;
|
||||
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
||||
if (args_read != 1) {
|
||||
@ -673,10 +680,17 @@ AddOption(char *str, void *info)
|
||||
options[numOptions++].extraInfo = info;
|
||||
|
||||
if (JLI_StrCCmp(str, "-Xss") == 0) {
|
||||
jlong tmp;
|
||||
if (parse_stack_size(str + 4, &tmp)) {
|
||||
threadStackSize = tmp;
|
||||
}
|
||||
jlong tmp;
|
||||
if (parse_size(str + 4, &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) {
|
||||
printXUsage = 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
|
||||
* command line options.
|
||||
@ -1474,6 +1495,27 @@ PrintJavaVersion(JNIEnv *env, jboolean extraLF)
|
||||
(*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
|
||||
*/
|
||||
|
@ -91,6 +91,7 @@ public class HttpsConfigurator {
|
||||
return context;
|
||||
}
|
||||
|
||||
//BEGIN_TIGER_EXCLUDE
|
||||
/**
|
||||
* Called by the HttpsServer to configure the parameters
|
||||
* for a https connection currently being established.
|
||||
@ -111,4 +112,5 @@ public class HttpsConfigurator {
|
||||
public void configure (HttpsParameters params) {
|
||||
params.setSSLParameters (getSSLContext().getDefaultSSLParameters());
|
||||
}
|
||||
//END_TIGER_EXCLUDE
|
||||
}
|
||||
|
@ -25,7 +25,9 @@
|
||||
|
||||
package com.sun.net.httpserver;
|
||||
import java.net.InetSocketAddress;
|
||||
//BEGIN_TIGER_EXCLUDE
|
||||
import javax.net.ssl.SSLParameters;
|
||||
//END_TIGER_EXCLUDE
|
||||
|
||||
/**
|
||||
* Represents the set of parameters for each https
|
||||
@ -67,6 +69,7 @@ public abstract class HttpsParameters {
|
||||
*/
|
||||
public abstract InetSocketAddress getClientAddress();
|
||||
|
||||
//BEGIN_TIGER_EXCLUDE
|
||||
/**
|
||||
* Sets the SSLParameters to use for this HttpsParameters.
|
||||
* The parameters must be supported by the SSLContext contained
|
||||
@ -79,6 +82,7 @@ public abstract class HttpsParameters {
|
||||
* invalid or unsupported.
|
||||
*/
|
||||
public abstract void setSSLParameters (SSLParameters params);
|
||||
//END_TIGER_EXCLUDE
|
||||
|
||||
/**
|
||||
* Returns a copy of the array of ciphersuites or null if none
|
||||
|
@ -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.
|
||||
#
|
||||
# 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
|
||||
wrsxmlreader.invalidcp = End of RowSet reached. Invalid cursor position
|
||||
wrsxmlreader.readxml = readXML : {0}
|
||||
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {0} , uri : {0}
|
||||
wrsxmlreader.parseerr = ** Parsing Error : {0} , line : {1} , uri : {2}
|
||||
|
||||
#WebRowSetXmlWriter exceptions
|
||||
wrsxmlwriter.ioex = IOException : {0}
|
||||
@ -151,7 +151,7 @@ wsrxmlwriter.notproper = Not a proper type
|
||||
#XmlReaderContentHandler exceptions
|
||||
xmlrch.errmap = Error setting Map : {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.errdel = Error deleting row : {0}
|
||||
xmlrch.errinsert = Error constructing insert row : {0}
|
||||
@ -161,7 +161,7 @@ xmlrch.errupdrow = Error updating row : {0}
|
||||
xmlrch.chars = characters :
|
||||
xmlrch.badvalue = Bad value ; non-nullable property
|
||||
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
|
||||
riop.locking = Locking classification is not supported
|
||||
|
@ -738,7 +738,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
|
||||
// columnValue now need to be reset to the empty string
|
||||
columnValue = "";
|
||||
} 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;
|
||||
case RowTag:
|
||||
|
@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
|
||||
* <p>
|
||||
* This method applies an arbitrary scale factor to each of the three RGB
|
||||
* 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
|
||||
* series of invocations of these two methods might be inconsistent
|
||||
* because of rounding errors.
|
||||
* @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
|
||||
* @since JDK1.0
|
||||
*/
|
||||
@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
|
||||
int r = getRed();
|
||||
int g = getGreen();
|
||||
int b = getBlue();
|
||||
int alpha = getAlpha();
|
||||
|
||||
/* From 2D group:
|
||||
* 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));
|
||||
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 ( 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),
|
||||
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>
|
||||
* 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
|
||||
* 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
|
||||
* of invocations of these two methods might be inconsistent because
|
||||
* of rounding errors.
|
||||
* @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
|
||||
* @since JDK1.0
|
||||
*/
|
||||
public Color darker() {
|
||||
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
||||
Math.max((int)(getGreen()*FACTOR), 0),
|
||||
Math.max((int)(getBlue() *FACTOR), 0));
|
||||
Math.max((int)(getBlue() *FACTOR), 0),
|
||||
getAlpha());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -51,6 +51,7 @@ import javax.accessibility.*;
|
||||
import sun.util.logging.PlatformLogger;
|
||||
|
||||
import sun.awt.AppContext;
|
||||
import sun.awt.AWTAccessor;
|
||||
import sun.awt.CausedFocusEvent;
|
||||
import sun.awt.PeerEvent;
|
||||
import sun.awt.SunToolkit;
|
||||
@ -247,6 +248,13 @@ public class Container extends Component {
|
||||
if (!GraphicsEnvironment.isHeadless()) {
|
||||
initIDs();
|
||||
}
|
||||
|
||||
AWTAccessor.setContainerAccessor(new AWTAccessor.ContainerAccessor() {
|
||||
@Override
|
||||
public void validateUnconditionally(Container cont) {
|
||||
cont.validateUnconditionally();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1248,14 +1248,31 @@ public class Dialog extends Window {
|
||||
|
||||
/**
|
||||
* Disables or enables decorations for this dialog.
|
||||
* This method can only be called while the dialog is not displayable.
|
||||
* @param undecorated <code>true</code> if no dialog decorations are
|
||||
* to be enabled;
|
||||
* <code>false</code> if dialog decorations are to be enabled.
|
||||
* @throws <code>IllegalComponentStateException</code> if the dialog
|
||||
* is displayable.
|
||||
* <p>
|
||||
* This method can only be called while the dialog is not displayable. To
|
||||
* make this dialog decorated, it must be opaque and have the default shape,
|
||||
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||
* 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 Component#isDisplayable
|
||||
* @see Window#getShape
|
||||
* @see Window#getOpacity
|
||||
* @see Window#getBackground
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public void setUndecorated(boolean undecorated) {
|
||||
@ -1264,6 +1281,18 @@ public class Dialog extends Window {
|
||||
if (isDisplayable()) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -1280,6 +1309,45 @@ public class Dialog extends Window {
|
||||
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
|
||||
* method is intended to be used only for debugging purposes, and the
|
||||
|
@ -99,7 +99,7 @@ public class FileDialog extends Dialog {
|
||||
* Contains the File instances for all the files that the user selects.
|
||||
*
|
||||
* @serial
|
||||
* @see getFiles
|
||||
* @see #getFiles
|
||||
* @since 1.7
|
||||
*/
|
||||
private File[] files;
|
||||
|
@ -828,6 +828,11 @@ public class Frame extends Window implements MenuContainer {
|
||||
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()
|
||||
* @since 1.4
|
||||
*/
|
||||
public synchronized void setMaximizedBounds(Rectangle bounds) {
|
||||
this.maximizedBounds = bounds;
|
||||
public void setMaximizedBounds(Rectangle bounds) {
|
||||
synchronized(getObjectLock()) {
|
||||
this.maximizedBounds = bounds;
|
||||
}
|
||||
FramePeer peer = (FramePeer)this.peer;
|
||||
if (peer != null) {
|
||||
peer.setMaximizedBounds(bounds);
|
||||
@ -873,21 +880,40 @@ public class Frame extends Window implements MenuContainer {
|
||||
* @since 1.4
|
||||
*/
|
||||
public Rectangle getMaximizedBounds() {
|
||||
return maximizedBounds;
|
||||
synchronized(getObjectLock()) {
|
||||
return maximizedBounds;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Disables or enables decorations for this frame.
|
||||
* This method can only be called while the frame is not displayable.
|
||||
* @param undecorated <code>true</code> if no frame decorations are
|
||||
* to be enabled;
|
||||
* <code>false</code> if frame decorations are to be enabled.
|
||||
* @throws <code>IllegalComponentStateException</code> if the frame
|
||||
* is displayable.
|
||||
* <p>
|
||||
* This method can only be called while the frame is not displayable. To
|
||||
* make this frame decorated, it must be opaque and have the default shape,
|
||||
* otherwise the {@code IllegalComponentStateException} will be thrown.
|
||||
* Refer to {@link Window#setShape}, {@link Window#setOpacity} and {@link
|
||||
* 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 Component#isDisplayable
|
||||
* @see Window#getShape
|
||||
* @see Window#getOpacity
|
||||
* @see Window#getBackground
|
||||
* @see javax.swing.JFrame#setDefaultLookAndFeelDecorated(boolean)
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public void setUndecorated(boolean undecorated) {
|
||||
@ -896,6 +922,18 @@ public class Frame extends Window implements MenuContainer {
|
||||
if (isDisplayable()) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -912,6 +950,45 @@ public class Frame extends Window implements MenuContainer {
|
||||
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.
|
||||
* @param m the menu component to remove.
|
||||
|
@ -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
|
||||
* window. This is a platform-dependent behavior.
|
||||
* <p>
|
||||
* In order for this method to enable the translucency effect, the {@link
|
||||
* GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)} method must indicate that
|
||||
* the {@link GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT}
|
||||
* translucency is supported.
|
||||
* The following conditions must be met in order to set the opacity value
|
||||
* less than {@code 1.0f}:
|
||||
* <ul>
|
||||
* <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>
|
||||
* Also note that the window must not be in the full-screen mode when
|
||||
* setting the opacity value < 1.0f. Otherwise the {@code
|
||||
* IllegalComponentStateException} is thrown.
|
||||
* If the requested opacity value is less than {@code 1.0f}, and any of the
|
||||
* above conditions are not met, the window opacity will not change,
|
||||
* and the {@code IllegalComponentStateException} will be thrown.
|
||||
* <p>
|
||||
* The translucency levels of individual pixels may also be effected by 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
|
||||
* [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
|
||||
* mode, and the opacity is less than 1.0f
|
||||
* mode, and the opacity is less than {@code 1.0f}
|
||||
* @throws UnsupportedOperationException if the {@code
|
||||
* 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#setBackground(Color)
|
||||
* @see Window#setShape(Shape)
|
||||
* @see Frame#isUndecorated
|
||||
* @see Dialog#isUndecorated
|
||||
* @see GraphicsDevice.WindowTranslucency
|
||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||
*
|
||||
@ -3557,24 +3568,26 @@ public class Window extends Container implements Accessible {
|
||||
/**
|
||||
* Sets the shape of the window.
|
||||
* <p>
|
||||
* Setting a shape enables cutting off some parts of the window, leaving
|
||||
* visible and clickable only those parts belonging to the given shape
|
||||
* (see {@link Shape}). If the shape argument is null, this methods
|
||||
* restores the default shape (making the window rectangular on most
|
||||
* platforms.)
|
||||
* Setting a shape cuts off some parts of the window. Only the parts that
|
||||
* belong to the given {@link Shape} remain visible and clickable. If
|
||||
* the shape argument is {@code null}, this method restores the default
|
||||
* shape, making the window rectangular on most platforms.
|
||||
* <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>
|
||||
* <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
|
||||
* <i>and</i>
|
||||
* <li>The window must not be in the full-screen mode (see
|
||||
* {@link GraphicsDevice#setFullScreenWindow(Window)})
|
||||
* <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>
|
||||
* If a certain condition is not met, either the {@code
|
||||
* UnsupportedOperationException} or {@code IllegalComponentStateException}
|
||||
* is thrown.
|
||||
* <p>
|
||||
* If the requested shape is not {@code null}, and any of the above
|
||||
* conditions are not met, the shape of this window will not change,
|
||||
* and either the {@code UnsupportedOperationException} or {@code
|
||||
* IllegalComponentStateException} will be thrown.
|
||||
* <p>
|
||||
* The tranlucency levels of individual pixels may also be effected by 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
|
||||
*
|
||||
* @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
|
||||
* @throws UnsupportedOperationException if the shape is not {@code
|
||||
* null} and {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSPARENT
|
||||
@ -3592,6 +3607,8 @@ public class Window extends Container implements Accessible {
|
||||
* @see Window#getShape()
|
||||
* @see Window#setBackground(Color)
|
||||
* @see Window#setOpacity(float)
|
||||
* @see Frame#isUndecorated
|
||||
* @see Dialog#isUndecorated
|
||||
* @see GraphicsDevice.WindowTranslucency
|
||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||
*
|
||||
@ -3645,37 +3662,46 @@ public class Window extends Container implements Accessible {
|
||||
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}
|
||||
* tranclucency, the alpha component of the given background color
|
||||
* may effect the mode of operation for this window: it indicates whether
|
||||
* this window must be opaque (alpha == 1.0f) or per-pixel translucent
|
||||
* (alpha < 1.0f). All the following conditions must be met in order
|
||||
* to be able to enable the per-pixel transparency mode for this window:
|
||||
* this window must be opaque (alpha equals {@code 1.0f}) or per-pixel translucent
|
||||
* (alpha is less than {@code 1.0f}). If the given background color is
|
||||
* {@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>
|
||||
* <li>The {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||
* PERPIXEL_TRANSLUCENT} translucency must be supported
|
||||
* by the graphics device where this window is located <i>and</i>
|
||||
* <li>The window must not be in the full-screen mode (see {@link
|
||||
* PERPIXEL_TRANSLUCENT} translucency must be supported by the graphics
|
||||
* device where this window is located
|
||||
* <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>
|
||||
* If a certain condition is not met at the time of calling this method,
|
||||
* the alpha component of the given background color will not effect the
|
||||
* mode of operation for this window.
|
||||
* <p>
|
||||
* If the alpha component of the requested background color is less than
|
||||
* {@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>
|
||||
* When the window is per-pixel translucent, the drawing sub-system
|
||||
* respects the alpha value of each individual pixel. If a pixel gets
|
||||
* 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
|
||||
* the pixel semi-transparent. In this mode the background of the window
|
||||
* gets painted with the alpha value of the given background color (meaning
|
||||
* that it is not painted at all if the alpha value of the argument of this
|
||||
* method is equal to zero.)
|
||||
* the pixel semi-transparent. In this mode, the background of the window
|
||||
* gets painted with the alpha value of the given background color. If the
|
||||
* alpha value of the argument of this method is equal to {@code 0}, the
|
||||
* background is not painted at all.
|
||||
* <p>
|
||||
* 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
|
||||
* this window (see {@link #setShape(Shape)}).
|
||||
* <p>
|
||||
* Note that painting a pixel with the alpha value of 0 may or may not
|
||||
* disable the mouse event handling on this pixel. This is a
|
||||
* platform-dependent behavior. To make sure the mouse clicks do not get
|
||||
* Note that painting a pixel with the alpha value of {@code 0} may or may
|
||||
* not disable the mouse event handling on this pixel. This is a
|
||||
* platform-dependent behavior. To make sure the mouse events do not get
|
||||
* dispatched to a particular pixel, the pixel must be excluded from the
|
||||
* shape of the window.
|
||||
* <p>
|
||||
@ -3685,17 +3711,21 @@ public class Window extends Container implements Accessible {
|
||||
* @param bgColor the color to become this window's background color.
|
||||
*
|
||||
* @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
|
||||
* @throws UnsupportedOperationException if the alpha value of the given
|
||||
* background color is less than 1.0f and
|
||||
* {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||
* background color is less than {@code 1.0f} and {@link
|
||||
* GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
|
||||
* PERPIXEL_TRANSLUCENT} translucency is not supported
|
||||
*
|
||||
* @see Window#getBackground
|
||||
* @see Window#isOpaque
|
||||
* @see Window#setOpacity(float)
|
||||
* @see Window#setShape(Shape)
|
||||
* @see Frame#isUndecorated
|
||||
* @see Dialog#isUndecorated
|
||||
* @see GraphicsDevice.WindowTranslucency
|
||||
* @see GraphicsDevice#isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency)
|
||||
* @see GraphicsConfiguration#isTranslucencyCapable()
|
||||
@ -3739,7 +3769,7 @@ public class Window extends Container implements Accessible {
|
||||
* <p>
|
||||
* 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
|
||||
* 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
|
||||
*
|
||||
|
@ -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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
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) {
|
||||
int index = script.ordinal();
|
||||
@ -592,10 +608,16 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x07a6, 0x07b1,
|
||||
0x07eb, 0x07f4,
|
||||
0x07f6, 0x07fa,
|
||||
0x0901, 0x0903,
|
||||
0x0816, 0x081a,
|
||||
0x081b, 0x0824,
|
||||
0x0825, 0x0828,
|
||||
0x0829, 0x0830,
|
||||
0x0859, 0x085e,
|
||||
0x0900, 0x0903,
|
||||
0x093a, 0x093b,
|
||||
0x093c, 0x093d,
|
||||
0x0941, 0x0949,
|
||||
0x094d, 0x0950,
|
||||
0x094d, 0x094e,
|
||||
0x0951, 0x0958,
|
||||
0x0962, 0x0964,
|
||||
0x0981, 0x0982,
|
||||
@ -604,7 +626,7 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x09cd, 0x09ce,
|
||||
0x09e2, 0x09e6,
|
||||
0x09f2, 0x09f4,
|
||||
0x0a01, 0x0a03,
|
||||
0x09fb, 0x0a03,
|
||||
0x0a3c, 0x0a3e,
|
||||
0x0a41, 0x0a59,
|
||||
0x0a70, 0x0a72,
|
||||
@ -630,9 +652,8 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x0cbc, 0x0cbd,
|
||||
0x0ccc, 0x0cd5,
|
||||
0x0ce2, 0x0ce6,
|
||||
0x0cf1, 0x0d02,
|
||||
0x0d41, 0x0d46,
|
||||
0x0d4d, 0x0d57,
|
||||
0x0d4d, 0x0d4e,
|
||||
0x0d62, 0x0d66,
|
||||
0x0dca, 0x0dcf,
|
||||
0x0dd2, 0x0dd8,
|
||||
@ -649,7 +670,7 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x0f71, 0x0f7f,
|
||||
0x0f80, 0x0f85,
|
||||
0x0f86, 0x0f88,
|
||||
0x0f90, 0x0fbe,
|
||||
0x0f8d, 0x0fbe,
|
||||
0x0fc6, 0x0fc7,
|
||||
0x102d, 0x1031,
|
||||
0x1032, 0x1038,
|
||||
@ -661,8 +682,10 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x1082, 0x1083,
|
||||
0x1085, 0x1087,
|
||||
0x108d, 0x108e,
|
||||
0x135f, 0x1360,
|
||||
0x109d, 0x109e,
|
||||
0x135d, 0x1360,
|
||||
0x1390, 0x13a0,
|
||||
0x1400, 0x1401,
|
||||
0x1680, 0x1681,
|
||||
0x169b, 0x16a0,
|
||||
0x1712, 0x1720,
|
||||
@ -682,6 +705,11 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x1939, 0x1946,
|
||||
0x19de, 0x1a00,
|
||||
0x1a17, 0x1a19,
|
||||
0x1a56, 0x1a57,
|
||||
0x1a58, 0x1a61,
|
||||
0x1a62, 0x1a63,
|
||||
0x1a65, 0x1a6d,
|
||||
0x1a73, 0x1a80,
|
||||
0x1b00, 0x1b04,
|
||||
0x1b34, 0x1b35,
|
||||
0x1b36, 0x1b3b,
|
||||
@ -691,8 +719,16 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x1b80, 0x1b82,
|
||||
0x1ba2, 0x1ba6,
|
||||
0x1ba8, 0x1baa,
|
||||
0x1be6, 0x1be7,
|
||||
0x1be8, 0x1bea,
|
||||
0x1bed, 0x1bee,
|
||||
0x1bef, 0x1bf2,
|
||||
0x1c2c, 0x1c34,
|
||||
0x1c36, 0x1c3b,
|
||||
0x1cd0, 0x1cd3,
|
||||
0x1cd4, 0x1ce1,
|
||||
0x1ce2, 0x1ce9,
|
||||
0x1ced, 0x1cee,
|
||||
0x1dc0, 0x1e00,
|
||||
0x1fbd, 0x1fbe,
|
||||
0x1fbf, 0x1fc2,
|
||||
@ -716,14 +752,16 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x213a, 0x213c,
|
||||
0x2140, 0x2145,
|
||||
0x214a, 0x214e,
|
||||
0x2153, 0x2160,
|
||||
0x2190, 0x2336,
|
||||
0x2150, 0x2160,
|
||||
0x2189, 0x2336,
|
||||
0x237b, 0x2395,
|
||||
0x2396, 0x249c,
|
||||
0x24ea, 0x26ac,
|
||||
0x26ad, 0x2800,
|
||||
0x2900, 0x2c00,
|
||||
0x2ce5, 0x2d00,
|
||||
0x2ce5, 0x2ceb,
|
||||
0x2cef, 0x2d00,
|
||||
0x2d7f, 0x2d80,
|
||||
0x2de0, 0x3005,
|
||||
0x3008, 0x3021,
|
||||
0x302a, 0x3031,
|
||||
@ -742,25 +780,40 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x33de, 0x33e0,
|
||||
0x33ff, 0x3400,
|
||||
0x4dc0, 0x4e00,
|
||||
0xa490, 0xa500,
|
||||
0xa490, 0xa4d0,
|
||||
0xa60d, 0xa610,
|
||||
0xa66f, 0xa680,
|
||||
0xa6f0, 0xa6f2,
|
||||
0xa700, 0xa722,
|
||||
0xa788, 0xa789,
|
||||
0xa802, 0xa803,
|
||||
0xa806, 0xa807,
|
||||
0xa80b, 0xa80c,
|
||||
0xa825, 0xa827,
|
||||
0xa828, 0xa840,
|
||||
0xa828, 0xa830,
|
||||
0xa838, 0xa840,
|
||||
0xa874, 0xa880,
|
||||
0xa8c4, 0xa8ce,
|
||||
0xa8e0, 0xa8f2,
|
||||
0xa926, 0xa92e,
|
||||
0xa947, 0xa952,
|
||||
0xa980, 0xa983,
|
||||
0xa9b3, 0xa9b4,
|
||||
0xa9b6, 0xa9ba,
|
||||
0xa9bc, 0xa9bd,
|
||||
0xaa29, 0xaa2f,
|
||||
0xaa31, 0xaa33,
|
||||
0xaa35, 0xaa40,
|
||||
0xaa43, 0xaa44,
|
||||
0xaa4c, 0xaa4d,
|
||||
0xaab0, 0xaab1,
|
||||
0xaab2, 0xaab5,
|
||||
0xaab7, 0xaab9,
|
||||
0xaabe, 0xaac0,
|
||||
0xaac1, 0xaac2,
|
||||
0xabe5, 0xabe6,
|
||||
0xabe8, 0xabe9,
|
||||
0xabed, 0xabf0,
|
||||
0xfb1e, 0xfb1f,
|
||||
0xfb29, 0xfb2a,
|
||||
0xfd3e, 0xfd50,
|
||||
@ -775,12 +828,28 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
0x1091f, 0x10920,
|
||||
0x10a01, 0x10a10,
|
||||
0x10a38, 0x10a40,
|
||||
0x10b39, 0x10b40,
|
||||
0x10e60, 0x11000,
|
||||
0x11001, 0x11002,
|
||||
0x11038, 0x11047,
|
||||
0x11052, 0x11066,
|
||||
0x11080, 0x11082,
|
||||
0x110b3, 0x110b7,
|
||||
0x110b9, 0x110bb,
|
||||
0x1d167, 0x1d16a,
|
||||
0x1d173, 0x1d183,
|
||||
0x1d185, 0x1d18c,
|
||||
0x1d1aa, 0x1d1ae,
|
||||
0x1d200, 0x1d360,
|
||||
0x1d7ce, 0x20000,
|
||||
0x1d6db, 0x1d6dc,
|
||||
0x1d715, 0x1d716,
|
||||
0x1d74f, 0x1d750,
|
||||
0x1d789, 0x1d78a,
|
||||
0x1d7c3, 0x1d7c4,
|
||||
0x1d7ce, 0x1f110,
|
||||
0x1f300, 0x1f48c,
|
||||
0x1f48d, 0x1f524,
|
||||
0x1f525, 0x20000,
|
||||
0xe0001, 0xf0000,
|
||||
0x10fffe, 0x10ffff // sentinel
|
||||
};
|
||||
@ -947,6 +1016,14 @@ public final class NumericShaper implements java.io.Serializable {
|
||||
&& rangeSet.contains(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()]);
|
||||
if (rangeArray.length > BSEARCH_THRESHOLD) {
|
||||
// sort rangeArray for binary search
|
||||
|
@ -29,6 +29,8 @@ import com.sun.beans.WeakCache;
|
||||
import com.sun.beans.finder.BeanInfoFinder;
|
||||
import com.sun.beans.finder.ClassFinder;
|
||||
|
||||
import java.awt.Component;
|
||||
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.lang.reflect.Method;
|
||||
@ -39,6 +41,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.EventListener;
|
||||
import java.util.EventObject;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
import java.util.WeakHashMap;
|
||||
@ -1234,7 +1237,23 @@ public class Introspector {
|
||||
}
|
||||
}
|
||||
// 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) {
|
||||
@ -1244,10 +1263,7 @@ public class Introspector {
|
||||
if (argTypes.length != 1) {
|
||||
return false;
|
||||
}
|
||||
if (isSubclass(argTypes[0], java.util.EventObject.class)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return isSubclass(argTypes[0], EventObject.class);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -395,7 +395,11 @@ class BufferedInputStream extends FilterInputStream {
|
||||
* or an I/O error occurs.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -273,7 +273,11 @@ class PushbackInputStream extends FilterInputStream {
|
||||
*/
|
||||
public int available() throws IOException {
|
||||
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
@ -44,11 +44,11 @@ public interface Readable {
|
||||
* rewinding of the buffer is performed.
|
||||
*
|
||||
* @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
|
||||
* @throws IOException if an I/O error occurs
|
||||
* @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;
|
||||
|
||||
|
@ -47,7 +47,7 @@ class StringCharBuffer // package-private
|
||||
0,
|
||||
this.remaining(),
|
||||
this.remaining(),
|
||||
this.position());
|
||||
offset + this.position());
|
||||
}
|
||||
|
||||
private StringCharBuffer(CharSequence s,
|
||||
|
@ -110,7 +110,8 @@ import java.nio.ByteBuffer;
|
||||
* 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
|
||||
* 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
|
||||
*/
|
||||
@ -367,7 +368,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* @param dst
|
||||
* The buffer into which bytes are to be transferred
|
||||
* @param timeout
|
||||
* The timeout, or {@code 0L} for no timeout
|
||||
* The maximum time for the I/O operation to complete
|
||||
* @param unit
|
||||
* The time unit of the {@code timeout} argument
|
||||
* @param attachment
|
||||
@ -376,8 +377,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* The handler for consuming the result
|
||||
*
|
||||
* @throws IllegalArgumentException
|
||||
* If the {@code timeout} parameter is negative or the buffer is
|
||||
* read-only
|
||||
* If the buffer is read-only
|
||||
* @throws ReadPendingException
|
||||
* If a read operation is already in progress on this channel
|
||||
* @throws NotYetConnectedException
|
||||
@ -471,7 +471,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* The maximum number of buffers to be accessed; must be non-negative
|
||||
* and no larger than {@code dsts.length - offset}
|
||||
* @param timeout
|
||||
* The timeout, or {@code 0L} for no timeout
|
||||
* The maximum time for the I/O operation to complete
|
||||
* @param unit
|
||||
* The time unit of the {@code timeout} argument
|
||||
* @param attachment
|
||||
@ -483,8 +483,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* If the pre-conditions for the {@code offset} and {@code length}
|
||||
* parameter aren't met
|
||||
* @throws IllegalArgumentException
|
||||
* If the {@code timeout} parameter is negative, or a buffer is
|
||||
* read-only
|
||||
* If the buffer is read-only
|
||||
* @throws ReadPendingException
|
||||
* If a read operation is already in progress on this channel
|
||||
* @throws NotYetConnectedException
|
||||
@ -524,7 +523,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* @param src
|
||||
* The buffer from which bytes are to be retrieved
|
||||
* @param timeout
|
||||
* The timeout, or {@code 0L} for no timeout
|
||||
* The maximum time for the I/O operation to complete
|
||||
* @param unit
|
||||
* The time unit of the {@code timeout} argument
|
||||
* @param attachment
|
||||
@ -532,8 +531,6 @@ public abstract class AsynchronousSocketChannel
|
||||
* @param handler
|
||||
* The handler for consuming the result
|
||||
*
|
||||
* @throws IllegalArgumentException
|
||||
* If the {@code timeout} parameter is negative
|
||||
* @throws WritePendingException
|
||||
* If a write operation is already in progress on this channel
|
||||
* @throws NotYetConnectedException
|
||||
@ -623,7 +620,7 @@ public abstract class AsynchronousSocketChannel
|
||||
* The maximum number of buffers to be accessed; must be non-negative
|
||||
* and no larger than {@code srcs.length - offset}
|
||||
* @param timeout
|
||||
* The timeout, or {@code 0L} for no timeout
|
||||
* The maximum time for the I/O operation to complete
|
||||
* @param unit
|
||||
* The time unit of the {@code timeout} argument
|
||||
* @param attachment
|
||||
@ -634,8 +631,6 @@ public abstract class AsynchronousSocketChannel
|
||||
* @throws IndexOutOfBoundsException
|
||||
* If the pre-conditions for the {@code offset} and {@code length}
|
||||
* parameter aren't met
|
||||
* @throws IllegalArgumentException
|
||||
* If the {@code timeout} parameter is negative
|
||||
* @throws WritePendingException
|
||||
* If a write operation is already in progress on this channel
|
||||
* @throws NotYetConnectedException
|
||||
|
@ -84,7 +84,7 @@ import java.security.*;
|
||||
* {@code setJNDIContext} and {@code setLogger}</td>
|
||||
* <td>Permits an application to specify the JNDI context from which the
|
||||
* {@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>
|
||||
|
@ -1581,6 +1581,7 @@ import sun.misc.FormattedFloatingDecimal;
|
||||
* instance of the Java virtual machine.
|
||||
*
|
||||
* <tr><td valign="top">{@code 'Z'}
|
||||
* <td valign="top"> <tt>'\u005a'</tt>
|
||||
* <td> A string representing the abbreviation for the time zone. This
|
||||
* value will be adjusted as necessary for Daylight Saving Time. For
|
||||
* {@code long}, {@link Long}, and {@link Date} the time zone used is
|
||||
|
@ -25,7 +25,9 @@
|
||||
|
||||
package java.util.spi;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Currency;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
@ -95,6 +97,23 @@ public abstract class CurrencyNameProvider extends LocaleServiceProvider {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,9 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider {
|
||||
* @see java.util.Locale#getDisplayScript(java.util.Locale)
|
||||
* @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">
|
||||
|
@ -25,6 +25,9 @@
|
||||
|
||||
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
|
||||
* Subject-based authorization. A subclass implementation
|
||||
@ -159,6 +162,10 @@ public abstract class Policy {
|
||||
private static Policy policy;
|
||||
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 {
|
||||
contextClassLoader = java.security.AccessController.doPrivileged
|
||||
(new java.security.PrivilegedAction<ClassLoader>() {
|
||||
@ -234,6 +241,8 @@ public abstract class Policy {
|
||||
contextClassLoader).newInstance();
|
||||
}
|
||||
});
|
||||
isCustomPolicy =
|
||||
!finalClass.equals("com.sun.security.auth.PolicyFile");
|
||||
} catch (Exception e) {
|
||||
throw new SecurityException
|
||||
(sun.security.util.ResourcesMgr.getString
|
||||
@ -265,6 +274,46 @@ public abstract class Policy {
|
||||
java.lang.SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) sm.checkPermission(new AuthPermission("setPolicy"));
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,8 +26,6 @@
|
||||
package javax.security.auth;
|
||||
|
||||
import java.security.AccessController;
|
||||
import java.security.AccessControlContext;
|
||||
import java.security.AllPermission;
|
||||
import java.security.Permission;
|
||||
import java.security.Permissions;
|
||||
import java.security.PermissionCollection;
|
||||
@ -35,10 +33,8 @@ import java.security.Policy;
|
||||
import java.security.Principal;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.security.ProtectionDomain;
|
||||
import java.lang.ClassLoader;
|
||||
import java.security.Security;
|
||||
import java.util.Set;
|
||||
import java.util.Iterator;
|
||||
import java.util.WeakHashMap;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
@ -61,7 +57,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
||||
"\t[SubjectDomainCombiner]");
|
||||
|
||||
// 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
|
||||
private static final boolean allowCaching =
|
||||
@ -202,8 +199,8 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
||||
return null;
|
||||
}
|
||||
|
||||
// maintain backwards compatibility for people who provide
|
||||
// their own javax.security.auth.Policy implementations
|
||||
// maintain backwards compatibility for developers who provide
|
||||
// their own custom javax.security.auth.Policy implementations
|
||||
if (useJavaxPolicy) {
|
||||
return combineJavaxPolicy(currentDomains, assignedDomains);
|
||||
}
|
||||
@ -476,8 +473,7 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
||||
String s = AccessController.doPrivileged
|
||||
(new PrivilegedAction<String>() {
|
||||
public String run() {
|
||||
return java.security.Security.getProperty
|
||||
("cache.auth.policy");
|
||||
return Security.getProperty("cache.auth.policy");
|
||||
}
|
||||
});
|
||||
if (s != null) {
|
||||
@ -488,29 +484,6 @@ public class SubjectDomainCombiner implements java.security.DomainCombiner {
|
||||
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,
|
||||
ProtectionDomain[] assignedDomains) {
|
||||
if (currentDomains == null || currentDomains.length == 0) {
|
||||
|
@ -1379,6 +1379,10 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl
|
||||
* If <code>true</code> and the button has a border,
|
||||
* the border is painted. The default value for the
|
||||
* <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>,
|
||||
* the border is painted
|
||||
|
@ -273,7 +273,7 @@ public class BorderFactory
|
||||
* @since 1.7
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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 ///////////////////////////////////////////////////////////
|
||||
|
@ -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
|
||||
* subclassing of {@code LayerUI} class. To create a {@code JLayer} with a border,
|
||||
* add it to a {@code JPanel} that has a border.
|
||||
@ -373,8 +373,12 @@ public final class JLayer<V extends Component>
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public void removeAll() {
|
||||
setView(null);
|
||||
setGlassPane(null);
|
||||
if (view != null) {
|
||||
setView(null);
|
||||
}
|
||||
if (glassPane != null) {
|
||||
setGlassPane(null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1443,6 +1443,10 @@ public class JTabbedPane extends JComponent
|
||||
* 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>.
|
||||
* 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 background the color to be displayed in the tab's background
|
||||
* @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
|
||||
* will default to the foreground color of this <code>tabbedpane</code>.
|
||||
* 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 foreground the color to be displayed as the tab's foreground
|
||||
|
@ -165,11 +165,11 @@ public class TitledBorder extends AbstractBorder
|
||||
* @param titlePosition the position for the title
|
||||
*/
|
||||
public TitledBorder(Border border,
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition) {
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition) {
|
||||
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
|
||||
*/
|
||||
public TitledBorder(Border border,
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition,
|
||||
Font titleFont) {
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition,
|
||||
Font titleFont) {
|
||||
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"})
|
||||
public TitledBorder(Border border,
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition,
|
||||
Font titleFont,
|
||||
Color titleColor) {
|
||||
String title,
|
||||
int titleJustification,
|
||||
int titlePosition,
|
||||
Font titleFont,
|
||||
Color titleColor) {
|
||||
this.title = title;
|
||||
this.border = border;
|
||||
this.titleFont = titleFont;
|
||||
@ -234,7 +234,7 @@ public class TitledBorder extends AbstractBorder
|
||||
* @param height the height of the painted border
|
||||
*/
|
||||
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
||||
Border border = getBorderUI();
|
||||
Border border = getBorder();
|
||||
String title = getTitle();
|
||||
if ((title != null) && !title.isEmpty()) {
|
||||
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
||||
@ -347,7 +347,7 @@ public class TitledBorder extends AbstractBorder
|
||||
* @param insets the object to be reinitialized
|
||||
*/
|
||||
public Insets getBorderInsets(Component c, Insets insets) {
|
||||
Border border = getBorderUI();
|
||||
Border border = getBorder();
|
||||
if (border == null) {
|
||||
insets.set(0, 0, 0, 0);
|
||||
}
|
||||
@ -402,22 +402,34 @@ public class TitledBorder extends AbstractBorder
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @return the title of the titled border
|
||||
*/
|
||||
public String getTitle() { return title; }
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the border of the titled border.
|
||||
*
|
||||
* @return the border of the titled border
|
||||
*/
|
||||
public Border getBorder() {
|
||||
return border;
|
||||
return border != null
|
||||
? border
|
||||
: UIManager.getBorder("TitledBorder.border");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title-position of the titled border.
|
||||
*
|
||||
* @return the title-position of the titled border
|
||||
*/
|
||||
public int getTitlePosition() {
|
||||
return titlePosition;
|
||||
@ -425,20 +437,28 @@ public class TitledBorder extends AbstractBorder
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @return the title-font of the titled border
|
||||
*/
|
||||
public Font getTitleFont() {
|
||||
public Font getTitleFont() {
|
||||
return titleFont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title-color of the titled border.
|
||||
*
|
||||
* @return the title-color of the titled border
|
||||
*/
|
||||
public Color getTitleColor() {
|
||||
public Color getTitleColor() {
|
||||
return titleColor;
|
||||
}
|
||||
|
||||
@ -447,15 +467,19 @@ public class TitledBorder extends AbstractBorder
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @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.
|
||||
@ -482,19 +506,19 @@ public class TitledBorder extends AbstractBorder
|
||||
* Sets the title-justification of the titled border.
|
||||
* @param titleJustification the justification for the border
|
||||
*/
|
||||
public void setTitleJustification(int titleJustification) {
|
||||
public void setTitleJustification(int titleJustification) {
|
||||
switch (titleJustification) {
|
||||
case DEFAULT_JUSTIFICATION:
|
||||
case LEFT:
|
||||
case CENTER:
|
||||
case RIGHT:
|
||||
case LEADING:
|
||||
case TRAILING:
|
||||
this.titleJustification = titleJustification;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(titleJustification +
|
||||
" is not a valid title justification.");
|
||||
case DEFAULT_JUSTIFICATION:
|
||||
case LEFT:
|
||||
case CENTER:
|
||||
case RIGHT:
|
||||
case LEADING:
|
||||
case TRAILING:
|
||||
this.titleJustification = titleJustification;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(titleJustification +
|
||||
" is not a valid title justification.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -518,6 +542,7 @@ public class TitledBorder extends AbstractBorder
|
||||
* Returns the minimum dimensions this border requires
|
||||
* in order to fully display the border and title.
|
||||
* @param c the component where this border will be drawn
|
||||
* @return the {@code Dimension} object
|
||||
*/
|
||||
public Dimension getMinimumSize(Component c) {
|
||||
Insets insets = getBorderInsets(c);
|
||||
@ -557,7 +582,7 @@ public class TitledBorder extends AbstractBorder
|
||||
if (height < 0) {
|
||||
throw new IllegalArgumentException("Height must be >= 0");
|
||||
}
|
||||
Border border = getBorderUI();
|
||||
Border border = getBorder();
|
||||
String title = getTitle();
|
||||
if ((title != null) && !title.isEmpty()) {
|
||||
int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
|
||||
@ -616,13 +641,6 @@ public class TitledBorder extends AbstractBorder
|
||||
return Component.BaselineResizeBehavior.OTHER;
|
||||
}
|
||||
|
||||
private Border getBorderUI() {
|
||||
Border border = getBorder();
|
||||
return border != null
|
||||
? border
|
||||
: UIManager.getBorder("TitledBorder.border");
|
||||
}
|
||||
|
||||
private int getPosition() {
|
||||
int position = getTitlePosition();
|
||||
if (position != DEFAULT_POSITION) {
|
||||
|
@ -449,8 +449,8 @@ public class LayerUI<V extends Component>
|
||||
|
||||
/**
|
||||
* Configures the {@code JLayer} this {@code LayerUI} is set to.
|
||||
* The default implementation registers the {@code LayerUI}
|
||||
* as a property change listener for the passed {@code JLayer} component.
|
||||
* The default implementation registers 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
|
||||
*/
|
||||
@ -461,8 +461,8 @@ public class LayerUI<V extends Component>
|
||||
/**
|
||||
* Reverses the configuration which was previously set
|
||||
* in the {@link #installUI(JComponent)} method.
|
||||
* The default implementation unregisters the property change listener
|
||||
* for the passed JLayer component.
|
||||
* The default implementation unregisters the passed {@code 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.
|
||||
*/
|
||||
|
@ -196,6 +196,10 @@ public class BasicMenuUI extends BasicMenuItemUI
|
||||
return getHandler();
|
||||
}
|
||||
|
||||
protected MenuKeyListener createMenuKeyListener(JComponent c) {
|
||||
return (MenuKeyListener)getHandler();
|
||||
}
|
||||
|
||||
public Dimension getMaximumSize(JComponent c) {
|
||||
if (((JMenu)menuItem).isTopLevelMenu() == true) {
|
||||
Dimension d = c.getPreferredSize();
|
||||
@ -397,7 +401,7 @@ public class BasicMenuUI extends BasicMenuItemUI
|
||||
public void stateChanged(ChangeEvent e) { }
|
||||
}
|
||||
|
||||
private class Handler extends BasicMenuItemUI.Handler {
|
||||
private class Handler extends BasicMenuItemUI.Handler implements MenuKeyListener {
|
||||
//
|
||||
// PropertyChangeListener
|
||||
//
|
||||
@ -580,5 +584,48 @@ public class BasicMenuUI extends BasicMenuItemUI
|
||||
}
|
||||
public void menuDragMouseExited(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) {}
|
||||
}
|
||||
}
|
||||
|
@ -81,17 +81,26 @@ public class MetalScrollPaneUI extends BasicScrollPaneUI
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void installListeners(JScrollPane scrollPane) {
|
||||
super.installListeners(scrollPane);
|
||||
scrollBarSwapListener = createScrollBarSwapListener();
|
||||
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) {
|
||||
super.uninstallListeners(scrollPane);
|
||||
|
||||
scrollPane.removePropertyChangeListener(scrollBarSwapListener);
|
||||
}
|
||||
|
||||
|
@ -223,6 +223,16 @@ public final class AWTAccessor {
|
||||
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.
|
||||
*/
|
||||
@ -334,6 +344,10 @@ public final class AWTAccessor {
|
||||
* Gets the state of this 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;
|
||||
|
||||
/*
|
||||
* The java.awt.Window class accessor object.
|
||||
*/
|
||||
private static ContainerAccessor containerAccessor;
|
||||
private static WindowAccessor windowAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.AWTEvent class accessor object.
|
||||
*/
|
||||
private static AWTEventAccessor awtEventAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.event.InputEvent class accessor object.
|
||||
*/
|
||||
private static InputEventAccessor inputEventAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.Frame class accessor object.
|
||||
*/
|
||||
private static FrameAccessor frameAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.KeyboardFocusManager class accessor object.
|
||||
*/
|
||||
private static KeyboardFocusManagerAccessor kfmAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.MenuComponent class accessor object.
|
||||
*/
|
||||
private static MenuComponentAccessor menuComponentAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.EventQueue class accessor object.
|
||||
*/
|
||||
private static EventQueueAccessor eventQueueAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.PopupMenu class accessor object.
|
||||
*/
|
||||
private static PopupMenuAccessor popupMenuAccessor;
|
||||
|
||||
/*
|
||||
* The java.awt.FileDialog class accessor object.
|
||||
*/
|
||||
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() {
|
||||
if (componentAccessor == null) {
|
||||
@ -507,6 +487,24 @@ public final class AWTAccessor {
|
||||
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.
|
||||
*/
|
||||
|
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal file
42
jdk/src/share/classes/sun/io/ByteToCharCp833.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal file
46
jdk/src/share/classes/sun/io/CharToByteCp833.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
*
|
||||
* 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("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("ibm-834", "Cp834");
|
||||
aliasTable.put("cp834", "Cp834");
|
||||
|
@ -44,8 +44,16 @@ import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.MathContext;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ResourceBundle;
|
||||
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.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
@ -59,6 +67,17 @@ public enum LauncherHelper {
|
||||
private static StringBuilder outBuf = new StringBuilder();
|
||||
|
||||
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() {
|
||||
if (javarb == null) {
|
||||
javarb = ResourceBundle.getBundle(defaultBundleName);
|
||||
@ -66,6 +85,184 @@ public enum LauncherHelper {
|
||||
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
|
||||
* apply any arguments that we might pass.
|
||||
|
@ -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.
|
||||
#
|
||||
# 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\
|
||||
\ -Xshare:off do not attempt to use shared class data\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
|
||||
|
||||
java.launcher.cls.error1=\
|
||||
|
@ -110,6 +110,7 @@ class ChunkedInputStream extends LeftOverInputStream {
|
||||
if (remaining == 0) {
|
||||
eof = true;
|
||||
consumeCRLF();
|
||||
t.getServerImpl().requestCompleted (t.getConnection());
|
||||
return -1;
|
||||
}
|
||||
needToReadHeader = false;
|
||||
|
@ -40,5 +40,7 @@ class Event {
|
||||
class WriteFinishedEvent extends Event {
|
||||
WriteFinishedEvent (ExchangeImpl t) {
|
||||
super (t);
|
||||
assert !t.writefinished;
|
||||
t.writefinished = true;
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ class ExchangeImpl {
|
||||
Headers reqHdrs, rspHdrs;
|
||||
Request req;
|
||||
String method;
|
||||
boolean writefinished;
|
||||
URI uri;
|
||||
HttpConnection connection;
|
||||
long reqContentLen;
|
||||
|
@ -56,6 +56,9 @@ class FixedLengthInputStream extends LeftOverInputStream {
|
||||
int n = in.read(b, off, len);
|
||||
if (n > -1) {
|
||||
remaining -= n;
|
||||
if (remaining == 0) {
|
||||
t.getServerImpl().requestCompleted (t.getConnection());
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
@ -55,10 +55,15 @@ class HttpConnection {
|
||||
SelectionKey selectionKey;
|
||||
String protocol;
|
||||
long time;
|
||||
volatile long creationTime; // time this connection was created
|
||||
volatile long rspStartedTime; // time we started writing the response
|
||||
int remaining;
|
||||
boolean closed = false;
|
||||
Logger logger;
|
||||
|
||||
public enum State {IDLE, REQUEST, RESPONSE};
|
||||
volatile State state;
|
||||
|
||||
public String toString() {
|
||||
String s = null;
|
||||
if (chan != null) {
|
||||
@ -78,6 +83,14 @@ class HttpConnection {
|
||||
context = ctx;
|
||||
}
|
||||
|
||||
State getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
void setState (State s) {
|
||||
state = s;
|
||||
}
|
||||
|
||||
void setParameters (
|
||||
InputStream in, OutputStream rawout, SocketChannel chan,
|
||||
SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
|
||||
|
@ -201,32 +201,22 @@ class Request {
|
||||
|
||||
static class ReadStream extends InputStream {
|
||||
SocketChannel channel;
|
||||
SelectorCache sc;
|
||||
Selector selector;
|
||||
ByteBuffer chanbuf;
|
||||
SelectionKey key;
|
||||
int available;
|
||||
byte[] one;
|
||||
boolean closed = false, eof = false;
|
||||
private boolean closed = false, eof = false;
|
||||
ByteBuffer markBuf; /* reads may be satisifed from this buffer */
|
||||
boolean marked;
|
||||
boolean reset;
|
||||
int readlimit;
|
||||
static long readTimeout;
|
||||
ServerImpl server;
|
||||
|
||||
static {
|
||||
readTimeout = ServerConfig.getReadTimeout();
|
||||
}
|
||||
final static int BUFSIZE = 8 * 1024;
|
||||
|
||||
public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
|
||||
this.channel = chan;
|
||||
this.server = server;
|
||||
sc = SelectorCache.getSelectorCache();
|
||||
selector = sc.getSelector();
|
||||
chanbuf = ByteBuffer.allocate (8* 1024);
|
||||
key = chan.register (selector, SelectionKey.OP_READ);
|
||||
available = 0;
|
||||
chanbuf = ByteBuffer.allocate (BUFSIZE);
|
||||
chanbuf.clear();
|
||||
one = new byte[1];
|
||||
closed = marked = reset = false;
|
||||
}
|
||||
@ -255,6 +245,12 @@ class Request {
|
||||
return -1;
|
||||
}
|
||||
|
||||
assert channel.isBlocking();
|
||||
|
||||
if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
|
||||
throw new IndexOutOfBoundsException ();
|
||||
}
|
||||
|
||||
if (reset) { /* satisfy from markBuf */
|
||||
canreturn = markBuf.remaining ();
|
||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
||||
@ -263,17 +259,19 @@ class Request {
|
||||
reset = false;
|
||||
}
|
||||
} else { /* satisfy from channel */
|
||||
canreturn = available();
|
||||
while (canreturn == 0 && !eof) {
|
||||
block ();
|
||||
canreturn = available();
|
||||
chanbuf.clear ();
|
||||
if (srclen < BUFSIZE) {
|
||||
chanbuf.limit (srclen);
|
||||
}
|
||||
if (eof) {
|
||||
do {
|
||||
willreturn = channel.read (chanbuf);
|
||||
} while (willreturn == 0);
|
||||
if (willreturn == -1) {
|
||||
eof = true;
|
||||
return -1;
|
||||
}
|
||||
willreturn = canreturn>srclen ? srclen : canreturn;
|
||||
chanbuf.flip ();
|
||||
chanbuf.get(b, off, willreturn);
|
||||
available -= willreturn;
|
||||
|
||||
if (marked) { /* copy into markBuf */
|
||||
try {
|
||||
@ -286,6 +284,11 @@ class Request {
|
||||
return willreturn;
|
||||
}
|
||||
|
||||
public boolean markSupported () {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Does not query the OS socket */
|
||||
public synchronized int available () throws IOException {
|
||||
if (closed)
|
||||
throw new IOException ("Stream is closed");
|
||||
@ -296,36 +299,7 @@ class Request {
|
||||
if (reset)
|
||||
return markBuf.remaining();
|
||||
|
||||
if (available > 0)
|
||||
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");
|
||||
return chanbuf.remaining();
|
||||
}
|
||||
|
||||
public void close () throws IOException {
|
||||
@ -333,8 +307,6 @@ class Request {
|
||||
return;
|
||||
}
|
||||
channel.close ();
|
||||
selector.selectNow();
|
||||
sc.freeSelector(selector);
|
||||
closed = true;
|
||||
}
|
||||
|
||||
@ -362,23 +334,14 @@ class Request {
|
||||
SocketChannel channel;
|
||||
ByteBuffer buf;
|
||||
SelectionKey key;
|
||||
SelectorCache sc;
|
||||
Selector selector;
|
||||
boolean closed;
|
||||
byte[] one;
|
||||
ServerImpl server;
|
||||
static long writeTimeout;
|
||||
|
||||
static {
|
||||
writeTimeout = ServerConfig.getWriteTimeout();
|
||||
}
|
||||
|
||||
public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
|
||||
this.channel = channel;
|
||||
this.server = server;
|
||||
sc = SelectorCache.getSelectorCache();
|
||||
selector = sc.getSelector();
|
||||
key = channel.register (selector, SelectionKey.OP_WRITE);
|
||||
assert channel.isBlocking();
|
||||
closed = false;
|
||||
one = new byte [1];
|
||||
buf = ByteBuffer.allocate (4096);
|
||||
@ -411,31 +374,14 @@ class Request {
|
||||
l -= n;
|
||||
if (l == 0)
|
||||
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 {
|
||||
if (closed)
|
||||
return;
|
||||
//server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
|
||||
channel.close ();
|
||||
selector.selectNow();
|
||||
sc.freeSelector(selector);
|
||||
closed = true;
|
||||
}
|
||||
}
|
||||
|
@ -53,8 +53,6 @@ class SSLStreams {
|
||||
EngineWrapper wrapper;
|
||||
OutputStream os;
|
||||
InputStream is;
|
||||
static long readTimeout = ServerConfig.getReadTimeout();
|
||||
static long writeTimeout = ServerConfig.getWriteTimeout();
|
||||
|
||||
/* held by thread doing the hand-shake on this connection */
|
||||
Lock handshaking = new ReentrantLock();
|
||||
@ -77,10 +75,13 @@ class SSLStreams {
|
||||
if (cfg != null) {
|
||||
Parameters params = new Parameters (cfg, addr);
|
||||
cfg.configure (params);
|
||||
//BEGIN_TIGER_EXCLUDE
|
||||
SSLParameters sslParams = params.getSSLParameters();
|
||||
if (sslParams != null) {
|
||||
engine.setSSLParameters (sslParams);
|
||||
} else {
|
||||
} else
|
||||
//END_TIGER_EXCLUDE
|
||||
{
|
||||
/* tiger compatibility */
|
||||
if (params.getCipherSuites() != null) {
|
||||
try {
|
||||
@ -104,7 +105,6 @@ class SSLStreams {
|
||||
|
||||
class Parameters extends HttpsParameters {
|
||||
InetSocketAddress addr;
|
||||
SSLParameters params;
|
||||
HttpsConfigurator cfg;
|
||||
|
||||
Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
|
||||
@ -117,12 +117,15 @@ class SSLStreams {
|
||||
public HttpsConfigurator getHttpsConfigurator() {
|
||||
return cfg;
|
||||
}
|
||||
//BEGIN_TIGER_EXCLUDE
|
||||
SSLParameters params;
|
||||
public void setSSLParameters (SSLParameters p) {
|
||||
params = p;
|
||||
}
|
||||
SSLParameters getSSLParameters () {
|
||||
return params;
|
||||
}
|
||||
//END_TIGER_EXCLUDE
|
||||
}
|
||||
|
||||
/**
|
||||
@ -245,9 +248,6 @@ class SSLStreams {
|
||||
|
||||
SocketChannel chan;
|
||||
SSLEngine engine;
|
||||
SelectorCache sc;
|
||||
Selector write_selector, read_selector;
|
||||
SelectionKey wkey, rkey;
|
||||
Object wrapLock, unwrapLock;
|
||||
ByteBuffer unwrap_src, wrap_dst;
|
||||
boolean closed = false;
|
||||
@ -260,16 +260,9 @@ class SSLStreams {
|
||||
unwrapLock = new Object();
|
||||
unwrap_src = 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 {
|
||||
sc.freeSelector (write_selector);
|
||||
sc.freeSelector (read_selector);
|
||||
}
|
||||
|
||||
/* try to wrap and send the data in src. Handles OVERFLOW.
|
||||
@ -304,15 +297,7 @@ class SSLStreams {
|
||||
wrap_dst.flip();
|
||||
int l = wrap_dst.remaining();
|
||||
assert l == r.result.bytesProduced();
|
||||
long currtime = time.getTime();
|
||||
long maxtime = currtime + writeTimeout;
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -342,20 +327,12 @@ class SSLStreams {
|
||||
needData = true;
|
||||
}
|
||||
synchronized (unwrapLock) {
|
||||
int x,y;
|
||||
int x;
|
||||
do {
|
||||
if (needData) {
|
||||
long currTime = time.getTime();
|
||||
long maxtime = currTime + readTimeout;
|
||||
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);
|
||||
} while (x == 0);
|
||||
if (x == -1) {
|
||||
throw new IOException ("connection closed for reading");
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -27,6 +27,8 @@ package sun.net.httpserver;
|
||||
|
||||
import com.sun.net.httpserver.*;
|
||||
import com.sun.net.httpserver.spi.*;
|
||||
import java.util.logging.Logger;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
/**
|
||||
* Parameters that users will not likely need to set
|
||||
@ -37,23 +39,26 @@ class ServerConfig {
|
||||
|
||||
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 */
|
||||
static long defaultReadTimeout = 20 ; // 20 sec.
|
||||
static long defaultWriteTimeout = 60 ; // 60 sec.
|
||||
static long defaultIdleInterval = 300 ; // 5 min
|
||||
static long defaultSelCacheTimeout = 120 ; // seconds
|
||||
static int defaultMaxIdleConnections = 200 ;
|
||||
static final long DEFAULT_IDLE_INTERVAL = 300 ; // 5 min
|
||||
static final int DEFAULT_MAX_IDLE_CONNECTIONS = 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 selCacheTimeout;
|
||||
static long drainAmount; // max # of bytes to drain from an inputstream
|
||||
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 {
|
||||
@ -61,49 +66,79 @@ class ServerConfig {
|
||||
idleInterval = ((Long)java.security.AccessController.doPrivileged(
|
||||
new sun.security.action.GetLongAction(
|
||||
"sun.net.httpserver.idleInterval",
|
||||
defaultIdleInterval))).longValue() * 1000;
|
||||
DEFAULT_IDLE_INTERVAL))).longValue() * 1000;
|
||||
|
||||
clockTick = ((Integer)java.security.AccessController.doPrivileged(
|
||||
new sun.security.action.GetIntegerAction(
|
||||
"sun.net.httpserver.clockTick",
|
||||
defaultClockTick))).intValue();
|
||||
DEFAULT_CLOCK_TICK))).intValue();
|
||||
|
||||
maxIdleConnections = ((Integer)java.security.AccessController.doPrivileged(
|
||||
new sun.security.action.GetIntegerAction(
|
||||
"sun.net.httpserver.maxIdleConnections",
|
||||
defaultMaxIdleConnections))).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;
|
||||
DEFAULT_MAX_IDLE_CONNECTIONS))).intValue();
|
||||
|
||||
drainAmount = ((Long)java.security.AccessController.doPrivileged(
|
||||
new sun.security.action.GetLongAction(
|
||||
"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(
|
||||
new sun.security.action.GetBooleanAction(
|
||||
"sun.net.httpserver.debug"))).booleanValue();
|
||||
}
|
||||
|
||||
static long getReadTimeout () {
|
||||
return readTimeout;
|
||||
}
|
||||
|
||||
static long getSelCacheTimeout () {
|
||||
return selCacheTimeout;
|
||||
static void checkLegacyProperties (final Logger logger) {
|
||||
|
||||
// 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 () {
|
||||
@ -122,11 +157,19 @@ class ServerConfig {
|
||||
return maxIdleConnections;
|
||||
}
|
||||
|
||||
static long getWriteTimeout () {
|
||||
return writeTimeout;
|
||||
}
|
||||
|
||||
static long getDrainAmount () {
|
||||
return drainAmount;
|
||||
}
|
||||
|
||||
static long getMaxReqTime () {
|
||||
return maxReqTime;
|
||||
}
|
||||
|
||||
static long getMaxRspTime () {
|
||||
return maxRspTime;
|
||||
}
|
||||
|
||||
static long getTimerMillis () {
|
||||
return timerMillis;
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ import java.util.logging.Level;
|
||||
import javax.net.ssl.*;
|
||||
import com.sun.net.httpserver.*;
|
||||
import com.sun.net.httpserver.spi.*;
|
||||
import sun.net.httpserver.HttpConnection.State;
|
||||
|
||||
/**
|
||||
* Provides implementation for both HTTP and HTTPS
|
||||
@ -55,6 +56,12 @@ class ServerImpl implements TimeSource {
|
||||
private SelectionKey listenerKey;
|
||||
private Set<HttpConnection> idleConnections;
|
||||
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 Object lolock = new Object();
|
||||
private volatile boolean finished = false;
|
||||
@ -62,14 +69,19 @@ class ServerImpl implements TimeSource {
|
||||
private boolean bound = false;
|
||||
private boolean started = false;
|
||||
private volatile long time; /* current time */
|
||||
private volatile long subticks = 0;
|
||||
private volatile long ticks; /* number of clock ticks since server started */
|
||||
private HttpServer wrapper;
|
||||
|
||||
final static int CLOCK_TICK = ServerConfig.getClockTick();
|
||||
final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
|
||||
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;
|
||||
|
||||
ServerImpl (
|
||||
@ -79,6 +91,7 @@ class ServerImpl implements TimeSource {
|
||||
this.protocol = protocol;
|
||||
this.wrapper = wrapper;
|
||||
this.logger = Logger.getLogger ("com.sun.net.httpserver");
|
||||
ServerConfig.checkLegacyProperties (logger);
|
||||
https = protocol.equalsIgnoreCase ("https");
|
||||
this.address = addr;
|
||||
contexts = new ContextList();
|
||||
@ -94,9 +107,18 @@ class ServerImpl implements TimeSource {
|
||||
dispatcher = new Dispatcher();
|
||||
idleConnections = 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();
|
||||
timer = new Timer ("server-timer", true);
|
||||
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>();
|
||||
logger.config ("HttpServer created "+protocol+" "+ addr);
|
||||
}
|
||||
@ -181,6 +203,9 @@ class ServerImpl implements TimeSource {
|
||||
allConnections.clear();
|
||||
idleConnections.clear();
|
||||
timer.cancel();
|
||||
if (timer1Enabled) {
|
||||
timer1.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
Dispatcher dispatcher;
|
||||
@ -236,13 +261,6 @@ class ServerImpl implements TimeSource {
|
||||
}
|
||||
}
|
||||
|
||||
int resultSize () {
|
||||
synchronized (lolock) {
|
||||
return events.size ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* main server listener task */
|
||||
|
||||
class Dispatcher implements Runnable {
|
||||
@ -257,7 +275,7 @@ class ServerImpl implements TimeSource {
|
||||
if (terminating && exchanges == 0) {
|
||||
finished = true;
|
||||
}
|
||||
SocketChannel chan = c.getChannel();
|
||||
responseCompleted (c);
|
||||
LeftOverInputStream is = t.getOriginalInputStream();
|
||||
if (!is.isEOF()) {
|
||||
t.close = true;
|
||||
@ -268,17 +286,10 @@ class ServerImpl implements TimeSource {
|
||||
} else {
|
||||
if (is.isDataBuffered()) {
|
||||
/* don't re-enable the interestops, just handle it */
|
||||
requestStarted (c);
|
||||
handle (c.getChannel(), c);
|
||||
} else {
|
||||
/* re-enable interestops */
|
||||
SelectionKey key = c.getSelectionKey();
|
||||
if (key.isValid()) {
|
||||
key.interestOps (
|
||||
key.interestOps()|SelectionKey.OP_READ
|
||||
);
|
||||
}
|
||||
c.time = getTime() + IDLE_INTERVAL;
|
||||
idleConnections.add (c);
|
||||
connsToRegister.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() {
|
||||
while (!finished) {
|
||||
try {
|
||||
ListIterator<HttpConnection> li =
|
||||
connsToRegister.listIterator();
|
||||
for (HttpConnection c : connsToRegister) {
|
||||
reRegister(c);
|
||||
}
|
||||
connsToRegister.clear();
|
||||
|
||||
/* process the events list first */
|
||||
|
||||
while (resultSize() > 0) {
|
||||
Event r;
|
||||
synchronized (lolock) {
|
||||
r = events.remove(0);
|
||||
handleEvent (r);
|
||||
List<Event> list = null;
|
||||
selector.select(1000);
|
||||
synchronized (lolock) {
|
||||
if (events.size() > 0) {
|
||||
list = events;
|
||||
events = new LinkedList<Event>();
|
||||
}
|
||||
}
|
||||
|
||||
selector.select(1000);
|
||||
if (list != null) {
|
||||
for (Event r: list) {
|
||||
handleEvent (r);
|
||||
}
|
||||
}
|
||||
|
||||
/* process the selected list now */
|
||||
|
||||
@ -327,6 +367,7 @@ class ServerImpl implements TimeSource {
|
||||
c.selectionKey = newkey;
|
||||
c.setChannel (chan);
|
||||
newkey.attach (c);
|
||||
requestStarted (c);
|
||||
allConnections.add (c);
|
||||
} else {
|
||||
try {
|
||||
@ -334,27 +375,44 @@ class ServerImpl implements TimeSource {
|
||||
boolean closed;
|
||||
SocketChannel chan = (SocketChannel)key.channel();
|
||||
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);
|
||||
} else {
|
||||
assert false;
|
||||
}
|
||||
} catch (CancelledKeyException e) {
|
||||
handleException(key, null);
|
||||
} catch (IOException e) {
|
||||
HttpConnection conn = (HttpConnection)key.attachment();
|
||||
logger.log (
|
||||
Level.FINER, "Dispatcher (2)", e
|
||||
);
|
||||
conn.close();
|
||||
handleException(key, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
// call the selector just to process the cancelled keys
|
||||
selector.selectNow();
|
||||
} catch (IOException e) {
|
||||
logger.log (Level.FINER, "Dispatcher (4)", 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)
|
||||
throws IOException
|
||||
{
|
||||
@ -363,10 +421,10 @@ class ServerImpl implements TimeSource {
|
||||
executor.execute (t);
|
||||
} catch (HttpError e1) {
|
||||
logger.log (Level.FINER, "Dispatcher (4)", e1);
|
||||
conn.close();
|
||||
closeConnection(conn);
|
||||
} catch (IOException e) {
|
||||
logger.log (Level.FINER, "Dispatcher (5)", e);
|
||||
conn.close();
|
||||
closeConnection(conn);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -390,7 +448,26 @@ class ServerImpl implements TimeSource {
|
||||
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 {
|
||||
SocketChannel chan;
|
||||
@ -450,8 +527,7 @@ class ServerImpl implements TimeSource {
|
||||
requestLine = req.requestLine();
|
||||
if (requestLine == null) {
|
||||
/* connection closed */
|
||||
connection.close();
|
||||
allConnections.remove(connection);
|
||||
closeConnection(connection);
|
||||
return;
|
||||
}
|
||||
int space = requestLine.indexOf (' ');
|
||||
@ -482,6 +558,9 @@ class ServerImpl implements TimeSource {
|
||||
if (s != null) {
|
||||
clen = Long.parseLong(s);
|
||||
}
|
||||
if (clen == 0) {
|
||||
requestCompleted (connection);
|
||||
}
|
||||
}
|
||||
ctx = contexts.findContext (protocol, uri.getPath());
|
||||
if (ctx == null) {
|
||||
@ -560,7 +639,7 @@ class ServerImpl implements TimeSource {
|
||||
|
||||
} catch (IOException e1) {
|
||||
logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
|
||||
connection.close();
|
||||
closeConnection(connection);
|
||||
} catch (NumberFormatException e3) {
|
||||
reject (Code.HTTP_BAD_REQUEST,
|
||||
requestLine, "NumberFormatException thrown");
|
||||
@ -569,7 +648,7 @@ class ServerImpl implements TimeSource {
|
||||
requestLine, "URISyntaxException thrown");
|
||||
} catch (Exception e4) {
|
||||
logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
|
||||
connection.close();
|
||||
closeConnection(connection);
|
||||
}
|
||||
}
|
||||
|
||||
@ -591,47 +670,60 @@ class ServerImpl implements TimeSource {
|
||||
rejected = true;
|
||||
logReply (code, requestStr, message);
|
||||
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 */
|
||||
allConnections.remove(connection);
|
||||
closeConnection(connection);
|
||||
}
|
||||
|
||||
void sendReply (
|
||||
int code, boolean closeNow, String text)
|
||||
{
|
||||
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) {
|
||||
s = s + "Content-Length: "+text.length()+"\r\n";
|
||||
s = s + "Content-Type: text/html\r\n";
|
||||
builder.append ("Content-Length: ")
|
||||
.append (text.length()).append ("\r\n")
|
||||
.append ("Content-Type: text/html\r\n");
|
||||
} else {
|
||||
s = s + "Content-Length: 0\r\n";
|
||||
builder.append ("Content-Length: 0\r\n");
|
||||
text = "";
|
||||
}
|
||||
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");
|
||||
rawout.write (b);
|
||||
rawout.flush();
|
||||
if (closeNow) {
|
||||
connection.close();
|
||||
closeConnection(connection);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
logger.log (Level.FINER, "ServerImpl.sendReply", e);
|
||||
connection.close();
|
||||
closeConnection(connection);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void logReply (int code, String requestStr, String text) {
|
||||
if (!logger.isLoggable(Level.FINE)) {
|
||||
return;
|
||||
}
|
||||
if (text == null) {
|
||||
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+")";
|
||||
logger.fine (message);
|
||||
}
|
||||
@ -667,6 +759,34 @@ class ServerImpl implements TimeSource {
|
||||
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
|
||||
*/
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -235,8 +235,6 @@ abstract class AsynchronousSocketChannelImpl
|
||||
|
||||
if (remoteAddress == null)
|
||||
throw new NotYetConnectedException();
|
||||
if (timeout < 0L)
|
||||
throw new IllegalArgumentException("Negative timeout");
|
||||
|
||||
boolean hasSpaceToRead = isScatteringRead || dst.hasRemaining();
|
||||
boolean shutdown = false;
|
||||
@ -342,8 +340,6 @@ abstract class AsynchronousSocketChannelImpl
|
||||
if (isOpen()) {
|
||||
if (remoteAddress == null)
|
||||
throw new NotYetConnectedException();
|
||||
if (timeout < 0L)
|
||||
throw new IllegalArgumentException("Negative timeout");
|
||||
// check and update state
|
||||
synchronized (writeLock) {
|
||||
if (writeKilled)
|
||||
|
@ -358,7 +358,7 @@ class UTF_8 extends Unicode
|
||||
private static class Encoder extends CharsetEncoder {
|
||||
|
||||
private Encoder(Charset cs) {
|
||||
super(cs, 1.1f, 4.0f);
|
||||
super(cs, 1.1f, 3.0f);
|
||||
}
|
||||
|
||||
public boolean canEncode(char c) {
|
||||
|
@ -778,6 +778,13 @@ public class ExtendedCharsets
|
||||
"csIBM500"
|
||||
});
|
||||
|
||||
charset("x-IBM833", "IBM833",
|
||||
new String[] {
|
||||
"cp833",
|
||||
"ibm833",
|
||||
"ibm-833"
|
||||
});
|
||||
|
||||
//EBCDIC DBCS-only Korean
|
||||
charset("x-IBM834", "IBM834",
|
||||
new String[] {
|
||||
|
@ -250,16 +250,16 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
||||
else return null;
|
||||
}
|
||||
|
||||
Ticket readData() throws IOException, RealmException, KrbApErrException, Asn1Exception {
|
||||
byte[] readData() throws IOException {
|
||||
int length;
|
||||
length = read(4);
|
||||
if (length > 0) {
|
||||
if (length == 0) {
|
||||
return null;
|
||||
} else {
|
||||
byte[] bytes = new byte[length];
|
||||
read(bytes, 0, length);
|
||||
Ticket ticket = new Ticket(bytes);
|
||||
return ticket;
|
||||
return bytes;
|
||||
}
|
||||
else return null;
|
||||
}
|
||||
|
||||
boolean[] readFlags() throws IOException {
|
||||
@ -328,6 +328,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
||||
}
|
||||
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 {
|
||||
PrincipalName cpname = readPrincipal(version);
|
||||
if (DEBUG)
|
||||
@ -367,17 +378,17 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC
|
||||
if (auData != null) {
|
||||
auData = new AuthorizationData(auDataEntry);
|
||||
}
|
||||
Ticket ticket = readData();
|
||||
if (DEBUG) {
|
||||
System.out.println(">>>DEBUG <CCacheInputStream>");
|
||||
if (ticket == null) {
|
||||
System.out.println("///ticket is null");
|
||||
}
|
||||
byte[] ticketData = readData();
|
||||
byte[] ticketData2 = readData();
|
||||
|
||||
try {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
*
|
||||
* 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();
|
||||
credentialsList = new Vector<Credentials> ();
|
||||
while (cis.available() > 0) {
|
||||
credentialsList.addElement(cis.readCred(version));
|
||||
Credentials cred = cis.readCred(version);
|
||||
if (cred != null) {
|
||||
credentialsList.addElement(cred);
|
||||
}
|
||||
}
|
||||
cis.close();
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ final class P11Cipher extends CipherSpi {
|
||||
// DEC: return the length of trailing padding bytes given the specified
|
||||
// padded data
|
||||
int unpad(byte[] paddedData, int len)
|
||||
throws BadPaddingException;
|
||||
throws BadPaddingException, IllegalBlockSizeException;
|
||||
}
|
||||
|
||||
private static class PKCS5Padding implements Padding {
|
||||
@ -96,9 +96,10 @@ final class P11Cipher extends CipherSpi {
|
||||
}
|
||||
|
||||
public int unpad(byte[] paddedData, int len)
|
||||
throws BadPaddingException {
|
||||
if (len < 1 || len > paddedData.length) {
|
||||
throw new BadPaddingException("Invalid pad array length!");
|
||||
throws BadPaddingException, IllegalBlockSizeException {
|
||||
if ((len < 1) || (len % blockSize != 0)) {
|
||||
throw new IllegalBlockSizeException
|
||||
("Input length must be multiples of " + blockSize);
|
||||
}
|
||||
byte padValue = paddedData[len - 1];
|
||||
if (padValue < 1 || padValue > blockSize) {
|
||||
|
@ -10,7 +10,7 @@
|
||||
*
|
||||
* 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
|
||||
* 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).
|
||||
*
|
||||
|
@ -10,7 +10,7 @@
|
||||
*
|
||||
* 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
|
||||
* 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).
|
||||
*
|
||||
|
@ -10,7 +10,7 @@
|
||||
*
|
||||
* 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
|
||||
* 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).
|
||||
*
|
||||
|
@ -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.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -1472,19 +1472,9 @@ public final class NormalizerImpl {
|
||||
}
|
||||
--remove;
|
||||
}
|
||||
} else if(value2!=0) {
|
||||
/* the composition is longer than the starter,
|
||||
* move the intermediate characters back one */
|
||||
} else if(value2!=0) { // for U+1109A, U+1109C, and U+110AB
|
||||
starterIsSupplementary=true;
|
||||
/* temporarily increment for the loop boundary */
|
||||
++starter;
|
||||
q=remove;
|
||||
r=++remove;
|
||||
while(starter<q) {
|
||||
args.source[--r]=args.source[--q];
|
||||
}
|
||||
args.source[starter]=(char)value2;
|
||||
--starter; /* undo the temporary increment */
|
||||
args.source[starter+1]=(char)value2;
|
||||
/* } else { both are on the BMP, nothing more to do */
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
<title>Nervous Text 1.1</title>
|
||||
<hr>
|
||||
<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>
|
||||
<hr>
|
||||
<a href="NervousText.java">The source.</a>
|
||||
|
@ -75,7 +75,8 @@ public class J2DBench {
|
||||
|
||||
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() {
|
||||
progoptroot = new Group("prog", "Program Options");
|
||||
@ -176,6 +177,8 @@ public class J2DBench {
|
||||
public static void main(String argv[]) {
|
||||
init();
|
||||
TestEnvironment.init();
|
||||
Result.init();
|
||||
|
||||
Destinations.init();
|
||||
GraphicsTests.init();
|
||||
RenderTests.init();
|
||||
@ -323,7 +326,7 @@ public class J2DBench {
|
||||
} else if (type.equalsIgnoreCase("m")) {
|
||||
multiplyWith = 60;
|
||||
} else {
|
||||
System.out.println("Invalid \"-loop\" option specified.");
|
||||
System.err.println("Invalid \"-loop\" option specified.");
|
||||
usage(1);
|
||||
}
|
||||
|
||||
@ -331,32 +334,20 @@ public class J2DBench {
|
||||
try {
|
||||
val = Integer.parseInt(argv[i].substring(0, argv[i].length() - 1));
|
||||
} catch(Exception e) {
|
||||
System.out.println("Invalid \"-loop\" option specified.");
|
||||
System.err.println("Invalid \"-loop\" option specified.");
|
||||
usage(1);
|
||||
}
|
||||
|
||||
requiredLoopTime = val * multiplyWith * 1000;
|
||||
}
|
||||
|
||||
} else if (arg.length() > 7 &&
|
||||
arg.substring(0, 7).equalsIgnoreCase("-report"))
|
||||
{
|
||||
for (int j = 7; j < arg.length(); j++) {
|
||||
char c = arg.charAt(j);
|
||||
switch (c) {
|
||||
case 'N': Result.unitScale = Result.UNITS_WHOLE; break;
|
||||
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 if (arg.length() > 8 &&
|
||||
arg.substring(0, 8).equalsIgnoreCase("-report:"))
|
||||
{
|
||||
String error = Result.parseRateOpt(arg.substring(8));
|
||||
if (error != null) {
|
||||
System.err.println("Invalid rate: "+error);
|
||||
usage(1);
|
||||
}
|
||||
} else {
|
||||
String reason = Group.root.setOption(arg);
|
||||
@ -411,7 +402,7 @@ public class J2DBench {
|
||||
writer.flush();
|
||||
} catch(IOException ioe) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -466,7 +457,7 @@ public class J2DBench {
|
||||
|
||||
} while(J2DBench.looping);
|
||||
|
||||
if(J2DBench.looping) {
|
||||
if (J2DBench.looping) {
|
||||
writer.println("</html>");
|
||||
writer.flush();
|
||||
writer.close();
|
||||
|
@ -170,7 +170,7 @@ public abstract class Option extends Node implements Modifier {
|
||||
updateGUI();
|
||||
jcb.addItemListener(new ItemListener() {
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() == e.SELECTED) {
|
||||
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||
JComboBox jcb = (JComboBox) e.getItemSelectable();
|
||||
value = jcb.getSelectedIndex();
|
||||
if (J2DBench.verbose.isEnabled()) {
|
||||
@ -261,7 +261,7 @@ public abstract class Option extends Node implements Modifier {
|
||||
updateGUI();
|
||||
jcb.addItemListener(new ItemListener() {
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
value = (e.getStateChange() == e.SELECTED);
|
||||
value = (e.getStateChange() == ItemEvent.SELECTED);
|
||||
if (J2DBench.verbose.isEnabled()) {
|
||||
System.out.println(getOptionString());
|
||||
}
|
||||
@ -569,8 +569,6 @@ public abstract class Option extends Node implements Modifier {
|
||||
}
|
||||
|
||||
public String setValueFromString(String value) {
|
||||
int prev = 0;
|
||||
int next = 0;
|
||||
int enabled = 0;
|
||||
StringTokenizer st = new StringTokenizer(value, ",");
|
||||
while (st.hasMoreTokens()) {
|
||||
@ -588,7 +586,6 @@ public abstract class Option extends Node implements Modifier {
|
||||
if (s != null) {
|
||||
return "Bad value in list ("+s+")";
|
||||
}
|
||||
prev = next+1;
|
||||
}
|
||||
this.enabled = enabled;
|
||||
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 {
|
||||
private Boolean list[];
|
||||
private int index;
|
||||
|
@ -35,23 +35,199 @@ import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class Result {
|
||||
public static final int UNITS_WHOLE = 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 RATE_UNKNOWN = 0;
|
||||
|
||||
public static final int SECONDS_WHOLE = 0;
|
||||
public static final int SECONDS_MILLIS = 1;
|
||||
public static final int SECONDS_MICROS = 2;
|
||||
public static final int SECONDS_NANOS = 3;
|
||||
public static final int SECONDS_AUTO = 4;
|
||||
public static final int WORK_OPS = 1;
|
||||
public static final int WORK_UNITS = 2;
|
||||
public static final int WORK_THOUSANDS = 4;
|
||||
public static final int WORK_MILLIONS = 6;
|
||||
public static final int WORK_AUTO = 8;
|
||||
|
||||
public static int unitScale = UNITS_WHOLE;
|
||||
public static int timeScale = SECONDS_WHOLE;
|
||||
public static boolean useUnits = true;
|
||||
public static boolean invertRate = false;
|
||||
public static final int TIME_SECONDS = 10;
|
||||
public static final int TIME_MILLIS = 11;
|
||||
public static final int TIME_MICROS = 12;
|
||||
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";
|
||||
Test test;
|
||||
@ -157,69 +333,76 @@ public class Result {
|
||||
}
|
||||
|
||||
public String getAverageString() {
|
||||
double units = (useUnits ? getTotalUnits() : getTotalReps());
|
||||
int timeScale = timeOpt.getIntValue();
|
||||
int workScale = workOpt.getIntValue();
|
||||
boolean invertRate = rateOpt.getBooleanValue();
|
||||
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) {
|
||||
double rate = time / units;
|
||||
String prefix = "";
|
||||
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;
|
||||
double rate = time / work;
|
||||
if (timeScale == TIME_AUTO) {
|
||||
if (rate < 1.0) {
|
||||
rate *= 1000.0;
|
||||
prefix = "m";
|
||||
timeprefix = "m";
|
||||
if (rate < 1.0) {
|
||||
rate *= 1000.0;
|
||||
prefix = "u";
|
||||
timeprefix = "u";
|
||||
if (rate < 1.0) {
|
||||
rate *= 1000.0;
|
||||
prefix = "n";
|
||||
timeprefix = "n";
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return rate+" "+prefix+"secs/"+(useUnits ? unitname : "op");
|
||||
return rate+" "+timeprefix+"secs/"+workprefix+workname;
|
||||
} else {
|
||||
double rate = units / (time / 1000.0);
|
||||
String prefix = "";
|
||||
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:
|
||||
double rate = work / time;
|
||||
if (workScale == WORK_AUTO) {
|
||||
if (rate > 1000.0) {
|
||||
rate /= 1000.0;
|
||||
prefix = "K";
|
||||
workprefix = "K";
|
||||
if (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";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,8 @@ public class J2DAnalyzer {
|
||||
"the following result sets are combined into a group");
|
||||
out.println(" -NoGroup "+
|
||||
"the following result sets stand on their own");
|
||||
out.println(" -ShowUncontested "+
|
||||
"show results even when only result set has a result");
|
||||
out.println(" -Graph "+
|
||||
"graph the results visually (using lines of *'s)");
|
||||
out.println(" -Best "+
|
||||
@ -83,6 +85,7 @@ public class J2DAnalyzer {
|
||||
public static void main(String argv[]) {
|
||||
boolean gavehelp = false;
|
||||
boolean graph = false;
|
||||
boolean ignoreuncontested = true;
|
||||
if (argv.length > 0 && argv[0].equalsIgnoreCase("-html")) {
|
||||
String newargs[] = new String[argv.length-1];
|
||||
System.arraycopy(argv, 1, newargs, 0, newargs.length);
|
||||
@ -97,6 +100,8 @@ public class J2DAnalyzer {
|
||||
results.add(groupHolder);
|
||||
} else if (arg.equalsIgnoreCase("-NoGroup")) {
|
||||
groupHolder = null;
|
||||
} else if (arg.equalsIgnoreCase("-ShowUncontested")) {
|
||||
ignoreuncontested = false;
|
||||
} else if (arg.equalsIgnoreCase("-Graph")) {
|
||||
graph = true;
|
||||
} else if (arg.equalsIgnoreCase("-Best")) {
|
||||
@ -171,18 +176,23 @@ public class J2DAnalyzer {
|
||||
String key = keys[k];
|
||||
ResultHolder rh = base.getResultByKey(key);
|
||||
double score = rh.getScore();
|
||||
System.out.println(rh.getShortKey()+":");
|
||||
double maxscore = score;
|
||||
if (graph) {
|
||||
for (int i = 0; i < numsets; i++) {
|
||||
ResultSetHolder rsh =
|
||||
(ResultSetHolder) results.elementAt(i);
|
||||
ResultHolder rh2 = rsh.getResultByKey(key);
|
||||
if (rh2 != null) {
|
||||
int numcontesting = 0;
|
||||
for (int i = 0; i < numsets; i++) {
|
||||
ResultSetHolder rsh =
|
||||
(ResultSetHolder) results.elementAt(i);
|
||||
ResultHolder rh2 = rsh.getResultByKey(key);
|
||||
if (rh2 != null) {
|
||||
if (graph) {
|
||||
maxscore = Math.max(maxscore, rh2.getBestScore());
|
||||
}
|
||||
numcontesting++;
|
||||
}
|
||||
}
|
||||
if (ignoreuncontested && numcontesting < 2) {
|
||||
continue;
|
||||
}
|
||||
System.out.println(rh.getShortKey()+":");
|
||||
for (int i = 0; i < numsets; i++) {
|
||||
ResultSetHolder rsh = (ResultSetHolder) results.elementAt(i);
|
||||
System.out.print(rsh.getTitle()+": ");
|
||||
|
@ -38,6 +38,8 @@ import java.awt.RenderingHints;
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import j2dbench.Destinations;
|
||||
@ -74,6 +76,7 @@ public abstract class GraphicsTests extends Test {
|
||||
static Option animList;
|
||||
static Option sizeList;
|
||||
static Option compRules;
|
||||
static Option transforms;
|
||||
static Option doExtraAlpha;
|
||||
static Option doXor;
|
||||
static Option doClipping;
|
||||
@ -167,6 +170,29 @@ public abstract class GraphicsTests extends Test {
|
||||
j, rulenames, rules, rulenames,
|
||||
ruledescs, (1 << defrule));
|
||||
((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 =
|
||||
new Option.Toggle(groptroot, "extraalpha",
|
||||
"Render with an \"extra alpha\" of 0.125",
|
||||
@ -200,6 +226,7 @@ public abstract class GraphicsTests extends Test {
|
||||
int orgX, orgY;
|
||||
int initX, initY;
|
||||
int maxX, maxY;
|
||||
double pixscale;
|
||||
}
|
||||
|
||||
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) {
|
||||
Context ctx = createContext();
|
||||
initContext(env, ctx);
|
||||
result.setUnits(pixelsTouched(ctx));
|
||||
result.setUnits((int) (ctx.pixscale * pixelsTouched(ctx)));
|
||||
result.setUnitName("pixel");
|
||||
return ctx;
|
||||
}
|
||||
@ -232,6 +259,9 @@ public abstract class GraphicsTests extends Test {
|
||||
ctx.graphics = env.getGraphics();
|
||||
int w = env.getWidth();
|
||||
int h = env.getHeight();
|
||||
ctx.size = env.getIntValue(sizeList);
|
||||
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
||||
ctx.pixscale = 1.0;
|
||||
if (hasGraphics2D) {
|
||||
Graphics2D g2d = (Graphics2D) ctx.graphics;
|
||||
AlphaComposite ac = (AlphaComposite) env.getModifier(compRules);
|
||||
@ -251,11 +281,14 @@ public abstract class GraphicsTests extends Test {
|
||||
p.addPoint(0, 0);
|
||||
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,
|
||||
env.getModifier(renderHint));
|
||||
}
|
||||
ctx.size = env.getIntValue(sizeList);
|
||||
ctx.outdim = getOutputSize(ctx.size, ctx.size);
|
||||
switch (env.getIntValue(animList)) {
|
||||
case 0:
|
||||
ctx.animate = false;
|
||||
@ -290,4 +323,201 @@ public abstract class GraphicsTests extends Test {
|
||||
graphics.dispose();
|
||||
((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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -454,7 +454,7 @@ public abstract class TextTests extends Test {
|
||||
taaNames, taaHints,
|
||||
taaNames, taaNames,
|
||||
0x1);
|
||||
((Option.ObjectList) taaList).setNumRows(2);
|
||||
((Option.ObjectList) taaList).setNumRows(6);
|
||||
// add special TextAAOpt for backwards compatibility with
|
||||
// older options files
|
||||
new TextAAOpt();
|
||||
@ -707,3 +707,4 @@ public abstract class TextTests extends Test {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,5 +31,9 @@ disabledMechanisms = {
|
||||
CKM_SHA256_RSA_PKCS
|
||||
CKM_SHA384_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
|
||||
}
|
||||
|
||||
|
@ -132,14 +132,17 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
|
||||
|
||||
in_buf = (jbyte *) malloc(this_len);
|
||||
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;
|
||||
}
|
||||
(*env)->GetByteArrayRegion(env, this_buf, this_off, this_len, in_buf);
|
||||
out_buf = (jbyte *) malloc(len);
|
||||
if (out_buf == 0) {
|
||||
free(in_buf);
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
if (len != 0)
|
||||
JNU_ThrowOutOfMemoryError(env, 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);
|
||||
in_buf = (jbyte *) malloc(this_len);
|
||||
if (in_buf == 0) {
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
if (this_len != 0)
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
return 0;
|
||||
}
|
||||
(*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);
|
||||
if (out_buf == 0) {
|
||||
free(in_buf);
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
if (len != 0)
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,8 @@ Java_java_util_zip_Inflater_inflateBytes(JNIEnv *env, jobject this, jlong addr,
|
||||
|
||||
in_buf = (jbyte *) malloc(in_len);
|
||||
if (in_buf == 0) {
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
if (in_len != 0)
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
return 0;
|
||||
}
|
||||
(*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);
|
||||
if (out_buf == 0) {
|
||||
free(in_buf);
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
if (len != 0)
|
||||
JNU_ThrowOutOfMemoryError(env, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -314,7 +314,7 @@ findEND(jzfile *zip, void *endbuf)
|
||||
if (pos < 0) {
|
||||
/* Pretend there are some NUL bytes before start of file */
|
||||
off = -pos;
|
||||
memset(buf, '\0', off);
|
||||
memset(buf, '\0', (size_t)off);
|
||||
}
|
||||
|
||||
if (readFullyAt(zfd, buf + off, sizeof(buf) - off,
|
||||
@ -426,7 +426,7 @@ static int
|
||||
isMetaName(const char *name, int length)
|
||||
{
|
||||
const char *s;
|
||||
if (length < sizeof("META-INF/") - 1)
|
||||
if (length < (int)sizeof("META-INF/") - 1)
|
||||
return 0;
|
||||
for (s = "META-INF/"; *s != '\0'; s++) {
|
||||
char c = *name++;
|
||||
@ -912,7 +912,7 @@ readCENHeader(jzfile *zip, jlong cenpos, jint bufsize)
|
||||
ZFILE zfd = zip->zfd;
|
||||
char *cen;
|
||||
if (bufsize > zip->len - cenpos)
|
||||
bufsize = zip->len - cenpos;
|
||||
bufsize = (jint)(zip->len - cenpos);
|
||||
if ((cen = malloc(bufsize)) == NULL) goto Catch;
|
||||
if (readFullyAt(zfd, cen, bufsize, cenpos) == -1) goto Catch;
|
||||
censize = CENSIZE(cen);
|
||||
@ -1256,6 +1256,9 @@ ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry)
|
||||
* file had been previously locked with ZIP_Lock(). Returns the
|
||||
* 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.
|
||||
*
|
||||
* The current implementation does not support reading an entry that
|
||||
* has the size bigger than 2**32 bytes in ONE invocation.
|
||||
*/
|
||||
jint
|
||||
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)
|
||||
return 0;
|
||||
if (len > entry_size - pos)
|
||||
len = entry_size - pos;
|
||||
len = (jint)(entry_size - pos);
|
||||
|
||||
/* Get file offset to start reading data */
|
||||
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
|
||||
* so that it can be dynamically loaded by the runtime if the zip library
|
||||
* is found.
|
||||
*
|
||||
* The current implementation does not support reading an entry that
|
||||
* has the size bigger than 2**32 bytes in ONE invocation.
|
||||
*/
|
||||
jboolean
|
||||
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];
|
||||
jlong pos = 0;
|
||||
jlong count = entry->csize;
|
||||
jboolean status;
|
||||
|
||||
*msg = 0; /* Reset error message */
|
||||
|
||||
@ -1330,10 +1335,10 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
||||
}
|
||||
|
||||
strm.next_out = buf;
|
||||
strm.avail_out = entry->size;
|
||||
strm.avail_out = (uInt)entry->size;
|
||||
|
||||
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);
|
||||
n = ZIP_Read(zip, entry, pos, tmp, n);
|
||||
ZIP_Unlock(zip);
|
||||
@ -1368,12 +1373,16 @@ InflateFully(jzfile *zip, jzentry *entry, void *buf, char **msg)
|
||||
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
|
||||
ZIP_FindEntry(jzfile *zip, char *name, jint *sizeP, jint *nameLenP)
|
||||
{
|
||||
jzentry *entry = ZIP_GetEntry(zip, name, 0);
|
||||
if (entry) {
|
||||
*sizeP = entry->size;
|
||||
*sizeP = (jint)entry->size;
|
||||
*nameLenP = strlen(entry->name);
|
||||
}
|
||||
return entry;
|
||||
|
@ -75,7 +75,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
|
||||
deflateEnd(&stream);
|
||||
return err == Z_OK ? Z_BUF_ERROR : err;
|
||||
}
|
||||
*destLen = stream.total_out;
|
||||
*destLen = (uLong)stream.total_out;
|
||||
|
||||
err = deflateEnd(&stream);
|
||||
return err;
|
||||
|
@ -78,7 +78,7 @@ int ZEXPORT uncompress (dest, destLen, source, sourceLen)
|
||||
return Z_DATA_ERROR;
|
||||
return err;
|
||||
}
|
||||
*destLen = stream.total_out;
|
||||
*destLen = (uLong)stream.total_out;
|
||||
|
||||
err = inflateEnd(&stream);
|
||||
return err;
|
||||
|
@ -57,9 +57,12 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer {
|
||||
|
||||
private native void run(String title, int mode, String dir, String file,
|
||||
FilenameFilter filter, boolean isMultipleMode);
|
||||
|
||||
private native void quit();
|
||||
|
||||
@Override
|
||||
public native void toFront();
|
||||
|
||||
|
||||
/**
|
||||
* Called exclusively by the native C code.
|
||||
*/
|
||||
|
@ -150,6 +150,8 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
|
||||
|
||||
void updateChildrenSizes() {
|
||||
super.updateChildrenSizes();
|
||||
int height = getMenuBarHeight();
|
||||
|
||||
// XWindow.reshape calls XBaseWindow.xSetBounds, which acquires
|
||||
// the AWT lock, so we have to acquire the AWT lock here
|
||||
// before getStateLock() to avoid a deadlock with the Toolkit thread
|
||||
@ -159,7 +161,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer {
|
||||
synchronized(getStateLock()) {
|
||||
int width = dimensions.getClientSize().width;
|
||||
if (menubarPeer != null) {
|
||||
menubarPeer.reshape(0, 0, width, getMenuBarHeight());
|
||||
menubarPeer.reshape(0, 0, width, height);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
|
@ -217,15 +217,18 @@ static int ParseLocale(int cat, char ** std_language, char ** std_script,
|
||||
/* Normalize the language name */
|
||||
if (std_language != NULL) {
|
||||
*std_language = "en";
|
||||
if (language != NULL) {
|
||||
mapLookup(language_names, language, std_language);
|
||||
if (language != NULL && mapLookup(language_names, language, std_language) == 0) {
|
||||
*std_language = malloc(strlen(language)+1);
|
||||
strcpy(*std_language, language);
|
||||
}
|
||||
}
|
||||
|
||||
/* Normalize the country name */
|
||||
if (std_country != NULL && country != NULL) {
|
||||
*std_country = country;
|
||||
mapLookup(country_names, country, std_country);
|
||||
if (mapLookup(country_names, country, std_country) == 0) {
|
||||
*std_country = malloc(strlen(country)+1);
|
||||
strcpy(*std_country, country);
|
||||
}
|
||||
}
|
||||
|
||||
/* Normalize the script and variant name. Note that we only use
|
||||
|
@ -87,7 +87,7 @@
|
||||
"zh", "zh_CN",
|
||||
#ifdef __linux__
|
||||
"bokmal", "nb_NO",
|
||||
"bokm\u00e5l", "nb_NO",
|
||||
"bokm\xE5l", "nb_NO",
|
||||
"catalan", "ca_ES",
|
||||
"croatian", "hr_HR",
|
||||
"czech", "cs_CZ",
|
||||
@ -144,203 +144,16 @@
|
||||
static char *language_names[] = {
|
||||
"C", "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",
|
||||
"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",
|
||||
"hi", "hi",
|
||||
"ho", "ho",
|
||||
"hr", "hr",
|
||||
#ifdef __linux__
|
||||
"hs", "en", // used on Linux, not clear what it stands for
|
||||
#endif
|
||||
"ht", "ht",
|
||||
"hu", "hu",
|
||||
"hy", "hy",
|
||||
"hz", "hz",
|
||||
"ia", "ia",
|
||||
"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
|
||||
"si", "si",
|
||||
"sk", "sk",
|
||||
"sl", "sl",
|
||||
"sm", "sm",
|
||||
"sn", "sn",
|
||||
"so", "so",
|
||||
"sq", "sq",
|
||||
"sr", "sr",
|
||||
"ss", "ss",
|
||||
"st", "st",
|
||||
"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__
|
||||
"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",
|
||||
"croatian", "hr",
|
||||
"czech", "cs",
|
||||
@ -375,493 +188,6 @@ static char *language_names[] = {
|
||||
"japanese", "ja",
|
||||
"korean", "ko",
|
||||
#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.
|
||||
*/
|
||||
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__
|
||||
"RN", "US", // used on Linux, not clear what it stands for
|
||||
#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
|
||||
"ZA", "ZA",
|
||||
"ZM", "ZM",
|
||||
"ZW", "ZW",
|
||||
"",
|
||||
};
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <netdb.h>
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
#include <values.h>
|
||||
|
||||
#ifdef __solaris__
|
||||
#include <sys/sockio.h>
|
||||
@ -75,17 +76,17 @@ getnameinfo_f getnameinfo_ptr = NULL;
|
||||
#endif
|
||||
|
||||
#ifdef __solaris__
|
||||
static int init_max_buf;
|
||||
static int init_tcp_max_buf, init_udp_max_buf;
|
||||
static int tcp_max_buf;
|
||||
static int udp_max_buf;
|
||||
|
||||
/*
|
||||
* Get the specified parameter from the specified driver. The value
|
||||
* 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
|
||||
getParam(char *driver, char *param, int dflt)
|
||||
getParam(char *driver, char *param)
|
||||
{
|
||||
struct strioctl stri;
|
||||
char buf [64];
|
||||
@ -94,7 +95,7 @@ getParam(char *driver, char *param, int dflt)
|
||||
|
||||
s = open (driver, O_RDWR);
|
||||
if (s < 0) {
|
||||
return dflt;
|
||||
return -1;
|
||||
}
|
||||
strncpy (buf, param, sizeof(buf));
|
||||
stri.ic_cmd = ND_GET;
|
||||
@ -102,13 +103,64 @@ getParam(char *driver, char *param, int dflt)
|
||||
stri.ic_dp = buf;
|
||||
stri.ic_len = sizeof(buf);
|
||||
if (ioctl (s, I_STR, &stri) < 0) {
|
||||
value = dflt;
|
||||
value = -1;
|
||||
} else {
|
||||
value = atoi(buf);
|
||||
}
|
||||
close (s);
|
||||
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
|
||||
|
||||
#ifdef __linux__
|
||||
@ -1148,7 +1200,6 @@ NET_GetSockOpt(int fd, int level, int opt, void *result,
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Wrapper for setsockopt system routine - performs any
|
||||
* 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__
|
||||
if (level == SOL_SOCKET) {
|
||||
if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
|
||||
int sotype, arglen;
|
||||
int sotype=0, arglen;
|
||||
int *bufsize, maxbuf;
|
||||
int ret;
|
||||
|
||||
@ -1223,18 +1274,37 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
|
||||
|
||||
/* 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);
|
||||
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype,
|
||||
&arglen) < 0) {
|
||||
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;
|
||||
bufsize = (int *)arg;
|
||||
if (*bufsize > maxbuf) {
|
||||
|
@ -607,6 +607,7 @@ gboolean gtk2_load()
|
||||
fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new");
|
||||
fp_gtk_viewport_new = dl_symbol("gtk_viewport_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_frame_new = dl_symbol("gtk_frame_new");
|
||||
|
||||
|
@ -749,6 +749,7 @@ int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
|
||||
int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
|
||||
GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
|
||||
void (*fp_gtk_widget_destroy)(GtkWidget *widget);
|
||||
void (*fp_gtk_window_present)(GtkWindow *window);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -80,6 +80,28 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
|
||||
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)
|
||||
*/
|
||||
|
@ -33,6 +33,14 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run
|
||||
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
/*
|
||||
* Class: sun_awt_X11_GtkFileDialogPeer
|
||||
* Method: toFront
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user