From a5c0f6fe8787df483b1fe914e13bc6576bdd3342 Mon Sep 17 00:00:00 2001
From: Gary Benson
Date: Mon, 15 Jan 2007 10:25:38 +0000
Subject: [PATCH] URLClassLoader.java: Removed.
2007-01-15 Gary Benson
* java/net/URLClassLoader.java: Removed.
* gnu/java/net/loader/Load_gcjlib.java: New file.
* gnu/gcj/runtime/BootClassLoader.java: Ensure core
URL handler is present in static executables.
* sources.am, Makefile.in: Rebuilt.
From-SVN: r120791
---
libjava/ChangeLog | 8 +
libjava/Makefile.in | 3 +-
.../lib/gnu/gcj/runtime/BootClassLoader.class | Bin 1561 -> 1706 bytes
.../java/net/loader/Load_gcjlib$SoResource.class | Bin 0 -> 1102 bytes
.../lib/gnu/java/net/loader/Load_gcjlib.class | Bin 0 -> 1645 bytes
.../classpath/lib/java/net/URLClassLoader$1.class | Bin 1022 -> 1022 bytes
.../classpath/lib/java/net/URLClassLoader$2.class | Bin 908 -> 908 bytes
.../lib/java/net/URLClassLoader$CoreResource.class | Bin 1826 -> 0 bytes
.../java/net/URLClassLoader$CoreURLLoader.class | Bin 1344 -> 0 bytes
.../lib/java/net/URLClassLoader$FileResource.class | Bin 1739 -> 0 bytes
.../java/net/URLClassLoader$FileURLLoader.class | Bin 1278 -> 0 bytes
.../lib/java/net/URLClassLoader$JarURLLoader.class | Bin 3418 -> 0 bytes
.../java/net/URLClassLoader$JarURLResource.class | Bin 2202 -> 0 bytes
.../java/net/URLClassLoader$RemoteResource.class | Bin 1152 -> 0 bytes
.../java/net/URLClassLoader$RemoteURLLoader.class | Bin 1724 -> 0 bytes
.../lib/java/net/URLClassLoader$Resource.class | Bin 1217 -> 0 bytes
.../lib/java/net/URLClassLoader$SoResource.class | Bin 1097 -> 0 bytes
.../lib/java/net/URLClassLoader$SoURLLoader.class | Bin 1625 -> 0 bytes
.../lib/java/net/URLClassLoader$URLLoader.class | Bin 1354 -> 0 bytes
.../classpath/lib/java/net/URLClassLoader.class | Bin 14234 -> 14476 bytes
libjava/gnu/gcj/runtime/BootClassLoader.h | 3 +
libjava/gnu/gcj/runtime/BootClassLoader.java | 8 +-
.../gnu/java/net/loader/Load_gcjlib$SoResource.h | 50 +
libjava/gnu/java/net/loader/Load_gcjlib.h | 58 +
libjava/gnu/java/net/loader/Load_gcjlib.java | 77 ++
libjava/java/net/URLClassLoader.h | 25 +-
libjava/java/net/URLClassLoader.java | 1448 --------------------
libjava/sources.am | 3 +-
28 files changed, 224 insertions(+), 1459 deletions(-)
create mode 100644 libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib$SoResource.class
create mode 100644 libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$CoreResource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$CoreURLLoader.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$FileResource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$FileURLLoader.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$JarURLLoader.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$JarURLResource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$RemoteResource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$RemoteURLLoader.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$Resource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$SoResource.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$SoURLLoader.class
delete mode 100644 libjava/classpath/lib/java/net/URLClassLoader$URLLoader.class
create mode 100644 libjava/gnu/java/net/loader/Load_gcjlib$SoResource.h
create mode 100644 libjava/gnu/java/net/loader/Load_gcjlib.h
create mode 100644 libjava/gnu/java/net/loader/Load_gcjlib.java
delete mode 100644 libjava/java/net/URLClassLoader.java
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index af4a1a7..ad6c1fb 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,11 @@
+2007-01-15 Gary Benson
+
+ * java/net/URLClassLoader.java: Removed.
+ * gnu/java/net/loader/Load_gcjlib.java: New file.
+ * gnu/gcj/runtime/BootClassLoader.java: Ensure core
+ URL handler is present in static executables.
+ * sources.am, Makefile.in: Rebuilt.
+
2007-01-14 H.J. Lu
* Makefile.am (libgcj_la_LDFLAGS): Add
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 0f052e6..e035429 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -1922,6 +1922,7 @@ classpath/gnu/java/net/loader/FileResource.java \
classpath/gnu/java/net/loader/FileURLLoader.java \
classpath/gnu/java/net/loader/JarURLLoader.java \
classpath/gnu/java/net/loader/JarURLResource.java \
+gnu/java/net/loader/Load_gcjlib.java \
classpath/gnu/java/net/loader/RemoteResource.java \
classpath/gnu/java/net/loader/RemoteURLLoader.java \
classpath/gnu/java/net/loader/Resource.java \
@@ -4402,7 +4403,7 @@ classpath/java/net/SocketTimeoutException.java \
classpath/java/net/URI.java \
classpath/java/net/URISyntaxException.java \
classpath/java/net/URL.java \
-java/net/URLClassLoader.java \
+classpath/java/net/URLClassLoader.java \
classpath/java/net/URLConnection.java \
classpath/java/net/URLDecoder.java \
classpath/java/net/URLEncoder.java \
diff --git a/libjava/classpath/lib/gnu/gcj/runtime/BootClassLoader.class b/libjava/classpath/lib/gnu/gcj/runtime/BootClassLoader.class
index 1635a30404009ad59a0701f9777d1e354cba70ec..857b7a17cbae26fe6ebc9f2d9185e45cd236f5bc 100644
GIT binary patch
literal 1706
zcmah}T~8ZF6g@*=?JP?Ph7d{tFhSOUZK
zFqT{G=AP8gyuC;YlxcaPTQcc-#wuhoP2!qI4)*HLaRYwPK2rUyArl;1cy!
zndNGh5}
zNnon0t>Hy4lx|8BvkOG2$;+_CKCAaOT2D8!i>xTzWBN_WPpD=3nWNVN(;b5m@}J=d
zGPK7oHw~VaTHsoq{&9ok@Q+*A?s9Gwu*y&;6jGNhmDE%_4!Uk8)ps1+#VvO2i!ct-
zTh$3`Z1){JFt)SCmXYa?y(U{)_&j2GK9b3{Y^k>PxjXZ5rpJ{txEl^OQDavb+>_Ji
zdhnR@#g7BFlQ44E<91VO&lG&6fQGsR}A0s{qe3bY`mNA
zJNGLw4DM1{9HCS$oj=5da%s|x?{V>YX{t2cSDHD()kDm^!BFEp7N1v+@cEzb2rzP!jsXWacLvy0Mc!=AL%3l~ZvwMv8Kj_}DeNjEs&q~$g(cQJ|nMglTaZLV#hQK4^s(4!HD%F$AY=$988JI>$2m=4aC=m`>i@rda?F_m{)Zwo2aXk}8Cy~qv$-}tAfH3YdFhfHW_Y~tE
zhABVese
zwz8|60e8QDDSl+-_(kkDijw$79
zQobsgfMXV^P%KBiyM{xn;=at?bzTx>nWM3>9#sN>chm%
zfMwS%7>iE1$fc=fB^|;NL%UZ8TNtbFFG*j~v5Ez%w?8E%&^A2kOSYPbj=Cl%6&QUx
z7`?{o3edk1L9#>i^o>@vpNg|ngyYfX6STymZE8J3bUWG+?P`d|PSJgW-XpYR&oHo^
zIK|Mf?*tIR5FXI40b>Ml-vjI+@Ln{N6~VCQ9mO~vVS-kmzmg1bvelJB0uKpk6irCN
zAS6byDY`!a
zG>s;v9h2xl8eN$2F^Scf#K@uKWk_t;gWqKdi541poj5
diff --git a/libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib$SoResource.class b/libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib$SoResource.class
new file mode 100644
index 0000000000000000000000000000000000000000..86c42ea8020e2017c4b286c1279b730e4479ac97
GIT binary patch
literal 1102
zcmah{%Wl(96rAfk+&E4eD72vz`k+8w)P)rgR2ET?f-DdXWQ&~iDs`3Gk>emfiUmke
zBo=%CABC9fyj&EimTaGU9y4>#Ie-5C`VHVQ4s~b(mA*H&&YVw<<;l<*_|Az8EStZN
z{odKY?e4ezV>$B2K~L&P3T!RQpJfOn#=$@!Z_g1w9NTq)^b6N>!y|zwC3_h_jIe&W
zw%id&HvAK5Ac3q29j3tEaujkYAQ{xloeU_$L<(tvRonICoAG&92JfBjKnh&9{hl-E
zIDxCqQ)eiVs}#msqOLaSnZWK^u5^}UgfTLNoQOI6z2dBnhN+|jWmV8$D6;x4vH<`1RU@I6oV6pX;;j7*K1&056j
z26k~z$DY7?9BGkZ;wIKPiXQOO63+iL=V{n3jgt|TehRs
zdgZFA6k=;|pk(k~Ey@oX17|dn?8AY;_7(dRVa^s3hg^dM*PSC*yFe?+SH}uH8Cvh4
zMe%H<`V&T__5-b5l}r@tl+2S{gmM%6H^0uxVE>u=ACU36&8AkErWqM56$hJf&G7^giwrLf`=&@~gDhqB9Y+
zFLRtUeLyq9Fe6)=VhEH_o>p4Z%9Ikb5HTr!9V<>vi#1dtiYiILUML}tV4?UAAUpA8
literal 0
HcmV?d00001
diff --git a/libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib.class b/libjava/classpath/lib/gnu/java/net/loader/Load_gcjlib.class
new file mode 100644
index 0000000000000000000000000000000000000000..3293b2e59e7c578a976c1a50f872f709a356f18e
GIT binary patch
literal 1645
zcmb7ETTc@~7(D|mrOOIf5h-#j7oite@1g~~G$EK&9;lG$ijNi;|ON&+FL$@>YeRIy4?>jR;e|`N9;1-_6(8DlYbsEM2f5#0+_=fHB
zitvmg{k^H02ews?A;K`(EopbBDD#BJ&{q@oTRBJ-WhU)3yoTdjhr%e;xF;$_tGuOB
z@|3)0IhMb{@P4V-A||kc&Fl35F|S}+!B7?DlzdO{!!7PqY~dBSSrhpVjE?vwH+|PT
z>dZJdOYbp63T{Pc=*57J82U9_!cYu@40=leQR^7SWrkQ)_?wn37)F-T0k_SaszJ<_
zQ_aW0a7D)mt}+ZeZb5jyL@&7w&!j!$!H&8x8=mDK8E3J)hHFU1Fc!AtA2rl5j_VBC
zzU5Scsxnl=S}H9al~iYFm-u%HuhSQ{Po8g5M-+VwLq*FG+l|Ar@Luw=EJ>p1n%v&w
zo+anuV#Kdm^`9l`46;?%EAs?8K4^MAHze2OgDnI
zCeD}KCa8v0gu86;WyC!b(80|2b*2`>Nu
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$2.class b/libjava/classpath/lib/java/net/URLClassLoader$2.class
index 64c9e24573b0d59374d7712803576b5f5d59b436..741aa3bf03ffe0692c4c8625f7e1df044691fb13 100644
GIT binary patch
delta 29
kcmeBS?_uA-$jrnXJeirO>+}R5Ph?jy_Q&PER*mVSr7*#S@xRG1Vo$=VF!T>!8Rg3uBC~*)Oy#oS^>X;
zUy=ihYT2<`t*U1=q(5Eue7Pc9UfZur9SMQ#AkU7MK%!1T0%O&t+cul^hbDuR
z$nIKOWKUNWgk!l)b2ad7w@GIs*KF4g76fkP!s7v4h+fF7v>&BEU%o~e%U(mKFoc5!
zk{A;>GZ?*xoUbJzaLB+gMtGGrpkq{EylT7hPJ3%Z`fJvPqpsrBEvIJrHt!>2BG|NB
zlT)}<>6oMVEnKIu+!09fV3)0Si{_;m=fAe;
zdyjc;O3@V*ZqKUYJAq7>)3W9K;Q3p!LFMRnu7DueY)|s{dQpuuoBX2E?B~yOvZ~&=
zC7b7Zl5)fG~6;j%3jB9UjnCyix4jnKh6SPW@&q*PoIf!`9=EL3w*hY^0Vq5
zmezN1bGbP40=FL&e^psCn8MwNZ-#CS?N8F@FPxz7l=c=`?Qi6?e=w*0t9WFU7V{C0
hEGcylD}yz
zm-xXSWqfYik(P}QZSTu@?m72)&eOmDPQL?Kz$+ON!(`1kF!DBc^B*>g1=CyQ(vEEt|IKt}tjBf4iMjk8J4K
zZH9QEUf~L2=v5)3y9W$cRV2{IAeW4WkjRjT#wi%Upo}Dg8kVeL2*VUs2uT*}Wy9Jw98=7L#kl*)Y%okmR9u=%N=0v3
zB--*4&5*h*j*zjYV-cPtZ}LXH>6A&sVvxVE>fj>nDNVQHbQu$Lvx|jUYnm37TR|FA
zGA0@NFCtV-BSUFBFsvru*kzas^KX=DyzJ^75~*Munkd=~!*Dnxa71=nAZAs}Ay4iw
z_V>A6VVLa%Z7WkCTNg(xsJJHz+wIocubDkH3iQ^
zN1iaAGWLWa9k$TLqPCK&U1P6DhMWm+!vxlo#jL>`bw~ak2dAv;eh0h}Z
z24&0hgm34;Xa~;;;go{cw#^++IB&>!+44ZUJnF27K+IDs#OPnaAc=mUkwg!5A+7Y#
z=p*fl{iHUNJBFfZU!WeL|0_m5d)QHWCj>$|MVEAj0qGl3w06gj!gbuB8O7r!#^_8j
zx`jTEzY;tWeWo(%nv9THlCU{4}W
w!yiaVKQSi#LPq)>QlOnH(6B=HqgJFp$10vtw1ns0DQhUuSD`(I7g)#We?P=hbpQYW
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$FileResource.class b/libjava/classpath/lib/java/net/URLClassLoader$FileResource.class
deleted file mode 100644
index e7a12687ef3ace5bc33cd42ce722aca8e5189210..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1739
zcmaJ>OHUhD7(Mr5n0OfCLI_}zQrbd-jT?tP(>i?`(mFAD05Kt}PRs-*8fMUV-1n*v
zDa)!-tF(*mqNptkDzzXrQoHYus(S9c>^#WA<2(2J?m6c>-#7Q)|Ni21DS)!B`!fLL&R!`y8m4cn_jofCY}zdnJW*>>wJOgEEfYBT#1kD=RJ36QHFvum
zEC;@2ZV8Oe6w;cz0z}srK51Ipf$h014S9hhiMh2)X+*~{JgwolfRRL%^#&&Jj6lEL
znzwzc8F>Du0zET@>pD$&*1&Ukp6V%u(gdDLB*fjR=$OVy4JQ)Rc;CPbMySi%w%ka*
zh9WEIX6`CMM*$_(vlj#gp&HxM_MLQQ5^8}gWz{WrBiIZj*OZu-47`k2n5?L)
zp6jwE`XVs?kn~QBMZAXBHJlL`2?Zvjm!3B82Ig2j`FJd_+?ZB*de*?3;N12(9VO>k
zdNVyOF!o^6(+HW5;XMOYWpZ!e(PIq@iBFE{Zj@`J^Ig+f@O{tMF^~6^PalK@H`M!i
z0~f&7WYzamHQOzYY$^6IL|EDMy^q!CR^st_Xjj8Ufr+&6Mbo+I`CHaH#iYX{AP76z
zDdVwOoJ46eFCXPSs$Y%ja(G>+(c_$wqw7LBr9^O&YV4XH?pvJa)x?jaEu9;Pxe6%x
z&TyJD+ryiStx{hzR~h~^9O6!vt1FOUyuUcR54~9W69d04+5M$a)H8@(30?$EPamE9R)Or&G40
z3EPW{r9Hg5vnqF@SmpK(59KH`&tF76L5Co}CG~ft{+`r7ATRG=T>gaP^5-rirc)UM
zv5a8~dK>Q$NvNwL7Uac(@)7B~yY>5+U)#sI#S$H;t(N{_V$_($Si}f{An)Rkyoap(
t1%vWejLP4-$n!CImV1|QnFxby>=i5#L1LMB5-YgMe|2>UG;j@L{{!;=koo`s
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$FileURLLoader.class b/libjava/classpath/lib/java/net/URLClassLoader$FileURLLoader.class
deleted file mode 100644
index d750821a99e68f363b88448ffa4f5d12f5db51e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1278
zcmaJ=ZBNrs6n<_usdQyb-Uhy)$dGj#3{epsf{L1uOie&$@Qapl9ha1rw4K3^{tW#U
zm?%pm@dx;$jOX@cVd6~F-rn=_oO7Q0++V+c`~+|lk5woPQ+wtIvuty}yt!UowM@^e
zI_3^{bI*ju$rSEXBpD{Ug|@>O5<9|WNLPbU;glsxg`sCj*ur0CSj>m6vjr<1j=y$B
zjUl<}>~IYUq;#k_ucD7ZKV3&dKQ5@q#OA1mjsXlZs15GRZWxC0Mp(--?M8XScZJ=k
zXwWe%fkzmIqb5)Ljan}lMs=J+4?}-d*!)Fvf1A6n%xwueP<862RWn^7_mMH_?+TA$
zx?{AiBoj}mx;z0ZI01&SZg~`$Xu4LL=x9<2U~YSk)%5wMbf;+Mb?!M$w@xiC{A;Xk
zC310Iz|53n<_5!L1QDO?Sssm=WHPVAK!G7c4Xm2BV+$fDWIq$LA7jY)l8zb7l1})c
z@O+{ykvHB*$DB?|B}YnlPlU_szT0>O^mWi+`EQ(+>xy>{7-qEQje4ucW2a8
zEHVtnLR)+J^svqkeBsz6N!#2H&OY#-mJ9jb2V&DU0`|k%2RrZBtV|=duGuzs16goS
z#Y2W{m*E)tBvAXlVU9GJpxeyoC1KK6p_gt4S$gTOfh0XZwook1w4fDEpl{6_Bi+K#
zcVxc?31jq4OBm%XROKB;6cZQ8RtQsZ372U{Ah?3@pi~xDaV;p7#RUDy7OrD5D*B1?
zq@^f}6}}-`Y$11y>F1?m6hC8_mhu;*PcXk#D7A3==rubEV5gDCU4oSjjnF($c9Bs8
v#+5zf6$^%P5HuDREVdgf;vVi3LI$I#5DN-DON61|0hVdi$j7jPM;QGB7Z)^n
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$JarURLLoader.class b/libjava/classpath/lib/java/net/URLClassLoader$JarURLLoader.class
deleted file mode 100644
index 11c1e9dc61ad6a38e1a3b63e0f8b4aad06d836dd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3418
zcmai1>vJ2`75^Q-R+86_BPStiz$9S64-tjX1}ep&iR%ytJ27!0M+qfa*=t)yUZtxQ
zG3M1*c($eQ2IvEtmK556=``|C&vck}#?16fXW&!&rTt6V{_d`{mMq+Uu+SOun-$6NruoXXxJTBlKOQFC=Ww!-uEI5!96;{h=dTQF;p2LQts2Rj~T6wO;xmYd=8%%
zbk15Xkw8I~xp369r*oDgh;MFNIp;MDNtKHGmG2J-4%Q~PoX2V}Yw}zxs4t~NC3GZl
zfH}-FR6}{&CW^9oThLX>VFmfY9WzOA8G*AtQrCGS7{nKK9KvBjnLhJg0h=rpk#(4l
z;7d57VOX%;6T6W>$3r+OXr;6<)6ULV1-Ht=fVy(WARWV~hKDPFtE12{hU0>*p1`bq
z$R$QIMb|0_ZmF|!{WclKI8JJKL~v`Zq3bj~$IS&x#{^E%{h`rA6BFmh51pd*xB1Bk
zY}vpLv?39@+GN$*HA+V{`dYm(Vk5&rJWAi&l1n2OW0@iu2
z$Wj{2N|rq;zW`3S#ubh9yCFfblUiH^bIuO|yW97pJU?sz@|E&8qfjvibPP
ziQs~YMzgkcytt6DoKt2-fj>H$pE7eP)5)su@?n!Zm!%PR)s$&f=ct)6Z0)UH@6UPj
zhsoKDjg*?2AvBgeW~PwO5!jglAw|K6pvE~C!nZk_ST*b2ifn*W}wy~)EQmx^nRmc~e
zDW2`GMuN{)Y50|PRyD{gd~E$crc8Ez16OpshS%vp!8IMXFqu`erv_jZu>_cbpX&G-
zeoijppd?67HBZn$@vdqj&pj
z34Mu{ez}2|Bs58cR6)Qr{}n&}cn)9X7c+sc
z;p@zf+I@qWYw&j8MrBFYQx
zuw3GcdJ#Ki3A^Pf+$m3EuRQBTWS6fgh{!(thL-VP3=YY6@U9mTK8ebfjdNAe+TmNK
z$u&gOmN;9Uq;_=|MQ4!jb|qadqf=hMHhIa@sH%Yy0*$}L?|8!cK%A?(Yo^H9x+^W}
bP+qNKZZ0z`m??+f!~0w#9{asm#?Jo&a*=(0
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$JarURLResource.class b/libjava/classpath/lib/java/net/URLClassLoader$JarURLResource.class
deleted file mode 100644
index 74ebc39810169e5085ce183bcda9a30250221746..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2202
zcma)7TUQ%Z6#jMy3`s{Q>4o40fnZHS+9~2ah?huhFtkb_mDbxKIfUs76V_y+w!gqv
zU%fo|;*(43S~M)hOP~EwF87%kl8Ir~@&V?YefIhG<@?Ug-~asfCxAulX^0Rm-4&k+
z!;+4%wNWZGM5|S5ikh_N*M!ZM4cTh8?W)ueCCr5Ro_G<4rRCW72+5M`+jh)`aaY&|
zqphlwJRxd{eMv}o9t~mDjk05#R-MmAmQBlaRtV*^cO06Smt}qsBrI^I!l4Vznv7!z
zkLieEjH?e1!^QhCGL;wzXLSr?M6D7!G>j6)OQt1nwD)(Uy(xAYZcWXqXjFu4s=aTF
zI(ue|5FV+&)2a&%mjX`j|22UyR+moEI%qrGNh$UTlj)3i*K8Vr0|t+;eo>VNj@h(Y
z8lEDYbBR)JH@hdQ%BOWqVup|k&7s#J4ReI~Fm-tKdCiPr7V|ou!6kym!q_!c-zEo1
zyT%9kIMT>!$Pg|J$VoZqn8E_V@O$g3?Y?+0wZ;oexocL1Bbnw@I&;UXrX{Ow+jQ<3Rdz4}
zUT#@0>3A8h5JnlnjX=oxWdxsuU%+5xD&xG4=kWsTg)x{6*60cA{nIY=RMq%6(e6|qUf^DS6z_8X
znEW`_aZ|$$7C=Z09q-|N)~HvYC+_RQsx_qDqy3bA`Stf*;I^-ztRDU*VWs~$hR%^w
zfie{hJWaf$-RMQjk+vlotG3sxu~i;Zc$_Uy@G8naPr9*}*`oXt*+Wb}!t5bZyc+M|*#~U(qK_yK`reJG
zd*0oMIb3Fos$$7Uih1|1eEH*l0DcGn#JT|ddVPR3A0XM6%0ve*K7!G~tG$HAR5|n$
z&ePABR9}wdC6?^sF5@*H_bb2rrDLpYcd_5#)r8s|;_bv*2c;uyJSZJwYx@Yd)^iIT
z+`g6j%dK`6bNJZr#WeR7)IoxdFwNgN`V}cU<`Mim7U>T+l^M6&OMWUT=HgQbMp|G-
Xc2H%c2y?EwE3wO8r32zQP)G7#2cskh
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$RemoteResource.class b/libjava/classpath/lib/java/net/URLClassLoader$RemoteResource.class
deleted file mode 100644
index 19b703190ee1b31646e64629a2529090fe437492..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1152
zcma)5O>fgc5Pf4i2}w>AfAer-2v8Zs?th
zXm22M8caAn(2!l_WJU2mYiv~0t7-%
zk_!U$`SRSCesV$>bry*JEstwX%RNqkfhQ+DCiUec^JJZ6x23%O?vP-ehUcOJ6Pq?R
zP~(xT&-yoCcUT6YZli#rvToQY;hM5qHp-|FHeFweSF`CzL~p!NAQD(%#1Ca$
z!b3ts(<#{NKQDwb6S|q8W~ZwpWe*RJP`jeO5{5a?^oqUo)r=a8Yj~vi33gvf5o!Ge
zCw{^u<~J<27~IX`!0?ncF?r)n)RkCl)sY9hSMy}(fq;?18x3qF`fE^3WkA-VWMVOXc+};^V>;EfgRlB8yJ5Jw>g2b?%*yn
zC`*;2N^9$aR2glxJBk#b7MuYfsRhmg~MlsX$S{6#P)AYsr1JH
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$RemoteURLLoader.class b/libjava/classpath/lib/java/net/URLClassLoader$RemoteURLLoader.class
deleted file mode 100644
index d32ac11656c6789416c63a24f19fa03a89744ba9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1724
zcmah}+inwA6kR*9Jzx)U2!vc9Ei@EjC&A&Clor0F9{$5Fp&d!^AlXgC;Z9c!K&X
zed;d+2@(k;1TTH)wjXtE%c3R9$DrF`ig}EYHk2`?mJlmv8@j`W(Pf%o}JE
z9DZOuv=9JA(`mJ
zPC;f_1y>pi;mL3y^7^5SiY^#^~*$X->wPj
z&RS7#WsJFIDwSu3-ayW}WeP-E5LH&SF~A
zJ0n<()7xr9PtkC{kNLWMOHQTSf`RjFj1Za@UOxY2MOC8$BwTBSJ)5pHXchFv>iH&n
za+7lE6ibPRTG(WQ?#N(EU@jS7)k1z4;958x7i>MayW->=(a5+XO6&_i%wKVWvs+dh
z#yAY^+=(1~y%G4;#y{5#Z?^O62Blh_%@2=kAe|pshxr6uk3z-We0FHDe8*+-J$KR%
z=;q!2$OL=P!xN45u+gFZ>c`$N#6Ao}Atb|a24(l2VaM(KV|*~o#{vGk)-kw&+$F{w
znHycl*m#1^@yX=qOH6)+p3xVWT*vA0RClU#$w_{Vq^$KNzd_eCoV`uFeaY^`20mMp
zwVSdQ2A#$ooa66i_-=zvV2Yq1uhAo~&?`S;Kz_oY{EVFZf-(6G6Y?wD{dY{uA2=s}
zq9lLemi&!7@(=FHzhT0&Q38#G@8JTuWYIBQPj~=l@Hu8l%pfLE!bK#I<1~GNGI>9R
a3@-65MU->I)P~Er!grcJgiGowdjAI;54`#S
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$Resource.class b/libjava/classpath/lib/java/net/URLClassLoader$Resource.class
deleted file mode 100644
index bb4d13a6ba0a72e9ef51b3a99bc7dd0e3170d131..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1217
zcma)5YfsZq7=GT-(RGyT5D-xqL)-bA(AXC>bqjJEQ*!6O=>~
zznb`)4Emna%`qaGS-Nw1pZ9s*+xdC^^*ewKJk^mREFC)U9m^N7^?KLdYB^D42hP3-
zS9V1dv_n_u&)pGo%wbM8hZcG?%DIB3-Uq!);30all&ph9YpA%M#|A8;n3EEb$
zFR~cIhzT7gVW?QD8z79CNMo2VZhO9X**NS&n7K#4P4G7U?L$*n8)>PApijP%OQ@
znC*Ibfpx*a&e<0qTyY$GfgkDEB;-_0By8ueg;7c0w>>#b
zx&8;SEj;_dWNAx0DntD0xPNkXc_%*|8NM-iw~ZA4fNc4U
zzshHfe&SOKl147b|%)X~khC)`Wv)%BVoft>La(*I_Z@9y4gXZg52RRa_77kXQNE2#@eY%lrZJfF1Av
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$SoResource.class b/libjava/classpath/lib/java/net/URLClassLoader$SoResource.class
deleted file mode 100644
index 4e7417a7d6328318c4fd85785fd9bfef2c8e0e64..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1097
zcmaJ<$!^n76g~H4aN;;EG|+}Jg_1&s(v%IGKv{$$1zD|VAbU4`YK>Amava1*u>c8*
z#DWjtqY(E!C$WuG7IE&o!#U>;zyJLF1>h<63<$#32j`>H@nqO}e{A>0&U9+~&Z!LQ
z1OHe~{aG-Q2C{_ORe6gnLS`0>2`hFovrEW7cRe@UCp>GULTNH)kBGaeq;7La$oBkG
zX(EG?1p^l0(bY&XPIFiU%dwC{p0H}Wo;;jgoXFsvb265MHQOIKOFU6!*h2^
zsHa4vl`a}qt&R1p2;2Y3j}@_+Ga2^1$t)a%fpjhi8;xdE>iV5TfU(VkPa`=AUEiA;
zxJ9Vwv8uGAWyHj7+%<5AU?qoc;U4ZYnLm+U&-XkzQZR(g1=(WV%UIXM13WaaMOaTF
z#nl#WVx3np;u=CV-EWLTC~}Lo^v=R_zKBM%&r@O#4}oy)AAZ&4K%dxaS8b%iS&3Qi
zDka=npF0S&U-Bq+d1xt#@y%+u#d@&E+t2W&Gp{-UwzB*)P+(7yt+x<5UTU>}z-;Y&
zNBJwe1y=dHqC(;Ya$+B*c*zhzElS6Atnmvdp@JI>rYuDu*y17a{{~xGj#M?#0b43o
zZhb@f5}S7W616Yvh^R~z6g?EgD@~&SIC)M}VCXuw8G_FqkNK;#@8~y|iO)-%Jo_Nt
sXbel)j1x&EG|-$^cIK5iB_mWFCGDPZdIC+ML17qb`bp#T5?
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$SoURLLoader.class b/libjava/classpath/lib/java/net/URLClassLoader$SoURLLoader.class
deleted file mode 100644
index 403dfafd09cf61f3724c31cee279f35a00db67e4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1625
zcma)6Yfscb6g^WGx-CVJck#g+c9(@BFVO{jkQg;9A6O;PZ>2jfB}-SkT@wElCJIIq
zznb`?jCZEp(v58JLpz<$x%ZrV?#%rD^Zh4)dw8lsVVFL)Pi@QNf%Rs;xLdXB^afUvxw#)rMm{zJae1~Gj!iYL|
z8onERvM$$%dlJ(srWnSr>7Ria%rfZjU9TK=l%W!JLTX9)6Lm2uvAu+M*=x6ssBhjt
zC%VY&+9~&ax6El5GNj2ENle{JiiwO#dL?19;JkrF^$j(9&Vy=^9{7#7)wG574pLKxG$yfx{AjPBW*O2iwROJQ(HUeW@7YE
zZ|R+)M@5?cX!P}x=3+gaTgc}xpns-s1wHiEX@oKfRhhyKnooo{^rDYu6oH%QmwD3|
zz@R{jyCcf`k=O*2NqHA9Fhs*ShI3zVJM|3{Uom${G)zz^b3`>qf{%e^1sl@&VFFyZH_G4yiDCM)G8~`lvS!^4ZX^G!a6giF;S2-8d(`yr(jD8
Q+{O-#;wENzgeMsN3p}fXP5=M^
diff --git a/libjava/classpath/lib/java/net/URLClassLoader$URLLoader.class b/libjava/classpath/lib/java/net/URLClassLoader$URLLoader.class
deleted file mode 100644
index 8b272bdb36db93f3e4839605d8c5f2ffc5439748..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1354
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
- *
- * @since 1.2
- *
- * @author Mark Wielaard (mark@klomp.org)
- * @author Wu Gansha (gansha.wu@intel.com)
- */
-public class URLClassLoader extends SecureClassLoader
-{
- // Class Variables
-
- /**
- * A global cache to store mappings between URLLoader and URL,
- * so we can avoid do all the homework each time the same URL
- * comes.
- * XXX - Keeps these loaders forever which prevents garbage collection.
- */
- private static HashMap urlloaders = new HashMap();
-
- /**
- * A cache to store mappings between handler factory and its
- * private protocol handler cache (also a HashMap), so we can avoid
- * create handlers each time the same protocol comes.
- */
- private static HashMap factoryCache = new HashMap(5);
-
- // Instance variables
-
- /** Locations to load classes from */
- private final Vector urls = new Vector();
-
- /**
- * Store pre-parsed information for each url into this vector: each
- * element is a URL loader. A jar file has its own class-path
- * attribute which adds to the URLs that will be searched, but this
- * does not add to the list of urls.
- */
- private final Vector urlinfos = new Vector();
-
- /** Factory used to get the protocol handlers of the URLs */
- private final URLStreamHandlerFactory factory;
-
- /**
- * The security context when created from newInstance()
- * or null when created through a normal constructor or when no
- * SecurityManager
was installed.
- */
- private final AccessControlContext securityContext;
-
- // Helper classes
-
- /**
- * A URLLoader
contains all logic to load resources from a
- * given base URL
.
- */
- abstract static class URLLoader
- {
- /**
- * Our classloader to get info from if needed.
- */
- final URLClassLoader classloader;
-
- /**
- * The base URL from which all resources are loaded.
- */
- final URL baseURL;
-
- /**
- * A CodeSource
without any associated certificates.
- * It is common for classes to not have certificates associated
- * with them. If they come from the same URLLoader
- * then it is safe to share the associated CodeSource
- * between them since CodeSource
is immutable.
- */
- final CodeSource noCertCodeSource;
-
- URLLoader(URLClassLoader classloader, URL baseURL)
- {
- this(classloader, baseURL, baseURL);
- }
-
- URLLoader(URLClassLoader classloader, URL baseURL, URL overrideURL)
- {
- this.classloader = classloader;
- this.baseURL = baseURL;
- this.noCertCodeSource = new CodeSource(overrideURL, null);
- }
-
- /**
- * Returns a Class
loaded by this
- * URLLoader
, or null
when this loader
- * either can't load the class or doesn't know how to load classes
- * at all.
- */
- Class getClass(String className)
- {
- return null;
- }
-
- /**
- * Returns a Resource
loaded by this
- * URLLoader
, or null
when no
- * Resource
with the given name exists.
- */
- abstract Resource getResource(String s);
-
- /**
- * Returns the Manifest
associated with the
- * Resource
s loaded by this URLLoader
or
- * null
there is no such Manifest
.
- */
- Manifest getManifest()
- {
- return null;
- }
-
- Vector getClassPath()
- {
- return null;
- }
- }
-
- /**
- * A Resource
represents a resource in some
- * URLLoader
. It also contains all information (e.g.,
- * URL
, CodeSource
, Manifest
and
- * InputStream
) that is necessary for loading resources
- * and creating classes from a URL
.
- */
- abstract static class Resource
- {
- final URLLoader loader;
-
- Resource(URLLoader loader)
- {
- this.loader = loader;
- }
-
- /**
- * Returns the non-null CodeSource
associated with
- * this resource.
- */
- CodeSource getCodeSource()
- {
- Certificate[] certs = getCertificates();
- if (certs == null)
- return loader.noCertCodeSource;
- else
- return new CodeSource(loader.baseURL, certs);
- }
-
- /**
- * Returns Certificates
associated with this
- * resource, or null when there are none.
- */
- Certificate[] getCertificates()
- {
- return null;
- }
-
- /**
- * Return a URL
that can be used to access this resource.
- */
- abstract URL getURL();
-
- /**
- * Returns the size of this Resource
in bytes or
- * -1
when unknown.
- */
- abstract int getLength();
-
- /**
- * Returns the non-null InputStream
through which
- * this resource can be loaded.
- */
- abstract InputStream getInputStream() throws IOException;
- }
-
- /**
- * A JarURLLoader
is a type of URLLoader
- * only loading from jar url.
- */
- static final class JarURLLoader extends URLLoader
- {
- final JarFile jarfile; // The jar file for this url
- final URL baseJarURL; // Base jar: url for all resources loaded from jar
-
- Vector classPath; // The "Class-Path" attribute of this Jar's manifest
-
- public JarURLLoader(URLClassLoader classloader, URL baseURL,
- URL absoluteUrl)
- {
- super(classloader, baseURL, absoluteUrl);
-
- // Cache url prefix for all resources in this jar url.
- String external = baseURL.toExternalForm();
- StringBuffer sb = new StringBuffer(external.length() + 6);
- sb.append("jar:");
- sb.append(external);
- sb.append("!/");
- String jarURL = sb.toString();
-
- this.classPath = null;
- URL baseJarURL = null;
- JarFile jarfile = null;
- try
- {
- baseJarURL =
- new URL(null, jarURL, classloader.getURLStreamHandler("jar"));
-
- jarfile =
- ((JarURLConnection) baseJarURL.openConnection()).getJarFile();
-
- Manifest manifest;
- Attributes attributes;
- String classPathString;
-
- if ((manifest = jarfile.getManifest()) != null
- && (attributes = manifest.getMainAttributes()) != null
- && ((classPathString
- = attributes.getValue(Attributes.Name.CLASS_PATH))
- != null))
- {
- this.classPath = new Vector();
-
- StringTokenizer st = new StringTokenizer(classPathString, " ");
- while (st.hasMoreElements ())
- {
- String e = st.nextToken ();
- try
- {
- URL url = new URL(baseURL, e);
- this.classPath.add(url);
- }
- catch (java.net.MalformedURLException xx)
- {
- // Give up
- }
- }
- }
- }
- catch (IOException ioe)
- {
- /* ignored */
- }
-
- this.baseJarURL = baseJarURL;
- this.jarfile = jarfile;
- }
-
- /** get resource with the name "name" in the jar url */
- Resource getResource(String name)
- {
- if (jarfile == null)
- return null;
-
- if (name.startsWith("/"))
- name = name.substring(1);
-
- JarEntry je = jarfile.getJarEntry(name);
- if (je != null)
- return new JarURLResource(this, name, je);
- else
- return null;
- }
-
- Manifest getManifest()
- {
- try
- {
- return (jarfile == null) ? null : jarfile.getManifest();
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
-
- Vector getClassPath()
- {
- return classPath;
- }
- }
-
- static final class JarURLResource extends Resource
- {
- private final JarEntry entry;
- private final String name;
-
- JarURLResource(JarURLLoader loader, String name, JarEntry entry)
- {
- super(loader);
- this.entry = entry;
- this.name = name;
- }
-
- InputStream getInputStream() throws IOException
- {
- return ((JarURLLoader) loader).jarfile.getInputStream(entry);
- }
-
- int getLength()
- {
- return (int) entry.getSize();
- }
-
- Certificate[] getCertificates()
- {
- // We have to get the entry from the jar file again, because the
- // certificates will not be available until the entire entry has
- // been read.
- return ((JarEntry) ((JarURLLoader) loader).jarfile.getEntry(name))
- .getCertificates();
- }
-
- URL getURL()
- {
- try
- {
- return new URL(((JarURLLoader) loader).baseJarURL, name,
- loader.classloader.getURLStreamHandler("jar"));
- }
- catch (MalformedURLException e)
- {
- InternalError ie = new InternalError();
- ie.initCause(e);
- throw ie;
- }
- }
- }
-
- /**
- * Loader for remote directories.
- */
- static final class RemoteURLLoader extends URLLoader
- {
- private final String protocol;
-
- RemoteURLLoader(URLClassLoader classloader, URL url)
- {
- super(classloader, url);
- protocol = url.getProtocol();
- }
-
- /**
- * Get a remote resource.
- * Returns null if no such resource exists.
- */
- Resource getResource(String name)
- {
- try
- {
- URL url =
- new URL(baseURL, name, classloader.getURLStreamHandler(protocol));
- URLConnection connection = url.openConnection();
-
- // Open the connection and check the stream
- // just to be sure it exists.
- int length = connection.getContentLength();
- InputStream stream = connection.getInputStream();
-
- // We can do some extra checking if it is a http request
- if (connection instanceof HttpURLConnection)
- {
- int response =
- ((HttpURLConnection) connection).getResponseCode();
- if (response / 100 != 2)
- return null;
- }
-
- if (stream != null)
- return new RemoteResource(this, name, url, stream, length);
- else
- return null;
- }
- catch (IOException ioe)
- {
- return null;
- }
- }
- }
-
- /**
- * A resource from some remote location.
- */
- static final class RemoteResource extends Resource
- {
- private final URL url;
- private final InputStream stream;
- private final int length;
-
- RemoteResource(RemoteURLLoader loader, String name, URL url,
- InputStream stream, int length)
- {
- super(loader);
- this.url = url;
- this.stream = stream;
- this.length = length;
- }
-
- InputStream getInputStream() throws IOException
- {
- return stream;
- }
-
- public int getLength()
- {
- return length;
- }
-
- public URL getURL()
- {
- return url;
- }
- }
-
- /**
- * A SoURLLoader
is a type of URLLoader
- * that loads classes and resources from a shared library.
- */
- final static class SoURLLoader extends URLLoader
- {
- SharedLibHelper helper;
-
- SoURLLoader(URLClassLoader classloader, URL url)
- {
- this(classloader, url, url);
- }
-
- SoURLLoader(URLClassLoader classloader, URL url, URL overrideURL)
- {
- super(classloader, url, overrideURL);
- helper = SharedLibHelper.findHelper(classloader, url.getFile(),
- noCertCodeSource, true);
- }
-
- Class getClass(String className)
- {
- return helper.findClass(className);
- }
-
- Resource getResource(String name)
- {
- URL url = helper.findResource(name);
- if (url == null)
- return null;
- return new SoResource(this, url);
- }
- }
-
- final static class SoResource extends Resource
- {
- SoResource(SoURLLoader loader, URL url)
- {
- super(loader);
- this.url = url;
- }
-
- InputStream getInputStream() throws IOException
- {
- URLConnection conn = url.openConnection();
- return conn.getInputStream();
- }
-
- public int getLength()
- {
- // FIXME we could find this by asking the core object.
- return -1;
- }
-
- public URL getURL ()
- {
- return url;
- }
-
- final URL url;
- }
-
- /**
- * A FileURLLoader
is a type of URLLoader
- * only loading from file url.
- */
- static final class FileURLLoader extends URLLoader
- {
- File dir; //the file for this file url
-
- FileURLLoader(URLClassLoader classloader, URL url, URL absoluteUrl)
- {
- super(classloader, url, absoluteUrl);
- dir = new File(absoluteUrl.getFile());
- }
-
- /** get resource with the name "name" in the file url */
- Resource getResource(String name)
- {
- try
- {
- File file = new File(dir, name).getCanonicalFile();
- if (file.exists() && !file.isDirectory())
- return new FileResource(this, file);
- }
- catch (IOException e)
- {
- // Fall through...
- }
- return null;
- }
- }
-
- static final class FileResource extends Resource
- {
- final File file;
-
- FileResource(FileURLLoader loader, File file)
- {
- super(loader);
- this.file = file;
- }
-
- InputStream getInputStream() throws IOException
- {
- // Delegate to the URL content handler mechanism to retrieve an
- // HTML representation of the directory listing if a directory
- if (file.isDirectory())
- {
- URL url = getURL();
- return url.openStream();
- }
- // Otherwise simply return a FileInputStream
- return new FileInputStream(file);
- }
-
- public int getLength()
- {
- // Delegate to the URL content handler mechanism to retrieve the
- // length of the HTML representation of the directory listing if
- // a directory, or -1 if an exception occurs opening the directory.
- if (file.isDirectory())
- {
- URL url = getURL();
- try
- {
- URLConnection connection = url.openConnection();
- return connection.getContentLength();
- }
- catch (IOException e)
- {
- return -1;
- }
- }
- // Otherwise simply return the file length
- return (int) file.length();
- }
-
- public URL getURL()
- {
- try
- {
- return file.toURL();
- }
- catch (MalformedURLException e)
- {
- InternalError ie = new InternalError();
- ie.initCause(e);
- throw ie;
- }
- }
- }
-
- /**
- * A CoreURLLoader
is a type of URLLoader
- * only loading from core url.
- */
- static final class CoreURLLoader extends URLLoader
- {
- private String dir;
-
- CoreURLLoader(URLClassLoader classloader, URL url)
- {
- super(classloader, url);
- dir = baseURL.getFile();
- }
-
- /** get resource with the name "name" in the core url */
- Resource getResource(String name)
- {
- Core core = Core.find (dir + name);
- if (core != null)
- return new CoreResource(this, name, core);
- return null;
- }
- }
-
- static final class CoreResource extends Resource
- {
- private final Core core;
- private final String name;
-
- CoreResource(CoreURLLoader loader, String name, Core core)
- {
- super(loader);
- this.core = core;
- this.name = name;
- }
-
- InputStream getInputStream() throws IOException
- {
- return new CoreInputStream(core);
- }
-
- public int getLength()
- {
- return core.length;
- }
-
- public URL getURL()
- {
- try
- {
- return new URL(loader.baseURL, name,
- loader.classloader.getURLStreamHandler("core"));
- }
- catch (MalformedURLException e)
- {
- InternalError ie = new InternalError();
- ie.initCause(e);
- throw ie;
- }
- }
- }
-
- // Constructors
-
- /**
- * Creates a URLClassLoader that gets classes from the supplied URLs.
- * To determine if this classloader may be created the constructor of
- * the super class (SecureClassLoader
) is called first, which
- * can throw a SecurityException. Then the supplied URLs are added
- * in the order given to the URLClassLoader which uses these URLs to
- * load classes and resources (after using the default parent ClassLoader).
- *
- * @param urls Locations that should be searched by this ClassLoader when
- * resolving Classes or Resources.
- * @exception SecurityException if the SecurityManager disallows the
- * creation of a ClassLoader.
- * @see SecureClassLoader
- */
- public URLClassLoader(URL[] urls) throws SecurityException
- {
- super();
- this.factory = null;
- this.securityContext = null;
- addURLs(urls);
- }
-
- /**
- * Creates a URLClassLoader
that gets classes from the supplied
- * URL
s.
- * To determine if this classloader may be created the constructor of
- * the super class (SecureClassLoader
) is called first, which
- * can throw a SecurityException. Then the supplied URLs are added
- * in the order given to the URLClassLoader which uses these URLs to
- * load classes and resources (after using the supplied parent ClassLoader).
- * @param urls Locations that should be searched by this ClassLoader when
- * resolving Classes or Resources.
- * @param parent The parent class loader used before trying this class
- * loader.
- * @exception SecurityException if the SecurityManager disallows the
- * creation of a ClassLoader.
- * @exception SecurityException
- * @see SecureClassLoader
- */
- public URLClassLoader(URL[] urls, ClassLoader parent)
- throws SecurityException
- {
- super(parent);
- this.factory = null;
- this.securityContext = null;
- addURLs(urls);
- }
-
- // Package-private to avoid a trampoline constructor.
- /**
- * Package-private constructor used by the static
- * newInstance(URL[])
method. Creates an
- * URLClassLoader
with the given parent but without any
- * URL
s yet. This is used to bypass the normal security
- * check for creating classloaders, but remembers the security
- * context which will be used when defining classes. The
- * URL
s to load from must be added by the
- * newInstance()
method in the security context of the
- * caller.
- *
- * @param securityContext the security context of the unprivileged code.
- */
- URLClassLoader(ClassLoader parent, AccessControlContext securityContext)
- {
- super(parent);
- this.factory = null;
- this.securityContext = securityContext;
- }
-
- /**
- * Creates a URLClassLoader that gets classes from the supplied URLs.
- * To determine if this classloader may be created the constructor of
- * the super class (SecureClassLoader
) is called first, which
- * can throw a SecurityException. Then the supplied URLs are added
- * in the order given to the URLClassLoader which uses these URLs to
- * load classes and resources (after using the supplied parent ClassLoader).
- * It will use the supplied URLStreamHandlerFactory
to get the
- * protocol handlers of the supplied URLs.
- * @param urls Locations that should be searched by this ClassLoader when
- * resolving Classes or Resources.
- * @param parent The parent class loader used before trying this class
- * loader.
- * @param factory Used to get the protocol handler for the URLs.
- * @exception SecurityException if the SecurityManager disallows the
- * creation of a ClassLoader.
- * @exception SecurityException
- * @see SecureClassLoader
- */
- public URLClassLoader(URL[] urls, ClassLoader parent,
- URLStreamHandlerFactory factory)
- throws SecurityException
- {
- super(parent);
- this.securityContext = null;
- this.factory = factory;
- addURLs(urls);
-
- // If this factory is still not in factoryCache, add it,
- // since we only support three protocols so far, 5 is enough
- // for cache initial size
- synchronized (factoryCache)
- {
- if (factory != null && factoryCache.get(factory) == null)
- factoryCache.put(factory, new HashMap(5));
- }
- }
-
- // Methods
-
- /**
- * Adds a new location to the end of the internal URL store.
- * @param newUrl the location to add
- */
- protected void addURL(URL newUrl)
- {
- urls.add(newUrl);
- addURLImpl(newUrl);
- }
-
- private void addURLImpl(URL newUrl)
- {
- synchronized (this)
- {
- if (newUrl == null)
- return; // Silently ignore...
-
- // Reset the toString() value.
- thisString = null;
-
- // Check global cache to see if there're already url loader
- // for this url.
- URLLoader loader = (URLLoader) urlloaders.get(newUrl);
- if (loader == null)
- {
- String file = newUrl.getFile();
- String protocol = newUrl.getProtocol();
-
- // If we have a file: URL, we want to make it absolute
- // here, before we decide whether it is really a jar.
- URL absoluteURL;
- if ("file".equals (protocol))
- {
- File dir = new File(file);
- URL absUrl;
- try
- {
- absoluteURL = dir.getCanonicalFile().toURL();
- }
- catch (IOException ignore)
- {
- try
- {
- absoluteURL = dir.getAbsoluteFile().toURL();
- }
- catch (MalformedURLException _)
- {
- // This really should not happen.
- absoluteURL = newUrl;
- }
- }
- }
- else
- {
- // This doesn't hurt, and it simplifies the logic a
- // little.
- absoluteURL = newUrl;
- }
-
- // Check that it is not a directory
- if ("gcjlib".equals(protocol))
- loader = new SoURLLoader(this, newUrl);
- else if (! (file.endsWith("/") || file.endsWith(File.separator)))
- loader = new JarURLLoader(this, newUrl, absoluteURL);
- else if ("file".equals(protocol))
- loader = new FileURLLoader(this, newUrl, absoluteURL);
- else if ("core".equals(protocol))
- loader = new CoreURLLoader(this, newUrl);
- else
- loader = new RemoteURLLoader(this, newUrl);
-
- // Cache it.
- urlloaders.put(newUrl, loader);
- }
-
- urlinfos.add(loader);
-
- Vector extraUrls = loader.getClassPath();
- if (extraUrls != null)
- {
- Iterator it = extraUrls.iterator();
- while (it.hasNext())
- {
- URL url = (URL)it.next();
- URLLoader extraLoader = (URLLoader) urlloaders.get(url);
- if (! urlinfos.contains (extraLoader))
- addURLImpl(url);
- }
- }
-
- }
- }
-
- /**
- * Adds an array of new locations to the end of the internal URL
- * store. Called from the the constructors. Should not call to the
- * protected addURL() method since that can be overridden and
- * subclasses are not yet in a good state at this point.
- * jboss 4.0.3 for example depends on this.
- *
- * @param newUrls the locations to add
- */
- private void addURLs(URL[] newUrls)
- {
- for (int i = 0; i < newUrls.length; i++)
- {
- urls.add(newUrls[i]);
- addURLImpl(newUrls[i]);
- }
- }
-
- /**
- * Look in both Attributes for a given value. The first Attributes
- * object, if not null, has precedence.
- */
- private String getAttributeValue(Attributes.Name name, Attributes first,
- Attributes second)
- {
- String result = null;
- if (first != null)
- result = first.getValue(name);
- if (result == null)
- result = second.getValue(name);
- return result;
- }
-
- /**
- * Defines a Package based on the given name and the supplied manifest
- * information. The manifest indicates the title, version and
- * vendor information of the specification and implementation and whether the
- * package is sealed. If the Manifest indicates that the package is sealed
- * then the Package will be sealed with respect to the supplied URL.
- *
- * @param name The name of the package
- * @param manifest The manifest describing the specification,
- * implementation and sealing details of the package
- * @param url the code source url to seal the package
- * @return the defined Package
- * @throws IllegalArgumentException If this package name already exists
- * in this class loader
- */
- protected Package definePackage(String name, Manifest manifest, URL url)
- throws IllegalArgumentException
- {
- // Compute the name of the package as it may appear in the
- // Manifest.
- StringBuffer xform = new StringBuffer(name);
- for (int i = xform.length () - 1; i >= 0; --i)
- if (xform.charAt(i) == '.')
- xform.setCharAt(i, '/');
- xform.append('/');
- String xformName = xform.toString();
-
- Attributes entryAttr = manifest.getAttributes(xformName);
- Attributes attr = manifest.getMainAttributes();
-
- String specTitle
- = getAttributeValue(Attributes.Name.SPECIFICATION_TITLE,
- entryAttr, attr);
- String specVersion
- = getAttributeValue(Attributes.Name.SPECIFICATION_VERSION,
- entryAttr, attr);
- String specVendor
- = getAttributeValue(Attributes.Name.SPECIFICATION_VENDOR,
- entryAttr, attr);
- String implTitle
- = getAttributeValue(Attributes.Name.IMPLEMENTATION_TITLE,
- entryAttr, attr);
- String implVersion
- = getAttributeValue(Attributes.Name.IMPLEMENTATION_VERSION,
- entryAttr, attr);
- String implVendor
- = getAttributeValue(Attributes.Name.IMPLEMENTATION_VENDOR,
- entryAttr, attr);
-
- // Look if the Manifest indicates that this package is sealed
- // XXX - most likely not completely correct!
- // Shouldn't we also check the sealed attribute of the complete jar?
- // http://java.sun.com/products/jdk/1.4/docs/guide/extensions/spec.html#bundled
- // But how do we get that jar manifest here?
- String sealed = attr.getValue(Attributes.Name.SEALED);
- if ("false".equals(sealed))
- // make sure that the URL is null so the package is not sealed
- url = null;
-
- return definePackage(name,
- specTitle, specVendor, specVersion,
- implTitle, implVendor, implVersion,
- url);
- }
-
- /**
- * Finds (the first) class by name from one of the locations. The locations
- * are searched in the order they were added to the URLClassLoader.
- *
- * @param className the classname to find
- * @exception ClassNotFoundException when the class could not be found or
- * loaded
- * @return a Class object representing the found class
- */
- protected Class findClass(final String className)
- throws ClassNotFoundException
- {
- // Just try to find the resource by the (almost) same name
- String resourceName = className.replace('.', '/') + ".class";
- int max = urlinfos.size();
- Resource resource = null;
- for (int i = 0; i < max && resource == null; i++)
- {
- URLLoader loader = (URLLoader)urlinfos.elementAt(i);
- if (loader == null)
- continue;
-
- Class k = loader.getClass(className);
- if (k != null)
- return k;
-
- resource = loader.getResource(resourceName);
- }
- if (resource == null)
- {
- String message = className + " not found";
- // Calling this.toString() during VM startup when a
- // security manager is in force causes the stack to
- // be unwound before it can properly be decoded.
- if (Thread.currentThread() != null)
- message += " in " + this;
- throw new ClassNotFoundException(message);
- }
-
- // Try to read the class data, create the CodeSource, Package and
- // construct the class (and watch out for those nasty IOExceptions)
- try
- {
- byte[] data;
- InputStream in = resource.getInputStream();
- try
- {
- int length = resource.getLength();
- if (length != -1)
- {
- // We know the length of the data.
- // Just try to read it in all at once
- data = new byte[length];
- int pos = 0;
- while (length - pos > 0)
- {
- int len = in.read(data, pos, length - pos);
- if (len == -1)
- throw new EOFException("Not enough data reading from: "
- + in);
- pos += len;
- }
- }
- else
- {
- // We don't know the data length.
- // Have to read it in chunks.
- ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
- byte[] b = new byte[4096];
- int l = 0;
- while (l != -1)
- {
- l = in.read(b);
- if (l != -1)
- out.write(b, 0, l);
- }
- data = out.toByteArray();
- }
- }
- finally
- {
- in.close();
- }
- final byte[] classData = data;
-
- // Now get the CodeSource
- final CodeSource source = resource.getCodeSource();
-
- // Find out package name
- String packageName = null;
- int lastDot = className.lastIndexOf('.');
- if (lastDot != -1)
- packageName = className.substring(0, lastDot);
-
- if (packageName != null && getPackage(packageName) == null)
- {
- // define the package
- Manifest manifest = resource.loader.getManifest();
- if (manifest == null)
- definePackage(packageName, null, null, null, null, null, null,
- null);
- else
- definePackage(packageName, manifest, resource.loader.baseURL);
- }
-
- // And finally construct the class!
- SecurityManager sm = System.getSecurityManager();
- Class result = null;
- if (sm != null && securityContext != null)
- {
- result = (Class)AccessController.doPrivileged
- (new PrivilegedAction()
- {
- public Object run()
- {
- return defineClass(className, classData,
- 0, classData.length,
- source);
- }
- }, securityContext);
- }
- else
- result = defineClass(className, classData, 0, classData.length, source);
-
- // Avoid NullPointerExceptions.
- Certificate[] resourceCertificates = resource.getCertificates();
- if(resourceCertificates != null)
- super.setSigners(result, resourceCertificates);
-
- return result;
- }
- catch (IOException ioe)
- {
- ClassNotFoundException cnfe;
- cnfe = new ClassNotFoundException(className + " not found in " + this);
- cnfe.initCause(ioe);
- throw cnfe;
- }
- }
-
- // Cached String representation of this URLClassLoader
- private String thisString;
-
- /**
- * Returns a String representation of this URLClassLoader giving the
- * actual Class name, the URLs that are searched and the parent
- * ClassLoader.
- */
- public String toString()
- {
- synchronized (this)
- {
- if (thisString == null)
- {
- StringBuffer sb = new StringBuffer();
- sb.append(this.getClass().getName());
- sb.append("{urls=[" );
- URL[] thisURLs = getURLs();
- for (int i = 0; i < thisURLs.length; i++)
- {
- sb.append(thisURLs[i]);
- if (i < thisURLs.length - 1)
- sb.append(',');
- }
- sb.append(']');
- sb.append(", parent=");
- sb.append(getParent());
- sb.append('}');
- thisString = sb.toString();
- }
- return thisString;
- }
- }
-
- /**
- * Finds the first occurrence of a resource that can be found. The locations
- * are searched in the order they were added to the URLClassLoader.
- *
- * @param resourceName the resource name to look for
- * @return the URLResource for the resource if found, null otherwise
- */
- private Resource findURLResource(String resourceName)
- {
- int max = urlinfos.size();
- for (int i = 0; i < max; i++)
- {
- URLLoader loader = (URLLoader) urlinfos.elementAt(i);
- if (loader == null)
- continue;
-
- Resource resource = loader.getResource(resourceName);
- if (resource != null)
- return resource;
- }
- return null;
- }
-
- /**
- * Finds the first occurrence of a resource that can be found.
- *
- * @param resourceName the resource name to look for
- * @return the URL if found, null otherwise
- */
- public URL findResource(String resourceName)
- {
- Resource resource = findURLResource(resourceName);
- if (resource != null)
- return resource.getURL();
-
- // Resource not found
- return null;
- }
-
- /**
- * If the URLStreamHandlerFactory has been set this return the appropriate
- * URLStreamHandler for the given protocol, if not set returns null.
- *
- * @param protocol the protocol for which we need a URLStreamHandler
- * @return the appropriate URLStreamHandler or null
- */
- URLStreamHandler getURLStreamHandler(String protocol)
- {
- if (factory == null)
- return null;
-
- URLStreamHandler handler;
- synchronized (factoryCache)
- {
- // Check if there're handler for the same protocol in cache.
- HashMap cache = (HashMap) factoryCache.get(factory);
- handler = (URLStreamHandler) cache.get(protocol);
- if (handler == null)
- {
- // Add it to cache.
- handler = factory.createURLStreamHandler(protocol);
- cache.put(protocol, handler);
- }
- }
- return handler;
- }
-
- /**
- * Finds all the resources with a particular name from all the locations.
- *
- * @param resourceName the name of the resource to lookup
- * @return a (possible empty) enumeration of URLs where the resource can be
- * found
- * @exception IOException when an error occurs accessing one of the
- * locations
- */
- public Enumeration findResources(String resourceName)
- throws IOException
- {
- Vector resources = new Vector();
- int max = urlinfos.size();
- for (int i = 0; i < max; i++)
- {
- URLLoader loader = (URLLoader) urlinfos.elementAt(i);
- Resource resource = loader.getResource(resourceName);
- if (resource != null)
- resources.add(resource.getURL());
- }
- return resources.elements();
- }
-
- /**
- * Returns the permissions needed to access a particular code
- * source. These permissions includes those returned by
- * SecureClassLoader.getPermissions()
and the actual
- * permissions to access the objects referenced by the URL of the
- * code source. The extra permissions added depend on the protocol
- * and file portion of the URL in the code source. If the URL has
- * the "file" protocol ends with a '/' character then it must be a
- * directory and a file Permission to read everything in that
- * directory and all subdirectories is added. If the URL had the
- * "file" protocol and doesn't end with a '/' character then it must
- * be a normal file and a file permission to read that file is
- * added. If the URL
has any other protocol then a
- * socket permission to connect and accept connections from the host
- * portion of the URL is added.
- *
- * @param source The codesource that needs the permissions to be accessed
- * @return the collection of permissions needed to access the code resource
- * @see java.security.SecureClassLoader#getPermissions(CodeSource)
- */
- protected PermissionCollection getPermissions(CodeSource source)
- {
- // XXX - This implementation does exactly as the Javadoc describes.
- // But maybe we should/could use URLConnection.getPermissions()?
- // First get the permissions that would normally be granted
- PermissionCollection permissions = super.getPermissions(source);
-
- // Now add any extra permissions depending on the URL location.
- URL url = source.getLocation();
- String protocol = url.getProtocol();
- if (protocol.equals("file"))
- {
- String file = url.getFile();
-
- // If the file end in / it must be an directory.
- if (file.endsWith("/") || file.endsWith(File.separator))
- {
- // Grant permission to read everything in that directory and
- // all subdirectories.
- permissions.add(new FilePermission(file + "-", "read"));
- }
- else
- {
- // It is a 'normal' file.
- // Grant permission to access that file.
- permissions.add(new FilePermission(file, "read"));
- }
- }
- else
- {
- // Grant permission to connect to and accept connections from host
- String host = url.getHost();
- if (host != null)
- permissions.add(new SocketPermission(host, "connect,accept"));
- }
-
- return permissions;
- }
-
- /**
- * Returns all the locations that this class loader currently uses the
- * resolve classes and resource. This includes both the initially supplied
- * URLs as any URLs added later by the loader.
- * @return All the currently used URLs
- */
- public URL[] getURLs()
- {
- return (URL[]) urls.toArray(new URL[urls.size()]);
- }
-
- /**
- * Creates a new instance of a URLClassLoader
that gets
- * classes from the supplied URL
s. This class loader
- * will have as parent the standard system class loader.
- *
- * @param urls the initial URLs used to resolve classes and
- * resources
- *
- * @return the class loader
- *
- * @exception SecurityException when the calling code does not have
- * permission to access the given URL
s
- */
- public static URLClassLoader newInstance(URL[] urls)
- throws SecurityException
- {
- return newInstance(urls, null);
- }
-
- /**
- * Creates a new instance of a URLClassLoader
that gets
- * classes from the supplied URL
s and with the supplied
- * loader as parent class loader.
- *
- * @param urls the initial URLs used to resolve classes and
- * resources
- * @param parent the parent class loader
- *
- * @return the class loader
- *
- * @exception SecurityException when the calling code does not have
- * permission to access the given URL
s
- */
- public static URLClassLoader newInstance(URL[] urls, final ClassLoader parent)
- throws SecurityException
- {
- SecurityManager sm = System.getSecurityManager();
- if (sm == null)
- return new URLClassLoader(urls, parent);
- else
- {
- final Object securityContext = sm.getSecurityContext();
-
- // XXX - What to do with anything else then an AccessControlContext?
- if (! (securityContext instanceof AccessControlContext))
- throw new SecurityException("securityContext must be AccessControlContext: "
- + securityContext);
-
- URLClassLoader loader =
- (URLClassLoader) AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- return new URLClassLoader(parent,
- (AccessControlContext) securityContext);
- }
- });
- loader.addURLs(urls);
- return loader;
- }
- }
-}
diff --git a/libjava/sources.am b/libjava/sources.am
index fea09f2..418bd8d 100644
--- a/libjava/sources.am
+++ b/libjava/sources.am
@@ -1338,6 +1338,7 @@ classpath/gnu/java/net/loader/FileResource.java \
classpath/gnu/java/net/loader/FileURLLoader.java \
classpath/gnu/java/net/loader/JarURLLoader.java \
classpath/gnu/java/net/loader/JarURLResource.java \
+gnu/java/net/loader/Load_gcjlib.java \
classpath/gnu/java/net/loader/RemoteResource.java \
classpath/gnu/java/net/loader/RemoteURLLoader.java \
classpath/gnu/java/net/loader/Resource.java \
@@ -4846,7 +4847,7 @@ classpath/java/net/SocketTimeoutException.java \
classpath/java/net/URI.java \
classpath/java/net/URISyntaxException.java \
classpath/java/net/URL.java \
-java/net/URLClassLoader.java \
+classpath/java/net/URLClassLoader.java \
classpath/java/net/URLConnection.java \
classpath/java/net/URLDecoder.java \
classpath/java/net/URLEncoder.java \
--
2.7.4